LM Interaction пропускает различные уровни, используя * и: - PullRequest
0 голосов
/ 19 июня 2019

Я бегу линейную модель с взаимодействием.

Когда я использую термин взаимодействия asterix *, первый уровень опускается (для предотвращения мультиколлинеарности).
Однако, когда я использую термин взаимодействия с двоеточием :, последний уровень опускается.Я хочу, чтобы он оставался последовательным и удалялся на одном уровне.

Когда я вручную перемещаю первый уровень на последний уровень, я получаю ожидаемые результаты.

library(data.table)
library(forcats)
library(stargazer)
dt<-data.table("id"=as.factor(rep(c("a","b","c","d"),2)),
               "y"=rnorm(20),
               "time"=as.factor(rep(1:5,each=4)))
dt$treat<-as.factor(ifelse(dt$id=="a"|dt$id=="b",1,0))


lm1<-lm(y~factor(id)+factor(time)*factor(treat),dt)
lm2.wrong<-lm(y~factor(id)+factor(time):factor(treat),dt)
### Here is my Fix
dt$time<-fct_relevel(dt$time,"1", after = Inf) # ":" Interaction removes the last level...
lm2.right<-lm(y~factor(id)+factor(time):factor(treat),dt)
stargazer(lm1,lm2.wrong,lm2.right,type = "text")

Вот результаты:

==========================================================
                                  Dependent variable:     
                             -----------------------------
                                           y              
                                (1)       (2)       (3)   
----------------------------------------------------------
factor(id)b                   -0.074    -0.074    -0.074  
                              (0.481)   (0.481)   (0.481) 

factor(id)c                   -0.619     1.044    -0.619  
                              (0.833)   (0.833)   (0.833) 

factor(id)d                   -0.019    1.644*    -0.019  
                              (0.833)   (0.833)   (0.833) 

factor(time)2                 -0.425                      
                              (0.760)                     

factor(time)3                  0.036                      
                              (0.760)                     

factor(time)4                  0.995                      
                              (0.760)                     

factor(time)5                 -0.061                      
                              (0.760)                     

factor(treat)1                                            


factor(time)1:factor(treat)0             0.061            
                                        (0.760)           

factor(time)2:factor(treat)0            -0.364    -0.425  
                                        (0.760)   (0.760) 

factor(time)3:factor(treat)0             0.098     0.036  
                                        (0.760)   (0.760) 

factor(time)4:factor(treat)0             1.056     0.995  
                                        (0.760)   (0.760) 

factor(time)5:factor(treat)0                      -0.061  
                                                  (0.760) 

factor(time)1:factor(treat)1            1.724*            
                                        (0.760)           

factor(time)2:factor(treat)1   0.090     1.389    -0.335  
                              (1.075)   (0.760)   (0.760) 

factor(time)3:factor(treat)1   0.180    1.941**    0.217  
                              (1.075)   (0.760)   (0.760) 

factor(time)4:factor(treat)1  -2.462*    0.257    -1.467* 
                              (1.075)   (0.760)   (0.760) 

factor(time)5:factor(treat)1  -1.663              -1.724* 
                              (1.075)             (0.760) 

Constant                       0.744    -0.980     0.744  
                              (0.589)   (0.589)   (0.589) 

----------------------------------------------------------
Observations                    20        20        20    
R2                             0.695     0.695     0.695  
Adjusted R2                    0.275     0.275     0.275  
Residual Std. Error (df = 8)   0.760     0.760     0.760  
F Statistic (df = 11; 8)       1.656     1.656     1.656  
==========================================================
Note:                          *p<0.1; **p<0.05; ***p<0.01

Я ожидал, что первые две спецификации пропустят первый уровень (factor(time)1).Без изменения уровней вручную.Есть ли способ сделать это систематически?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...