1. ホーム
  2. r

[解決済み] lme4::lmer が "fixed-effect model matrix is rank deficient" と報告しましたが、修正が必要でしょうか?

2022-01-27 20:40:55

質問内容

を予測する混合効果モデルを実行しようとしています。 F2_difference 残りの列を予測変数とした場合、次のようなエラーメッセージが表示されます。

固定効果モデル行列がランク不足のため、7列/係数を削除してください。

このリンクから 固定効果モデルはランク不足である を使えばいいと思います。 findLinearCombos Rパッケージの caret . しかし、試しに findLinearCombos(data.df) というエラーメッセージが表示されます。

qr.default(object) のエラー : 外部関数呼び出しの NA/NaN/Inf (arg 1) さらに 警告メッセージです。 In qr.default(object) : coercion によって導入された NAs

私のデータにはNAがありません - 何が原因でしょうか?(答えが様々な明白であれば申し訳ありません - 私はRに新しいです)。

私のデータは、私が予測しようとしている数値以外はすべて要因です。以下は私のデータの小さなサンプルです。

sex <- c("f", "m", "f", "m")
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE")
vowelLabel <- c("a", "e", "i", "o")
speaker <- c("Jim", "John", "Ben", "Sally")
word_1 <- c("going", "back", "bag", "back")
type <- c("coronal", "coronal", "labial", "velar")
F2_difference <- c(345.6, -765.8, 800, 900.5)
data.df <- data.frame(sex, nasal, vowelLabel, speaker,
                      word_1, type, F2_difference
                      stringsAsFactors = TRUE)

編集する 以下はその助けになるようなコードです。

formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
           type * vowelLabel + nasal * type +
           (1|speaker) + (1|word_1)

lmer(formula, REML = FALSE, data = data.df)

エディターによる編集です。

のモデルを実際に実行するための十分な数のテストデータが提供されていません。 lmer 読者のために。しかし、これはあまり大きな問題ではありません。これはまだ非常に良い投稿です

どのように解決するのか?

警告メッセージを少し気にしすぎです。

<ブロッククオート

固定効果モデル行列がランク不足のため、7列/係数を削除しています。

エラーではなく、警告です。の誤用はありません。 lmer また、モデル式の指定が不適切なため、推定されたモデルが得られます。しかし、質問に答えるため、説明に努めたいと思います。


の実行中に lmer に分割され、モデル式は 固定効果式 ランダム効果式 であり、それぞれのaについて モデル行列 が構築される。固定された行列の構築は,標準的なモデル行列のコンストラクタである model.matrix ランダムなものの構築は複雑ですが、質問とは関係ないので省略します。

あなたのモデルについて、固定効果モデルの行列がどのようなものか、次のようにして確認することができます。

fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
               type * vowelLabel + nasal * type

X <- model.matrix (fix.formula, data.df)

すべての変数が要因なので X はバイナリになります。しかし model.matrix が適用されます。 contrasts 各要因とその相互作用について という可能性があります。 X は完全な列順位を持たないので、ある列が他の列の線形結合である可能性があるからです ( これは、正確であるか、数値的に近いか、どちらかです。 ). あなたの場合 ある因子のいくつかのレベルは、別の因子のいくつかのレベルにネストされている可能性があります。 .

ランク不足はさまざまな形で発生します。 もう一つの答え は、CrossValidatedな回答で、充実した議論を展開しているので、それについてコメントします。

  • ケース1では、例えばLASSOで特徴選択モデルを作ることができます。
  • ケース2と3は、データ収集のプロセスに関わるものです。ランク不足を防ぐには実験計画をしっかり立てるのが一番ですが、モデルを作る人の多くは、すでにデータがあるため、改善(データを増やすなど)ができないのです。しかし、ランク不足のないデータセットであっても、注意深く使わなければこの問題は発生することを強調しておきたいと思います。例えば、クロスバリデーションはモデル比較に適した手法です。そのためには完全なデータセットをトレーニング用とテスト用に分ける必要がありますが、注意しないとトレーニング用データセットからランク不足のモデルを得てしまう可能性があります。
  • ケース4は、完全に制御不能になりかねない大きな問題です。おそらく自然な選択は、モデルの複雑さを減らすことですが、代替案としては、ペナルティ付き回帰を試してみることです。
  • ケース5は、数値的なランク不足につながる数値的な懸念と これ が良い例です。
  • ケース6と7は、数値計算が有限精度で行われることを物語っています。通常、ケース5が適切に処理されていれば、これらは問題にならない。

そのため、不足分を回避できる場合もありますが、常に実現できるわけではありません。したがって、よく書かれたモデルフィッティングルーチンであれば、例えば lm , glm , mgcv::gam に対してQR分解を適用します。 X の最大部分集合であるフルランク部分空間のみを使用するようにした。 X の列がフルランク空間になるように、推定を行う。 残りの列に関連する係数を0に固定するか、または NA . あなたが受けた警告は、ちょうどこのことを暗示しています。もともと ncol(X) のみである。 ncol(X) - 7 が推定され、残りは0または NA . このような数値的な回避策により、最も安定した方法で最小二乗法による解を得ることができる。


この問題をよりよく消化するために lm を使って線形モデルを適合させます。 fix.formula .

fix.fit <- lm(fix.formula, data.df, method = "qr", singular.ok = TRUE)

method = "qr"singular.ok = TRUE はデフォルトなので、実は設定する必要はない。しかし、もし singular.ok = FALSE , lm が停止し、ランク不足の文句を言う。

lm(fix.formula, data.df, method = "qr", singular.ok = FALSE)
#Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
#  singular fit encountered

そして、返された値を fix.fit .

p <- length(coef)
coef <- fix.fit$coef
no.NA <- sum(is.na(coef))
rank <- fix.fit$rank

が保証されています。 p = ncol(X) が、表示されるはずです。 no.NA = 7rank + no.NA = p .

の内部でもまったく同じことが起こります。 lmer . lm は不足を報告しませんが lmer があります。という質問をよく見かけますが、これは実に有益なことです。 lm を返します。 NA をある係数のために使用します。


アップデート1(2016-05-07)を行いました。

私の考えが正しいかどうか確認させてください。要するに、私の予測変数の1つは別の変数と相関しているが、私はそれを心配する必要はないということです。因子を使用することは適切なのでしょうか?そして、私はまだ、次のようなモデルを比較することができます。 anova それともBICを見ることで?

の使用は気にしないでください。 summary または anova . メソッドは、有効な要約統計量を生成するために正しいパラメータ数(自由度)が使用されるように記述されます。

アップデート2(2016-11-06)を行いました。

のパッケージ作者の声も聞いてみましょう。 lme4 と言うだろう。 ランク不足警告混合モデル lmer . ベン・ボルカーが言及した caret::findLinearCombos というのも、OPが自分で欠陥問題に取り組みたいと考えているからです。

更新3(2018-07-27)を行いました。

ランク不足は、有効なモデルの推定や比較には問題ありませんが、予測では危険となる可能性があります。先日、CrossValidatedで模擬例を交えた詳細な回答を構成しました。 R lm , 「順位不足からの予測」についての誤解を招くような事例をどなたか教えてください。 そう、そうなんです。 理論上 ランク不足の推定は避けるべきでしょう。しかし 現実には,いわゆる真のモデルというものは存在しない。 データから学ぼうとする。推定されたモデルを「真実」と比較することはできません。最善の策は、構築した数多くのモデルの中から最適なものを選択することです。そのため、もし「ベストモデル」が順位不足に終わった場合、私たちはそのモデルに対して懐疑的になることができますが、おそらくすぐにできることは何もないでしょう。