poly(raw = T)とpoly()の結果が大きく異なるのはなぜですか?


10

2つの異なる時間変数をモデル化します。そのうちのいくつかは、データ(年齢+コホート=期間)で非常に同一線上にあります。これを行うと、ととのlmer相互作用で問題が発生しましたがpoly()、おそらくそれに限定されずlmernlmeIIRCでも同じ結果が得られました。

明らかに、poly()関数の機能についての私の理解は欠けています。私は何をpoly(x,d,raw=T)しているのかを理解し、それなしraw=Tでは直交多項式を作成すると考えました(それが何を意味するのか本当に理解できていません)。これはフィッティングを容易にしますが、係数を直接解釈することはできません。
私は予測関数を使用しているので、予測は同じであると読みました。

しかし、モデルが正常に収束しても、そうではありません。私は中心に置かれた変数を使用していて、多分直交多項式が共線相互作用項との固定効果相関が高くなる可能性があると最初に思いましたが、それは同等であるようです。ここに 2つのモデルの概要を貼り付けました

これらのプロットは、うまくいけば、違いの程度を示しています。私は開発者でのみ利用可能な予測関数を使用しました。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でクリップ、非クリップ)

直交多項式

回答:


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)

ありがとう、心強いです。繰り返しますが、直交多項式の固定効果を額面どおりに受け取ることはできませんが、非常に大きく見えることがあります。たとえば、2つの3次多項式の相互作用を実行すると、多項式とその相互作用が-22から-127400の範囲で固定効果が得られます。それは、特にすべての固定効果が否定的であることを考えると、私にはすごく離れているように思えます。修正された予測関数はこれらの固定された効果を理解するのでしょうか、それともモデルが誤って収束したのでしょうか、結局、lmerで何か問題がありますか?
ルーベン

繰り返しますが、私はすべてが大丈夫だと疑っています(しかし、確かに確かではありません)。オース。多項式は数値の安定性と仮説のテストには適していますが、(理解しているように)実際のパラメーター値の解釈が難しくなる場合があります。lme4-develの現在のバージョン(テストに合格するバージョンを投稿したばかりです。SVNから自分でビルドできない場合、r-forgeで再ビルドするのに24時間程度かかる場合があります)は、生の多項式と直交多項式の間で一致する予測を提供します。別の方法は、連続予測子を中央に配置してスケーリングし、2010年のエコロジーと進化における方法 ...
ベンボルカー

はい、2つの多項式は完全に一致しています。どうもありがとう!予測子をスケーリングおよび中央揃えしましたが、一部のモデルは生の多項式に適合しませんでした。
ルーベン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.