为什么对poly(raw = T)与poly()会得到截然不同的结果?


10

我想对两个不同的时间变量建模,其中一些在我的数据中高度共线性(年龄+同​​类=周期)。这样做会给lmer和的相互作用带来麻烦poly(),但可能不限于lmernlmeIIRC 取得相同的结果。

显然,我对poly()函数的功能缺乏了解。我了解是什么poly(x,d,raw=T),我认为没有raw=T它就可以构成正交多项式(我不能说我真的很明白这是什么意思),这使拟合更容易,但不能让您直接解释系数。
读到这是因为我使用的是预测函数,所以预测应该相同。

但是,即使模型正常收敛,它们也不是。我正在使用居中变量,我首先想到,正交多项式可能会导致与共线交互作用项有更高的固定效应相关性,但似乎具有可比性。我在这里粘贴了两个模型摘要

这些图有望说明差异的程度。我使用了仅在开发人员中可用的预测功能。版本是lme4的版本(在这里听说过),但是固定效果在CRAN版本中是相同的(并且它们本身也看起来不一样,例如,当我的DV的范围为0-4时,交互作用约为5)。

lmer电话是

cohort2_age =lmer(churchattendance ~ 
poly(cohort_c,2,raw=T) * age_c + 
ctd_c + dropoutalive + obs_c + (1+ age_c |PERSNR), data=long.kg)

该预测仅是对假数据(所有其他预测变量= 0)的固定影响,其中我将原始数据中存在的范围标记为外推=F。

predict(cohort2_age,REform=NA,newdata=cohort.moderates.age)

如果需要的话,我可以提供更多背景信息(我无法轻松地产生一个可复制的示例,但是当然可以更加努力地尝试),但是我认为这是一个更基本的要求:poly()请向我解释该功能。

原始多项式

原始多项式

正交多项式(在Imgur处为修剪的,未修剪的)

正交多项式

Answers:


10

我认为这是在预测功能(因此我的错),这实际上NLME做了错误不能共享。(编辑:应在的最新R-forge版本中修复lme4。)请参见以下示例...

我认为您对正交多项式的理解可能还不错。如果要尝试为模型模型编写预测方法,则需要了解的棘手问题是,正交多项式的基础是基于给定的数据集定义的,所以如果您幼稚的话(就像我一样! )model.matrix尝试为新的数据集生成设计矩阵,则会获得新的依据-对于旧参数不再有意义。在修正此问题之前,我可能需要在其中设置陷阱,以告诉人们predict不能使用正交多项式基(或具有相同属性的样条基)。

d <- expand.grid(x=seq(0,1,length=50),f=LETTERS[1:10])
set.seed(1001)
u.int <- rnorm(10,sd=0.5)
u.slope <- rnorm(10,sd=0.2)
u.quad <- rnorm(10,sd=0.1)
d <- transform(d,
               ypred = (1+u.int[f])+
               (2+u.slope[f])*x-
               (1+u.quad[f])*x^2)
d$y <- rnorm(nrow(d),mean=d$ypred,sd=0.2)
ggplot(d,aes(x=x,y=y,colour=f))+geom_line()+
    geom_line(aes(y=ypred),linetype=2)

library(lme4)
fm1 <- lmer(y~poly(x,2,raw=TRUE)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)


fm2 <- lmer(y~poly(x,2)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)
newdat <- data.frame(x=unique(d$x))
plot(predict(fm1,newdata=newdat,REform=NA))
lines(predict(fm2,newdata=newdat,REform=NA),col=2)
detach("package:lme4")

library(nlme)
fm3 <- lme(y~poly(x,2,raw=TRUE),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)
VarCorr(fm3)

fm4 <- lme(y~poly(x,2),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)

newdat <- data.frame(x=unique(d$x))
lines(predict(fm3,newdata=newdat,level=0),col=4)
lines(predict(fm4,newdata=newdat,level=0),col=5)

谢谢,这令人放心。重申一遍:我读到您不能对面值采用正交多项式固定效应,但有时它们看起来异常大。例如,如果我运行两个三次多项式的相互作用,则该多项式及其相互作用的固定范围为-22至-127400。这对我来说似乎遥不可及,特别是考虑到所有固定效应都是负面的。修改后的预测函数是否会理解这些固定效应,或者模型是否会错误地收敛,或者它们毕竟在某种程度上是错误的?
鲁本2012年

再次,我怀疑(但显然不确定)一切都很好。Orth。多项式非常适合数值稳定性和假设检验,但是(如您所知)实际参数值可能更难解释。lme4-devel的当前版本(我刚刚发布了一个应该通过测试的版本,除非可以自己从SVN进行构建,否则可能需要大约24小时才能在r-forge上进行重建),可以为您提供原始/正多项式之间的匹配预测。另一种方法是在Schielzeth 2010 生态与进化方法中集中和缩放连续的预测因子……
Ben Bolker

是的,两个多项式现在完全吻合。非常感谢!我已经对预测变量进行了缩放和居中,但是某些模型不适合原始多项式。
鲁宾2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.