MuMIn::dredge()。排除仅包含主效应的模型,仅保留具有交互作用的模型
MuMIn::dredge(). Exclude models only including main effect, keep only models with interactions
是否有可能做出一个通用的逻辑陈述来子集化(排除)所有仅包括主要影响的潜在模型,例如一个?
y ~ A + B + C + A:C + A:B
对于包含 A 的模型,仅包含 A 是交互的一部分的模型(因为关系 y~A 本身没有意义)。
!A || {A:B} || {A:C}
或 dc(A:B, A) && dc(A:C, A)
但没有用于指定 "any interaction containing A" 的符号。
更新: 在 MuMIn >= 1.42.3(目前,在 R-Forge 上)你可以使用点 .
伪函数来指定包含特定一阶项的任何或所有交互。例如
.(A, 2:100)
如果模型包含与 A
的任何 2 阶到 100 阶交互项,则它们包括模型。它仍然是实验性功能,所以请检查您是否得到了预期的结果。
我找到了一个不优雅的解决方案(在注意到 dredge() 如何与 poly() 项一起工作之后;包括或排除整个 n x 幂矩阵,而不是单个列)是创建一个名为“int”的小函数来从两个预测变量及其交互中创建一个相似的矩阵。我按照 poly() 的约定将生成的元素称为“a”、“b”和“a:b”,这将其两个元素称为“1”和“2”。
int = function(a,b){
matOut = matrix(c(a,b,a*b),nrow=length(a))
dimnames(matOut) =list(NULL,c("a","b","a:b"))
return(matOut)}
我们以mtcars数据集为例,用“carb”代替A,“gear”代替B,“am”代替C来预测“mpg”。从标准方法开始,我们可以试试这个。
require(MuMIn)
data(mtcars)
fm = lm(mpg ~ carb*gear + carb*am, mtcars,na.action=na.fail)
length(dredge(fm))
这会产生 11 个可能的模型,其中包含三个线性项和两个交互项的所有组合。
现在,如果我们使用 int() 而不是 *,我们看到我们只得到四个模型;每个交互、它们的组合和空模型。排除所有包含没有交互作用的线性项的模型。
fm = lm(mpg ~ int(carb,gear) + int(carb,am), mtcars,na.action=na.fail)
length(dredge(fm))
是否有可能做出一个通用的逻辑陈述来子集化(排除)所有仅包括主要影响的潜在模型,例如一个?
y ~ A + B + C + A:C + A:B
对于包含 A 的模型,仅包含 A 是交互的一部分的模型(因为关系 y~A 本身没有意义)。
!A || {A:B} || {A:C}
或 dc(A:B, A) && dc(A:C, A)
但没有用于指定 "any interaction containing A" 的符号。
更新: 在 MuMIn >= 1.42.3(目前,在 R-Forge 上)你可以使用点 .
伪函数来指定包含特定一阶项的任何或所有交互。例如
.(A, 2:100)
如果模型包含与 A
的任何 2 阶到 100 阶交互项,则它们包括模型。它仍然是实验性功能,所以请检查您是否得到了预期的结果。
我找到了一个不优雅的解决方案(在注意到 dredge() 如何与 poly() 项一起工作之后;包括或排除整个 n x 幂矩阵,而不是单个列)是创建一个名为“int”的小函数来从两个预测变量及其交互中创建一个相似的矩阵。我按照 poly() 的约定将生成的元素称为“a”、“b”和“a:b”,这将其两个元素称为“1”和“2”。
int = function(a,b){
matOut = matrix(c(a,b,a*b),nrow=length(a))
dimnames(matOut) =list(NULL,c("a","b","a:b"))
return(matOut)}
我们以mtcars数据集为例,用“carb”代替A,“gear”代替B,“am”代替C来预测“mpg”。从标准方法开始,我们可以试试这个。
require(MuMIn)
data(mtcars)
fm = lm(mpg ~ carb*gear + carb*am, mtcars,na.action=na.fail)
length(dredge(fm))
这会产生 11 个可能的模型,其中包含三个线性项和两个交互项的所有组合。
现在,如果我们使用 int() 而不是 *,我们看到我们只得到四个模型;每个交互、它们的组合和空模型。排除所有包含没有交互作用的线性项的模型。
fm = lm(mpg ~ int(carb,gear) + int(carb,am), mtcars,na.action=na.fail)
length(dredge(fm))