假设您有这样的问题: “汽车重量如何影响每加仑英里数 (mpg)?”
加载并绘制“汽车数据”。在第一个图中,您可以清楚地看到两者之间存在(或多或少)线性关系weight和mpg.
现在你可以问:有时间上的差异吗?您可以为这些年添加一个“虚拟”≤1975年到旗这几年(=1如果真实=0除此以外)。
当您绘制两个时间段的数据时(≤1975 年对>1975),你可以看到有很大的不同。
library(ISLR)
library(dplyr)
# Car dara
df = ISLR::Auto
df = df %>% select(weight,mpg,year)
summary(df)
# Dummy encoding "time"
df$y70_75 = ifelse(df$year<=75, 1, 0)
# Plot
par(mfrow=c(1,2))
plot(df$weight,df$mpg,xlab="Weight", ylab="MPG", ylim=c(10,50))
# Plot with "time dummy"
plot(df$weight[df$y70_75==1],df$mpg[df$y70_75==1],xlab="Weight", ylab="MPG", col="red", ylim=c(10,50))
points(df$weight[df$y70_75==0],df$mpg[df$y70_75==0])

现在我们可以将其插入线性回归,本质上为黑点拟合一条线性线,为红点拟合一条线性线(由虚拟对象表示)。模型看起来像
mpg=β0+β1weight+β3dummy70−75+u
# Regression
reg = lm(mpg~weight,data=df)
summary(reg)
# Regression with time dummy
reg2 = lm(mpg~weight+y70_75,data=df)
summary(reg2)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.325718 0.689669 67.17 <2e-16 ***
weight -0.006985 0.000230 -30.37 <2e-16 ***
y70_75 -4.533643 0.391472 -11.58 <2e-16 ***
多年来≤1975 年,估计mpg将会43.3−4.53∗1−0.007∗weight, 对于剩余的年份 (>1975 年),估计效果为43.3−4.53∗0−0.007∗weight.
在这里添加一个假人只是增加了以假人为条件的截距项。在这里,这将是一个不同的截距项,以假人定义的时间为条件。
我们可以说(平均而言)mpg多年来≤1975年低于晚年。或者换句话说,对于给定的weight,mpg大约低-4.5个单位≤1975年与晚年相比。
当您有很多假人时,您最终可能会得到比观察(行)更多的变量(列),这是一个“高维”问题。例如,当您将文本虚拟编码为“词袋”时,就是这种情况。在这种情况下,您需要在线性模型(例如 Lasso/Ridge)中使用正则化。