Rでは、グローバル固定効果なしでlmerモデルをどのように指定しますか?たとえば、私が次のようなことを言った場合
lmer(y ~ (1 | group) + (0 + x | group), data = my_df)
適合モデルは
モデルの適合方法
?
y
最初:)
Rでは、グローバル固定効果なしでlmerモデルをどのように指定しますか?たとえば、私が次のようなことを言った場合
lmer(y ~ (1 | group) + (0 + x | group), data = my_df)
適合モデルは
モデルの適合方法
?
y
最初:)
回答:
@Mike Lawrenceが言及したように、固定効果のないモデルを定義するときに行うべき明白なことは、次のような形になります。
lmer(y ~ -1 + (1|GroupIndicator))
実際には非常に簡単です。1つは切片またはX行列を定義しません。これがうまくいかない基本的な理由は、@ maxTCが指摘したように、「lme4パッケージは混合モデルのみに専用である」ということです。
特に、lmer()フィッティングが行うことは、ペナルティ付き最小二乗回帰を解いてプロファイルされた逸脱を計算することです。 そして 球状のランダム効果だけでなく そして (式(11)、参照(2))。計算上、この最適化手順は、システムのブロック構造を利用して、対応するシステムのコレスキー分解を計算します(式(5)、参照(1))。グローバル固定効果を設定しないと、lmer()のコードが対応できない方法でブロック構造が実質的に歪められます。とりわけ、条件付き期待値 に基づいています の解決策 存在しなかったマトリックスシステム(マトリックス Ref。(1)、または Ref。(2)にあります)。したがって、次のようなエラーが発生します。
Error in mer_finalize(ans) :
Cholmod error 'invalid xtype' at file:../Cholesky/cholmod_solve.c, line 970
結局のところ、そもそも解決すべきことは何もありませんでした。
lmer()プロファイルの逸脱コスト関数を書き直したくない場合、最も簡単な解決策はCS-101の公理に基づいています:ガベージイン、ガベージアウト。
N = length(y); Garbage <- rnorm(N);
lmer(y ~ -1 + Garbage + (1|GroupIndicator));
変数を定義します それは単なるノイズです。前と同じように、lmer()は、固定切片を使用せず、X行列のみを使用するように指示されています(この場合は、単一列行列Garbage)。この追加のガウスノイズ変数は、サンプル測定誤差やランダム効果の分散とは無相関であると予想されます。言うまでもなく、モデルの構造が多いほど、望ましくないが統計的に有意なランダム相関が得られる可能性が小さくなります。
したがって、lmer()にはプラセボがあります 変数(行列)を操作します。期待どおりに、関連する ゼロになるため、データを正規化する必要はありませんでした(それらをセンタリング、ホワイトニングなど)。おそらくプラセボのいくつかのランダムな初期化を試みますマトリックスも害はありません。「ガベージ」に関する最後の注意:ガウスノイズの使用は「偶然」ではありませんでした。これは、分散が等しいすべての確率変数の中で最大のエントロピーを持っているため、情報が得られる可能性が最も低くなります。
明らかに、これはソリューションよりも計算上のトリックですが、ユーザーはグローバルな固定効果なしにlmerモデルを効果的に指定できます。2つの参照を回避することをお詫び申し上げます。一般に、Ref。(1)は、lmer()が何をしているのかを理解するのに最適な方法だと思いますが、Ref。(2)は実際のコードの精神に近いものです。
上記のアイデアを示すコードの一部を次に示します。
library(lme4)
N= 500; #Number of Samples
nlevA = 25; #Number of levels in the random effect
set.seed(0) #Set the seed
e = rnorm(N); e = 1*(e - mean(e) )/sd(e); #Some errors
GroupIndicator = sample(nlevA, N, replace=T) #Random Nvel Classes
Q = lmer( rnorm(N) ~ (1| GroupIndicator )); #Dummy regression to get the matrix Zt easily
Z = t(Q@Zt); #Z matrix
RA <- rnorm(nlevA ) #Random Normal Matrix
gammas =c(3*RA/sd(RA)) #Colour this a bit
y = as.vector( Z %*% gammas + e ) #Our measurements are the sum of measurement error (e) and Group specific variance
lmer_native <- lmer(y ~ -1 +(1| GroupIndicator)) #No luck here.
Garbage <- rnorm(N) #Prepare the garbage
lmer_fooled <- lmer(y ~ -1 + Garbage+(1| GroupIndicator)) #OK...
summary(lmer_fooled) #Hey, it sort of works!
参照:
lmer(y~0+(1|group)+(0+x|group))
がうまくいくだろうということでした、しかしこれはエラーをもたらします。