虚变量回归,去掉虚截距只保留交互项。

问题描述 投票:1回答:1

我尝试用一个虚拟变量进行回归,这个变量在2009年之前取值为0,从2009年开始取值为1,以了解金融危机的影响。

我的做法是,在上面的数值中增加一列名为 "虚拟 "的列,然后将虚拟变量添加到回归中。不过,我对 "虚位截距 "不感兴趣,只对虚位交互项感兴趣。但下面的回归还是产生了一个虚拟截距项,这是我没有明确包含的东西。你能帮助我理解如何将其从回归中排除吗?

library(lme4)
library(dplyr)
#TEST##
merged_income_test <- merged_income %>%
  mutate(dummy = case_when(
    year > 2008 ~ 1,
    year < 2009 ~ 0
  ))

regression_merged_income_test <- 
  lmList(income_rate ~ interest_rate + lag1 + lag2 +
           dummy * (interest_rate + lag1 + lag2) | firm, 
         merged_income_test, 
         pool = FALSE )

regression_merged_income_test_results <- coef(regression_merged_income_test)

colnames(regression_merged_income_test_results)

[1] "(Intercept)"   "interest_rate"  "lag1"  "lag2" "dummy" "interest_rate:dummy"
[7] "lag1:dummy"      "lag2:dummy"  

有什么建议可以告诉我如何去除截距 "虚项"?

r regression dummy-variable
1个回答
1
投票

lmglm 对象了解 * 在公式中表示完全交互。所以当你在那里添加它时,lmList会理解为 dummy*(a + b) 因为你要求以下协变量:dummy,a,b,dummy:a,dummy:b。而不是创建一个定义为newvar=dummy*(a+b)的变量,并将其传递到回归中。所以其实在你的lmList中加入lag1,lag2和interest_rate是多余的,因为你是用*来要求它们的。为了说明其中的区别。

require(lme4)
require(data.table)
df = data.table("income_rate" = rnorm(500), 
                "dummy" = rbinom(500, size = 1,prob = .5),
                "interest_rate" = rnorm(500),
                "firm" = rbinom(500, size =1 ,prob =.3),
                "rand" = rbinom(500, size =1 , prob = .2))

df[, new_var := interest_rate*dummy]

lmList(income_rate ~ interest_rate*dummy | firm, df)

Call: lmList(formula = income_rate ~ interest_rate * dummy | firm,      data = df) 
Coefficients:
  (Intercept) interest_rate      dummy interest_rate:dummy
0  0.06110581  -0.005786927 -0.0873395         -0.06646967
1 -0.09507628   0.219900191  0.1439778         -0.20570454


lmList(income_rate ~ new_var | firm, df)
Call: lmList(formula = income_rate ~ new_var | firm, data = df) 
Coefficients:
  (Intercept)     new_var
0  0.01645925 -0.07697772
1 -0.01323612  0.02462004

所以很容易创建你真正想包含的变量,然后把它们传给你。lmList.

© www.soinside.com 2019 - 2024. All rights reserved.