[解決済み] lme4::lmer が "fixed-effect model matrix is rank deficient" と報告しましたが、修正が必要でしょうか?
質問内容
を予測する混合効果モデルを実行しようとしています。
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 = 7
と
rank + 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
, 「順位不足からの予測」についての誤解を招くような事例をどなたか教えてください。
そう、そうなんです。
理論上
ランク不足の推定は避けるべきでしょう。しかし
現実には,いわゆる真のモデルというものは存在しない。
データから学ぼうとする。推定されたモデルを「真実」と比較することはできません。最善の策は、構築した数多くのモデルの中から最適なものを選択することです。そのため、もし「ベストモデル」が順位不足に終わった場合、私たちはそのモデルに対して懐疑的になることができますが、おそらくすぐにできることは何もないでしょう。
関連
-
[解決済み】xtsオブジェクトでエラー: "antempt to set 'colnames' on the object with less than two dimension "を克服する方法
-
[解決済み】エラー。Rの次元数が正しくない
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】ベースグラフィックスでプロットエリアの外側に凡例をプロットする?
-
[解決済み】RでKNN。trainとclassは長さが違う」?
-
[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー
-
[解決済み】 file(filename, "r", encoding = encoding) : cannot open the connectionでエラーが発生する。
-
[解決済み】RでAIC中に行数が変化するのはなぜですか?そうならないようにするにはどうしたらいいですか?
-
[解決済み】Rの整数オーバーフローとは何ですか、そしてどのように起こるのですか?
-
[解決済み】.External.graphics Rでエラーが発生しました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】Rでの関数の最適化(L-BFGS-Bでは'fn'に有限の値が必要)。
-
[解決済み】reshape2 meltの警告メッセージ
-
[解決済み】データのマージ - fix.by(by.x, x)のエラー)
-
[解決済み】R ggplot2 で scale_x_discrete を使用する。
-
[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー
-
[解決済み】 eval(expr, envir, enclos) でのエラー : オブジェクトが見つかりません。
-
[解決済み】dplyr: "Error in n(): 関数は直接呼ばれるべきではありません"
-
[解決済み】「コントラストは2つ以上の水準を持つ要因にのみ適用できる」エラーのデバッグ方法とは?