Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 虚拟变量回归,删除虚拟截距,仅保留交互项_R_Regression_Dummy Variable - Fatal编程技术网

R 虚拟变量回归,删除虚拟截距,仅保留交互项

R 虚拟变量回归,删除虚拟截距,仅保留交互项,r,regression,dummy-variable,R,Regression,Dummy Variable,我试着用一个虚拟变量进行回归,2009年前取0,2009年取1,以观察金融危机的影响 为此,我添加了一个名为“dummy”的额外列,其中的值如上所述,然后将dummy变量添加到回归中。然而,我对“虚拟拦截”不感兴趣,只对虚拟交互术语感兴趣。下面的回归仍然会产生一个伪截距项,我没有明确地包括这一项。你能帮我理解如何从回归中排除它吗 library(lme4) library(dplyr) #TEST## merged_income_test <- merged_income %>%

我试着用一个虚拟变量进行回归,2009年前取0,2009年取1,以观察金融危机的影响

为此,我添加了一个名为“dummy”的额外列,其中的值如上所述,然后将dummy变量添加到回归中。然而,我对“虚拟拦截”不感兴趣,只对虚拟交互术语感兴趣。下面的回归仍然会产生一个伪截距项,我没有明确地包括这一项。你能帮我理解如何从回归中排除它吗

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"  
库(lme4)
图书馆(dplyr)
#试验##
合并收入测试%
变异(虚拟=情况)(
年份>2008~1,
年份<2009~0
))

回归-合并-收入-测试大多数
lm
glm
对象在公式中理解
*
,表示完全交互。因此,当您将其添加到那里时,lmList会理解
dummy*(a+b)
,因为您需要以下协变量:dummy,a,b,dummy:a,dummy:b。相反,创建一个定义为newvar=dummy*(a+b)的变量,并将其传递到回归中。因此,实际上,在lmList中添加lag1、lag2和利率是多余的,因为您要求它们带有*。为了说明区别:

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

非常感谢您,尤其是您清楚地解释了您的解决方案。@KarlWig当然。请随意接受答案,这样它就不会出现在“未回答”中!