我想从R公式中删除一些交互项。我的情况是,我有一个具有多个级别的因子变量(称为A,它的取值范围为1-50),另一个我想要与之交互的连续变量(称为B)。
A*B
创建术语A1:B,A2:B,A3:B ......我想要一种简单的方法来摆脱第一个A1:B术语。
注意:对于lm案例,我看到了一些以前的答案,即调用update,然后删除了一些术语。这对我不起作用,因为我正在尝试使用mlogit软件包估算一个多项式logit模型,并且在不放弃某些交互的情况下,我无法进行第一个估算。
编辑:虽然我没有尝试使用lm,但是如果我可能发生以下情况,那么我认为它将解决我的问题。
dd<-data.frame(A=sample(letters[1:10], 100, replace=T),B = runif(100),z=rexp(100))
#need to drop B term below
reg1 <- lm(z~A*B, dd)
#or need to drop Aa:B term here
reg2 <- lm(z~A*B - B, dd)
#but this doesn't work (I realize why, but this is an
#example of what I would like to have happen)
reg3 <- lm(z~A*B - B - Aa:B, dd)
我认为您应该能够与她进行对比以实现这一目标。在这里,我们创建自己的对比度,该对比度可调整默认的contrast.treament行为以跳过前两个变量。
contr.skip2 <- function (n, contrasts = TRUE, sparse = FALSE)
{
contr <- contr.treatment(n, 1, contrasts, sparse)
contr[2, ] <- 0
contr[, -1]
}
然后我们可以拟合模型并传递我们的特殊对比
lm(z~A*B, dd, contrasts=list(A="contr.skip2"))
# Call:
# lm(formula = z ~ A * B, data = dd, contrasts = list(A = "contr.skip2"))
#
# Coefficients:
# (Intercept) Ac Ad Ae Af Ag Ah
# 1.09981 -0.14541 -0.86334 -0.18478 -0.77302 0.19681 0.23845
# Ai Aj B Ac:B Ad:B Ae:B Af:B
# -0.74962 -0.49014 0.09729 0.14705 1.09606 0.14706 0.88919
# Ag:B Ah:B Ai:B Aj:B
# -0.62796 -0.70155 1.60253 -0.20564
如您所见,我们Ab
在模型中不再有术语。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句