【问题标题】:Plotting predicted model results for averaged models (lm, glm or glmm)绘制平均模型(lm、glm 或 glmm)的预测模型结果
【发布时间】:2021-12-31 08:51:21
【问题描述】:

我使用MuMIn::model.avg 对几个模型进行平均*,并且我对绘制条件(非完整)模型平均值的预测结果很感兴趣。我尝试了ggeffects::ggpredictsjPlot::plot_model,两者都只给出了完整的模型结果。 我可以使用predict() 获得预测的估计值,它可以选择是使用完整模型还是条件模型(使用full = False 表示条件)。但是,如果我声明se.fit = True 以获得标准错误,那么我会收到一条警告说'argument 'full' is ignored',它会预测完整模型的结果。我也尝试在this 回答之后使用emmeans,但它也使用完整模型。

*简单线性 (lm) 和广义 (glm) 模型也会出现同样的问题。

有没有办法从条件平均模型及其 SE 或 CI 中获得预测结果?或者甚至更好,一种绘制它们的方法?

我不确定我的问题是统计问题(即我所问的问题无法统计完成)还是 R 问题。我希望这是第二个,但如果是第一个,我会感谢您的解释。

我没有添加数据,因为我认为它不相关,但如果需要,我可以添加。所有解释变量都是因子(如您在我的 NewData 数据框中所见)。

这是我尝试的几行代码:

m1 <- lm(A ~ B*C + d, data=df, na.action="na.fail")
dd1 <- dredge(m1, subset=Origin)
m1.avg <- model.avg(dd1, fit=TRUE)
plot_model(m1.avg, type="pred", terms=c("B", "C", "d"))

NewData <- data.frame(B=c(rep(c("b1", "b2"), 6)), 
                      D=c(rep("d1", 6), rep("d2", 6)), 
                      C=c(rep(c("C1", "C1", "C3", "C3", "C5", "C5"), 2)))
cbind(NewData, pre=predict(m1.avg, newdata=NewData, full=F, se.fit=T))

【问题讨论】:

    标签: r sjplot mumin


    【解决方案1】:

    我尝试将选项full 添加到emmeansaveraging 对象的支持中,而不是让它强制full = TRUE。这是model.avg 的第一个示例发生的情况:

    require(MuMIn)
    ## Loading required package: MuMIn
    require(emmeans)
    ## Loading required package: emmeans
    
    # Example from Burnham and Anderson (2002), page 100:
    fm1 <- lm(y ~ ., data = Cement, na.action = na.fail)
    ms1 <- dredge(fm1)
    ## Fixed term is "(Intercept)"
    ma = model.avg(ms1, subset = delta < 4, fit = TRUE)
    
    confint(ref_grid(ma, data = Cement, full = TRUE))
    ##    X1   X2   X3 X4 prediction   SE df lower.CL upper.CL
    ##  7.46 48.2 11.8 30         98 4.12  9     88.7      107
    ## 
    ## Confidence level used: 0.95
    
    confint(ref_grid(ma, data = Cement, full = FALSE))
    ## Warning in sqrt(.qf.non0(object@V, x)): NaNs produced
    ##    X1   X2   X3 X4 prediction  SE df lower.CL upper.CL
    ##  7.46 48.2 11.8 30         98 NaN  9      NaN      NaN
    ## 
    ## Confidence level used: 0.95
    

    reprex package (v2.0.0) 于 2022-01-06 创建

    问题在于full = FALSE,返回的协方差矩阵不一定是正定的:

    eigen(vcov(ma, full = FALSE))
    ## eigen() decomposition
    ## $values
    ## [1] 494.70528609   0.07488847   0.04051689  -0.01407614  -0.14314881
    ## 
    ## $vectors
    ##              [,1]        [,2]         [,3]        [,4]        [,5]
    ## [1,]  0.999708163  0.01281974  0.004187958 -0.00648858 -0.01896318
    ## [2,] -0.004861364  0.86884310  0.042589117 -0.24907880  0.42571582
    ## [3,] -0.002164749 -0.11468216 -0.696686782 -0.70017769 -0.10593418
    ## [4,] -0.008651137 -0.14293079  0.715383269 -0.66298278 -0.16785875
    ## [5,] -0.021918654  0.45974571 -0.031983342  0.09012598 -0.88261420
    

    某些特征值为负的事实意味着我们获得了回归系数的某些线性函数的负方差估计。这是允许条件估计的交易破坏者。

    [注意:ref_grid()full 选项只是临时添加的; emmeans]

    的任何版本都没有此功能

    【讨论】:

    • 非常感谢!所以底线是这是不可能的。如果有人可以解释,我很想了解原因,但似乎这是另一个论坛的问题。
    • 我认为条件平均值没有意义。从模型中排除变量这一事实是不应忽略的有效信息。如果 NASA 考虑了没有 O 形环故障的发射数据,他们就不会发射挑战者。但他们只看那些有的地方,结果是一场灾难。条件平均就像忽略那些零。
    • 我认为这真的取决于你的问题和模型。例如,如果你有两个相互竞争的模型,一个有两个变量,一个只有一个,那么使用完全平均值意味着你可以将其中一个变量的效应大小减少 50%,这有意义吗?没有变量的模型并不意味着它没有(0)效应,那么在平均模型时为什么要这样对待它呢?
    • @RonEfrat 我建议在 CrossValidated 上发布一个关于使用条件平均模型进行预测的适当性的问题。
    • 我自己也是这样做的。 Here it is.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多