我正在做一些探索性工作,我使用了 dredge{MuMIn}。在此过程中,我想将两个变量设置为仅当它们之间存在相互作用时才允许它们一起出现,即它们不能仅作为主效应一起存在。

使用示例数据:我想疏通模型 fm1(不管它可能没有意义)。如果变量 GNP 和人口一起出现,它们还必须包括它们之间的相互作用。

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 和 Population 存在的所有模型,而不是它们之间的相互作用?

最佳答案

如果我理解得很好,您只想对两个主要效应(例如 a 和 b)及其相互作用 (a:b) 进行建模。那么怎么样: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)

关于r - 疏浚 (MuMIn) 中的子集 - 如果存在主效应,则必须包括交互作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22247263/

10-12 18:58