如何从R公式中删除一些交互项

时间:2014-09-08 22:27:10

标签: r

我想从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)

1 个答案:

答案 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个术语。