2015-04-23 15 views
2

考虑与互动方面的LM适合对象,例如:如何在表中显示R lm对象相互作用系数?

Call: 
lm(formula = mpg ~ interaction(gear, am, drop = T) - 1 + cyl, data = mtcars) 

Coefficients: 
interaction(gear, am, drop = T)3.0 interaction(gear, am, drop = T)4.0 
          35.478        34.022 
interaction(gear, am, drop = T)4.1 interaction(gear, am, drop = T)5.1 
          37.949        36.946 
           cyl 
          -2.594 

是否有一个二维表来安排的(只)中的交互项的系数一个简单的方法?例如:

gear am = 0 am = 1 
3  35.478 NA 
4  34.022 37.949 
5  NA  36.946 

回答

1

您可以使用broom包轻松获取信息。这只是一个调整你能满足您的需求表的事:

model <- lm(formula = mpg ~ interaction(gear, am, drop = T) - 1 + cyl, data = mtcars) 

library(broom) 
tidy(model)[grep("interaction", tidy(model)$term),] 
#        term estimate std.error statistic  p.value 
#1 interaction(gear, am, drop = T)3.0 35.47755 3.533483 10.04039 1.302118e-10 
#2 interaction(gear, am, drop = T)4.0 34.02157 2.781402 12.23181 1.599806e-12 
#3 interaction(gear, am, drop = T)4.1 37.94942 2.348132 16.16154 2.087857e-15 
#4 interaction(gear, am, drop = T)5.1 36.94589 3.096187 11.93271 2.822201e-12 

为了得到你想要的表,你可以这样做:

dtab <- table(mtcars$gear, mtcars$am) 
dtab[which(dtab != 0)] <- tidy(model)[grep("interaction", tidy(model)$term),]$estimate 
dtab[which(dtab == 0)] <- NA 
    #  0  1 
    #3 35.47755   
    #4 34.02157 37.94942 
    #5   36.94589 
+1

它也很好地扩展到更高的维度:如果不是'我们对'gear,am,carb'感兴趣,使用'table(mtcars $ gear,mtcars $ am,mtcars $ carb)'' – dzeltzer