疏浚中的子集(MuMIn) - 如果存在主要影响,则必须包括交互

时间:2014-03-07 10:14:32

标签: r variables regression linear-regression model-comparison

我正在做一些探索工作,我使用挖泥机{MuMIn}。在这个过程中,我想设置两个变量,只有当它们之间的相互作用存在时,它们才能被允许在一起,即它们不能仅作为主要效果一起出现。

使用样本数据:我想挖掘模型fm1(忽略它可能没有意义)。如果变量GNP和Population一起出现,它们还必须包括它们之间的相互作用。

require(stats); require(graphics)
## give the data set in the form it is used in S-PLUS:
longley.x <- data.matrix(longley[, 1:6])
longley.y <- longley[, "Employed"]
pairs(longley, main = "longley data")
names(longley)
fm1 <- lm(Employed ~GNP*Population*Armed.Forces, data = longley)
summary(fm1)
dredge(fm1, subset=!((GNP:Population) & !(GNP + Population)))
dredge(fm1, subset=!((GNP:Population) && !(GNP + Population)))

dredge(fm1, subset=dc(GNP+Population,GNP:Population))
dredge(fm1, subset=dc(GNP+Population,GNP*Population))

如何在dredge()中指明它应该忽略所有存在GNP和人口的模型,而不是它们之间的相互作用?

1 个答案:

答案 0 :(得分:8)

如果我理解得很好,你只想将两个主要效果(比如 a b )与他们的互动模型( a:b < / em>的)。那么如何:subset = !a | (xor(a, b) | 'a:b')(在反引号(`)中包含a:b而不是直引号),例如:

library(MuMIn)
data(Cement)
fm <- lm(y ~ X1 * X2, Cement, na.action = na.fail)
dredge(fm, subset = !X2 | (xor(X1, X2) | `X1:X2`))

或将此条件包装到函数中以使代码更清晰:

test <- function(a, b, c) !a | (xor(a, b) | c)
dredge(fm, subset = test(X1, X2, `X1:X2`))

产生: null X1 X2 X1 * X2 (并排除 X1 + X2