我想从R公式中删除一些交互项。我的情况是我有一个具有很多级别的因子变量(称为A,它取值为1-50),另一个是我想与之交互的连续变量(称为B)。
A*B
创建术语A1:B,A2:B,A3:B,......我想要一个简单的方法来摆脱第一个A1:B术语。
注意:我看到了lm案例的一些先前答案,称为更新,然后删除了一些术语。这对我来说不起作用,因为我正在尝试使用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)
答案 0 :(得分:1)
我认为你应该能够与她进行对比,以实现这一目标。在这里,我们创建自己的对比度,调整默认的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
个术语。