我想计算交互效果,如this blog posting所示,因此我可以计算y = (b0 + (b1 * xa) + (b3 * xa * xb))
,其中b0
是截距的估计值,b1
是预测变量A和b3
的估计是预测变量A和B之间相互作用的估计。
要做到这一点,我需要
对于“简单”广义线性模型,我可以使用数据矩阵参数将原始数据值存储在拟合模型对象中(glm(... x=TRUE)
。例如:
fit <- glm(f1care ~ c12hour + neg_c_7 + c172 +
sex1 + sex2 + c172:neg_c_7 + sex1:c12hour,
data = mydf,
x = TRUE,
family = binomial("logit"))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.4674300 0.1759883 8.338 < 2e-16 ***
c12hour 0.0016157 0.0016315 0.990 0.3220
neg_c_7 -0.0549614 0.0108868 -5.048 4.45e-07 ***
c1721 -0.1575547 0.2752344 -0.572 0.5670
sex12 -0.0320619 0.1286984 -0.249 0.8033
sex22 0.2091354 0.0874629 2.391 0.0168 *
neg_c_7:c1721 0.0090043 0.0202720 0.444 0.6569
c12hour:sex12 -0.0003121 0.0018246 -0.171 0.8642
> head(fit$x)
(Intercept) c12hour neg_c_7 c1721 sex12 sex22 neg_c_7:c1721 c12hour:sex12
1 1 10 9 0 1 1 0 10
2 1 4 13 1 1 1 13 4
3 1 12 21 0 1 1 0 12
4 1 60 14 0 1 1 0 60
5 1 40 17 0 1 1 0 40
6 1 50 17 0 1 1 0 50
如您所见,系数的名称与模型数据框(fit$x
)中的列名相同。
如果我找到一个交互术语(例如c12hour:sex12
),我可以在冒号处拆分名称,使用c12hour
和sex12
,并通过模型矩阵列名称查找值(名字相同)。
现在我的问题是,如何使用merMod
个对象执行此操作?用于使模型(fit@frame
)与原始值相符的数据框的列名称看起来像这样:
library(lme4)
fit <- glmer(f1care ~ c12hour + neg_c_7 + c172 +
sex1 + sex2 +
c172:neg_c_7 + sex1:c12hour + (1|g2ctry),
data = mydf,
family = binomial("logit"))
> colnames(fit@frame)[-1]
[1] "c12hour" "neg_c_7" "c172" "sex1" "sex2" "g2ctry"
通过summary
或fixef
访问的系数如下所示:
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.2388127 0.2382648 5.199 2e-07 ***
c12hour 0.0018070 0.0016450 1.098 0.272018
neg_c_7 -0.0387817 0.0115511 -3.357 0.000787 ***
c1721 0.1187357 0.2842743 0.418 0.676181
sex12 -0.0305578 0.1306499 -0.234 0.815069
sex22 0.1580400 0.0897806 1.760 0.078358 .
neg_c_7:c1721 -0.0106958 0.0209961 -0.509 0.610458
c12hour:sex12 -0.0009486 0.0018350 -0.517 0.605206
> cbind(fixef(fit))
[,1]
(Intercept) 1.2388126568
c12hour 0.0018069626
neg_c_7 -0.0387817065
c1721 0.1187357405
sex12 -0.0305578499
sex22 0.1580400407
neg_c_7:c1721 -0.0106958049
c12hour:sex12 -0.0009485618
如您所见,列名sex1
和sex2
与系数“{1}}和sex12
不相同(与第一个,简单{ {1}}示例,两者都相同)。
我目前的方法是
sex22
)glm
,如果是,请检索sex1
(例如factor
和levels
)1
和2
)sex11
不会匹配,但sex12
将匹配第二个交互字词sex11
)我想知道这是最好的还是唯一的解决方案,或者是否有可能出现“检测”交互条款的方式不起作用的情况?
答案 0 :(得分:0)
好的,model.matrix
执行操作并返回一个数据框,其中列名对应于模型摘要中的术语名称。