1

代替タイトル: モデル マトリックスと係数のセットは、変数の数が異なることを示しています

私はR用のマウスパッケージを使用していくつかの分析を行っています。を使用して ( miraオブジェクトに保持されている) 2 つのモデルを比較したかったのですが、次のエラーが発生し続けます。pool.compare()

Error in model.matrix(formula, data) %*% coefs : non-conformable arguments

二項演算子は、 R%*%での行列の乗算を示します。

この式model.matrix(formula, data)は、「指定された数式とデータを使用した回帰のようなモデルの設計行列」を生成します ( model.matrix {stats}のRドキュメントから)。

エラー メッセージでは、はmipoオブジェクトcoefsから描画され、要素は「完全なデータ推定値の平均。多重代入推定値」です。( mipo-class {mice}のドキュメントから)。 est1$qbarest1qbar

私の場合

  • est1$qbar長さ 36 の数値ベクトル
  • data82 個の変数の 918 個の観測値を含む data.frame です。
  • formula私のモデルの式を含むクラス「式」です
  • model.matrix(formula, data)次元が 918 x 48 の行列です。

このエラーを解決/防止するにはどうすればよいですか?

4

1 に答える 1

1

よくあることですが、質問を書きながら、自分の質問に対する答えを見つけました。

手がかりは、カテゴリ変数の推定値はest1.qbar、その変数のレベルがデータに存在する場合にのみ存在するということでした。私の変数のいくつかは、すべてのレベルが表されているわけではない因子変数です。これにより、「レベルが欠落しているため、因子変数名からコントラストが削除されました」という警告が発生しましたが、愚かにも無視しました。

一方、 を見ると、dimnames(model.matrix.temp)[[2]]変数のそのレベルがデータに存在するかどうかに関係なく、モデル マトリックスには各因子変数の各レベルに対して 1 つの列があることがわかります。したがって、欠落している因子レベルの対比は係数の推定に関しては低下しますが、それらの因子レベルはモデル行列に表示されます。これは、モデル行列が (推定された係数のベクトル) の長さよりも多くの列を持っていることを意味するest1.qbarため、行列の乗算は機能しません。

ここでの答えは、未使用のレベルがないように因子変数を修正することです。これは、関数を使用して実行できます(ここでfactor()説明されているように)。残念ながら、これは代入の前に元のデータセットで行う必要があります。

于 2016-04-19T21:51:27.687 に答える