【问题标题】:MuMIn::dredge(). Exclude models only including main effect, keep only models with interactionsMuMIn::dredge()。仅排除包含主效应的模型,仅保留具有交互作用的模型
【发布时间】:2019-01-07 14:43:00
【问题描述】:

是否可以为子集化(排除)所有仅包含例如主要影响的潜在模型做出一般逻辑陈述一个?

y ~ A + B + C + A:C + A:B

对于包含 A 的模型,仅包含其中 A 是交互一部分的模型(因为关系 y~A 本身没有意义)。

【问题讨论】:

    标签: r model-comparison


    【解决方案1】:

    我得出的一个不优雅的解决方案(在注意到 dredge() 如何与 poly() 项一起工作后;包括或排除整个 nx 幂矩阵,而不是各个列)是创建一个名为“int”的小函数来创建一个两个预测变量及其交互作用的相似矩阵。根据 poly() 的约定,我将生成的元素称为“a”、“b”和“a:b”,poly() 将其两个元素称为“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))
    

    【讨论】:

      【解决方案2】:

      !A || {A:B} || {A:C}dc(A:B, A) && dc(A:C, A) 但没有指定“任何包含 A 的交互”的符号。

      更新:在 MuMIn >= 1.42.3(目前在 R-Forge 上)中,您可以使用点 . 伪函数来指定包含特定第一个的任何或所有交互-订单项。例如 .(A, 2:100) 包括模型,如果它们包含任何带有A 的 2 到 100 阶交互项。它仍是实验性功能,因此请检查您是否达到了预期。

      【讨论】:

      • 不是真正令人满意的解决方案,因为相关模型包含的变量不仅仅是 B 和 C 与 A 交互。所以这样的添加会很棒!我个人对 dredge() 的破解包含一个字符串查询,我在其中删除了所有潜在模型而不进行交互,但我希望那里有更好的解决方案......
      • 好吧,那么我希望新添加的内容能满足您的需求。我编辑了我的回复以包含更改。
      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多