MuMin(R)中的dredge保留了具有高阶项的模型,而没有它们各自的低阶项

zzoitvuj  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(47)

我正在使用MuMin包中的函数dredge进行模型选择。我的模型中有一个多项式。我的印象是(https://www.rdocumentation.org/packages/MuMIn/versions/1.42.1/topics/dredge,请参阅“交互”)MuMin作为标准的沟渠模型,包括高阶项而没有相应的低阶项;然而,当我使用它时,顶部模型只包括高阶项。
下面是我用来创建全局模型的代码,其中包括hour

sc.mod.env.hour<-clmm(seedcat~hour+I(hour^2)+MeanSpeed+RH+TKE+AirTemp+MeanUpdraft+(1|jdayfac), data=sc.data, na.action = na.fail, Hess =TRUE)

字符串
但是当我运行dredge时:

dro.env.hour<-dredge(sc.mod.env.hour)


输出包括包含I(hour^2)但不包含hour的模型

Model selection table 
    (Intrc)   ArTmp    hour hour^2 MnSpd    MnUpd     RH      TKE df   logLik   AICc  delta weight
46        + -1.2170         -3.340 1.894          -4.219          13 -571.772 1170.5   0.00  0.154
62        + -1.3410         -3.478 1.964  0.30990 -4.269          14 -570.882 1170.9   0.37  0.128
45        +                 -2.882 2.052          -3.214          12 -573.245 1171.3   0.81  0.103
47        +         -0.3595 -2.670 1.942          -3.601          13 -572.374 1171.7   1.20  0.084
63        +         -0.4495 -2.712 2.010  0.33870 -3.645          14 -571.350 1171.8   1.30  0.080


我也尝试过使用poly(hour,2)来定义全局模型,但这导致只包含一个小时。
我使用的是clmm,但我尝试了一个更简单的模型,使用lm,并得到了相同的结果。
我不确定这是否应该在交叉验证,但这是一个编程问题,而不是一个统计问题,所以认为它应该在这里。
编辑:我已经通过使用子集解决了这个问题:

dro.env.hour<-dredge(sc.mod.env.hour, subset=(dc(hour, I(hour^2)))


虽然目前还不清楚为什么这是一个问题摆在首位。

wmomyfyw

wmomyfyw1#

如果其他人有这个问题,我在MuMin手册中找到了这个解决方案:
首先创建一个有名称的子集,在这种情况下,我想要X和Y的二次效应)

msubset <- expression(  dc(X, `I(X^2)`) &
                        dc(`Y`, `I(Y^2)`))

字符串
然后,例如,

mglm <- glm(response~X + I(X^2) + Y + I(Y^2)+ Z,
                  family=binomial,
                  na.action = "na.fail",
                  data=mdata)


现在使用指定的子集进行dredge

mmodels<-dredge(mglm, subset=msubset)


检查汇总表

model.sel(mmodels)

vm0i2vca

vm0i2vca2#

另一种可能的解决方案(未经测试!)是在模型中使用poly(hour, 2)而不是hour + I(hour^2)(或者,如果你真的想要“原始”而不是正交多项式,poly(hour, 2, raw=TRUE))。这样R就可以识别poly()是一个单独的项。(hour + I(hour^2)的问题是,需要在模型框架结构机器中进行一些奇特的解析,才能分辨出这些术语是相关的。

相关问题