RのPROC Mixedとlme / lmerの違い-自由度


12

注:法的な理由で以前の質問を削除する必要があったため、この質問は再投稿です。


SASのPROC MIXED をR lmenlmeパッケージの関数と比較していると、やや紛らわしい違いを見つけました。より具体的には、異なるテストの自由度はとの間PROC MIXEDで異なり、lmeなぜだろうと思いました。

次のデータセットから開始します(以下のRコード)。

  • ind:測定が行われる個人を示す因子
  • fac:測定が行われる臓器
  • trt:治療を示す因子
  • y:連続応答変数

アイデアは、次の単純なモデルを構築することです:

y ~ trt + (ind)indランダムな要因として y ~ trt + (fac(ind))facにネストされたindランダムな要因として、

最後のモデルでは特異性が生じることに注意してください。とのyすべての組み合わせに対しての値は1つだけです。indfac

最初のモデル

SASでは、次のモデルを作成します。

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind /s;
run;

チュートリアルによると、使用しているRの同じモデルnlmeは次のようになります。

> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)

両方のモデルは、係数とそのSEに対して同じ推定値を与えますがtrt、の効果に対してF検定を実行する場合、異なる自由度を使用します。

SAS : 
Type 3 Tests of Fixed Effects 
Effect Num DF Den DF     F  Value Pr > F 
trt         1      8  0.89        0.3724 

R : 
> anova(m2)
            numDF denDF  F-value p-value
(Intercept)     1     8 70.96836  <.0001
trt             1     6  0.89272  0.3812

質問1:両方のテストの違いは何ですか?両方ともREMLを使用して適合され、同じコントラストを使用します。

注:DDFM =オプションに異なる値を試しました(理論的にはlmeと同じ結果になるはずのBETWITHINを含む)

セカンドモデル

SASの場合:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM fac(ind) /s;
run;

Rの等価モデルは次のようになります。

> m4<-lme(y~trt,random=~1|ind/fac,data=Data)

この場合、いくつかの非常に奇妙な違いがあります:

  • Rは文句を言わずに適合しますが、SASは最後のヘッセ行列が正定値ではないことに注意します(少し驚かないでください、上記参照)。
  • 係数のSEは異なります(SASでは小さい)
  • 繰り返しますが、Fテストは異なる量のDFを使用しました(実際、SASではその量= 0)

SAS出力:

Effect     trt Estimate Std Error  DF t Value Pr > |t| 
Intercept        0.8863    0.1192  14    7.43 <.0001 
trt       Cont  -0.1788    0.1686   0   -1.06 . 

R出力:

> summary(m4)
...
Fixed effects: y ~ trt 
               Value Std.Error DF   t-value p-value
(Intercept)  0.88625 0.1337743  8  6.624963  0.0002
trtCont     -0.17875 0.1891855  6 -0.944840  0.3812
...

(この場合、FテストとTテストは同等であり、同じDFを使用することに注意してください。)

興味深いことに、lme4Rで使用する場合、モデルは適合しません。

> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose)  : 
  Number of levels of a grouping factor for the random effects
must be less than the number of observations

質問2:ネストされた因子を持つこれらのモデルの違いは何ですか?それらは正しく指定されていますか?その場合、結果はどのように異なりますか?


Rのシミュレーションデータ:

Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22, 
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L, 
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l", 
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont", 
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")

シミュレートされたデータ:

   y ind fac   trt
1.05   1   l Treat
0.86   2   l Treat
1.02   3   l Treat
1.14   1   r Treat
0.68   3   r Treat
1.05   4   l Treat
0.22   4   r Treat
1.07   2   r Treat
0.46   5   r  Cont
0.65   6   l  Cont
0.41   7   l  Cont
0.82   8   l  Cont
0.60   6   r  Cont
0.49   5   l  Cont
0.68   7   r  Cont
1.55   8   r  Cont

@Aaron:この投稿に含まれている答えを見つけてください。それをコピーして回答として貼り付けていただければ、担当者にお知らせします。これは非常に役に立ちましたので、ここで相互検証を続けたいと思います。完了したら、質問から回答を削除します。
ジョリスメイズ

この不幸な改訂版を完全に削除して、チームに元のQを復活させようとしています。したがって、元の回答を復元してここにマージする絶好のチャンスがあります。

@mbq:いいですね。ただし、ここで使用するデータをシミュレートし、それに応じてアーロンの回答を編集しました。他の答えについては、もう少し複雑になりますが、私も試してみることができます。
ジョリスメイズ

アーロンの答えは信じられないほど良いものです。彼らがそれを見ることを願っています 残念ながら、あなたの@Aaronは、このスレッドに参加していない限り彼に連絡しません。
ウェイン

1
はい、これはいい答えでした。ここで、削除された投稿へのリンクを提供しました:stats.stackexchange.com/questions/26556/…現在の投稿にリンクを追加します。
ステファンローラン

回答:


11

最初の質問について、dfを見つけるSASのデフォルトの方法はあまり賢くありません。固定効果を構文的に含むランダム効果の用語を探し、それを使用します。この場合、trtはに見つからindないため、正しいことをしていません。私は試したことBETWITHINがないので詳細はわかりませんが、Satterthwaiteオプション(satterth)またはind*trtランダム効果として使用すると正しい結果が得られます。

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s ddfm=satterth;
    RANDOM ind /s;
run;

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind*trt /s;
run;

2番目の質問に関しては、SASコードはRコードと完全には一致しません。それだけのために、用語を持つfac*indR・コードは両方のための用語を有している、indfac*ind。(これを確認するには、Variance Componentsの出力を参照してください。)これを追加するtrtと、Q1とQ2(0.1892)のすべてのモデルで同じSEが得られます。

ご指摘のとおり、このfac*ind用語はレベルごとに1つの観測値を持つため、これは近似する奇妙なモデルであり、誤差項と同等です。これは、fac*ind項の分散がゼロのSAS出力に反映されます。これは、lme4からのエラーメッセージが示すものでもあります。エラーの理由は、2つの異なる方法でモデルにエラー用語を含めているため、おそらく何かを誤って指定しているためです。興味深いことに、nlmeモデルにはわずかな違いがあります。fac*indエラー用語に加えてその用語の分散用語を何らかの形で見つけていますが、これらの2つの分散の合計が、SASとnlmeの両方からのエラー用語に等しく、その用語がないことに気付くでしょうfac*ind。ただし、のSE は、ネストされてtrtいるのと同じ(0.1892)のままtrtですind、したがって、これらの低い分散項はそれに影響しません。

最後に、これらのモデルの自由度に関する一般的な注意:モデルが適合した後に計算されるため、異なるプログラムまたはプログラムのオプション間の自由度の違いは、モデルが異なる適合であることを必ずしも意味しません。そのためには、固定効果パラメーターと共分散パラメーターの両方のパラメーターの推定値を調べる必要があります。

また、与えられた自由度数でt近似とF近似を使用することはかなり議論の余地があります。dfを近似するいくつかの方法があるだけでなく、そうすることはとにかく良い考えではないと信じる人もいます。アドバイスの言葉:

  1. すべてのバランスが取れている場合、結果を従来の最小二乗法と比較する必要があります。バランスが取れている場合は、自分で計算して(バランスを仮定)、使用しているものが正しい球場にあることを確認できます。

  2. サンプルサイズが大きい場合、分布は正規のカイ2乗に近づくため、自由度はそれほど重要ではありません。

  3. Doug Batesの推論方法を確認してください。彼の古い方法は、MCMCシミュレーションに基づいています。彼の新しい方法は、可能性のプロファイリングに基づいています。


確かに良い答えですが、MCMCシミュレーション(有限サイズの補正と非2次性の両方を処理する)よりも、尤度のプロファイリングが異なる質問(プロファイルが2次でない場合の分散パラメーターの適切なCI)を解決すると思います。bootMer(パラメトリックブートストラップ)は、confint(profile(...))よりmcmcsampの同等物に近いと思います...
ベンボルカー

@BenBolker:もちろんそうです。ダグ・ベイツは先月ここで講演し、可能性のプロファイリングに関する彼のアイデアについて話しました。これまでのところ、私はそれについて知っているすべてについてです。
アーロンはスタックオーバーフローを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.