我正在运行线性回归模型,想知道删除截距项的条件是什么。
在比较两个不同回归的结果时,一个有截距,另一个没有,我注意到没有截距的函数的要高得多。我应该遵循某些条件或假设来确保删除截距项是有效的吗?
我正在运行线性回归模型,想知道删除截距项的条件是什么。
在比较两个不同回归的结果时,一个有截距,另一个没有,我注意到没有截距的函数的要高得多。我应该遵循某些条件或假设来确保删除截距项是有效的吗?
最短的答案:从不,除非您确定数据生成过程的线性近似(线性回归模型)由于某些理论或任何其他原因被迫通过原点。如果不是,即使截距在统计上不显着,其他回归参数也会有偏差(奇怪但确实如此,例如,请参阅Brooks Introductory Econometrics)。最后,正如我经常向我的学生解释的那样,保留截距项可以确保残差项为零均值。
对于您的两个模型案例,我们需要更多上下文。线性模型可能不适合这里。例如,如果模型是乘法的,则需要先记录变换。由于过程呈指数增长,有时可能会发生会“高得多”。
筛选数据,使用 RESET 测试或任何其他线性规范测试来测试模型,这可能有助于查看我的猜测是否正确。而且,构建最高的模型是我真正关心的最后一个统计属性之一,但是很高兴向那些不太熟悉计量经济学的人展示(有很多肮脏的技巧可以使确定接近1 :))。
删除拦截是一个不同的模型,但有很多例子证明它是合法的。到目前为止的答案已经详细讨论了真实截距为 0 的示例。我将重点介绍一些我们可能对非典型模型参数化感兴趣的示例。
示例 1:ANOVA 样式模型。对于分类变量,我们通常创建编码组成员身份的二进制向量。标准回归模型被参数化为截距 + k - 1 个虚拟向量。截距编码“参考”组的期望值或省略的向量,其余向量测试每个组与参考之间的差异。但在某些情况下,获取每个组的期望值可能很有用。
dat <- mtcars
dat$vs <- factor(dat$vs)
## intercept model: vs coefficient becomes difference
lm(mpg ~ vs + hp, data = dat)
Coefficients:
(Intercept) vs1 hp
26.96300 2.57622 -0.05453
## no intercept: two vs coefficients,
## conditional expectations for both groups
lm(mpg ~ 0 + vs + hp, data = dat)
Coefficients:
vs0 vs1 hp
26.96300 29.53922 -0.05453
示例 2:标准化数据的情况。在某些情况下,可能会使用标准化数据。在这种情况下,截距设计为 0。我认为一个典型的例子是老式的结构方程模型或因子,它只在数据的协方差矩阵上运行。在下面的情况下,无论如何估计截距可能是一个好主意,如果只是为了降低额外的自由度(因为估计平均值,你真的应该失去它),但有少数情况下构造,均值可能为 0(例如,某些实验参与者分配评级,但被限制给出相同的正面和负面)。
dat <- as.data.frame(scale(mtcars))
## intercept is 0 by design
lm(mpg ~ hp + wt, data = dat)
Coefficients:
(Intercept) hp wt
3.813e-17 -3.615e-01 -6.296e-01
## leaving the intercept out
lm(mpg ~ 0 + hp + wt, data = dat)
Coefficients:
hp wt
-0.3615 -0.6296
示例 3:多元模型和隐藏截距。这个例子在很多方面与第一个例子相似。在这种情况下,数据已被堆叠,因此两个不同的变量现在位于一个长向量中。第二个变量编码有关响应向量 是否y
属于mpg
或的信息disp
。在这种情况下,要获得每个结果的单独截距,您可以抑制整体截距并包含两个虚拟向量以进行测量。这是一种多变量分析。通常不使用lm()
因为你有重复的措施,应该允许不独立。但是,在一些有趣的情况下这是必要的。例如,当尝试使用随机效应进行中介分析时,要获得完整的方差协方差矩阵,您需要同时估计两个模型,这可以通过堆叠数据和巧妙地使用虚拟向量来完成。
## stack data for multivariate analysis
dat <- reshape(mtcars, varying = c(1, 3), v.names = "y",
timevar = "measure", times = c("mpg", "disp"),
direction = "long")
dat$measure <- factor(dat$measure)
## two regressions with intercepts only
lm(cbind(mpg, disp) ~ 1, data = mtcars)
Coefficients:
mpg disp
(Intercept) 20.09 230.72
## using the stacked data, measure is difference
## between outcome means
lm(y ~ measure, data = dat)
Coefficients:
(Intercept) measurempg
230.7 -210.6
## separate 'intercept' for each outcome
lm(y ~ 0 + measure, data = dat)
Coefficients:
measuredisp measurempg
230.72 20.09
我并不是说拦截通常应该被删除,但灵活一点是好的。
这里有很好的答案。两件小事:
无论您是否有可能看到所有值为零的解释变量,您都不应该放弃截距。
如果您删除截距,那么其他估计都会有偏差。即使截距的真实值大约为零(这是您可以从数据中得出的全部结论),如果您将斜率强制为零,那么您就是在搞乱斜率。
除非-您正在使用非常清晰且明显的物理模型来测量某些东西,该物理模型要求截距为零(例如,您将矩形棱柱的高度、宽度和长度作为解释变量,而响应变量是带有一些测量误差的体积)。如果你的响应变量是房子的价值,你肯定需要留下拦截。