2014-03-07 17 views
3

我正在做一些探索性工作,我使用疏浚{MuMIn}。在这个过程中,我想设置两个变量,只有当它们之间存在交互时才允许它们一起使用,即它们不能仅作为主要效果一起出现。挖掘中的子集(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()指定它应该忽略其中国民生产总值和人口都存在所有车型,而不是他们之间的互动?

+0

对不起,但我没有看到你面临的问题。什么是问题? – Llopis

+0

如何在疏浚()中指定它应该忽略GNP和总体存在的所有模型,而不是它们之间的相互作用。 –

回答

7

如果我没有理解好了,你要建模的两个主要的影响(比如,一个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`)) 

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

+0

非常感谢! –

+0

我面临着类似的情况,但我想包括结果集中的所有组合。我如何告诉疏通? – user13892