LM関数を実行したときにNAデータを無視するにはどうすればよいですか?
-
27-09-2019 - |
質問
私の質問はかなり単純ですが、多くのことを試した後、それを解決することができませんでした。
2つのデータフレームがあります。
>a
col1 col2 col3 col4
1 1 2 1 4
2 2 NA 2 3
3 3 2 3 2
4 4 3 4 1
> b
col1 col2 col3 col4
1 5 2 1 4
2 2 NA 2 3
3 3 NA 3 2
4 4 3 4 1
私はできますか lm(a ~ b)
データを適合させる a
と b
?
もしそうなら、どうすれば無視できますか NA
データ?
ありがとう、ダン
解決
AとBがデータフレームであり、Bの値上のAの個々の値を回帰する場合、それらをベクターに変換する必要があります。例えば:
> lm(as.vector(as.matrix(a))~as.vector(as.matrix(b)))
Call:
lm(formula = as.vector(as.matrix(a)) ~ as.vector(as.matrix(b)))
Coefficients:
(Intercept) as.vector(as.matrix(b))
8.418239 -0.005241
欠落データはデフォルトで削除されます - ヘルプ(LM)とNa.actionパラメーターを参照してください。 LMオブジェクトの要約方法では、ドロップされた観測について説明します。
もちろん、空間データに存在する可能性が高い空間相関を無視すると、パラメーターの推定値からの推論がかなり間違っていることを意味します。残差をマップします。空間統計に関する良い本を読んでください...
編集:ああ、データフレームはすべての数字でなければならないか、ロット全体が文字に変換され、それから...まあ、誰が知っている...
編集:
データフレームからベクトルを取得する別の方法は、「非公開」を使用することです。
> a=data.frame(matrix(runif(16),4,4))
> b=data.frame(matrix(runif(16),4,4))
> lm(a~b)
Error in model.frame.default(formula = a ~ b, drop.unused.levels = TRUE) :
invalid type (list) for variable 'a'
> lm(unlist(a)~unlist(b))
Call:
lm(formula = unlist(a) ~ unlist(b))
Coefficients:
(Intercept) unlist(b)
0.6488 -0.3137
Thx Gavin、data.matrixを見たことがありません。
他のヒント
一般に、Rの回帰関数は完全なケースの結果のみを報告するため、通常、ケースを差し出すために特別なことをする必要はありません。あなたの質問は少しあいまいであるように見えますが、なぜあなたが式の左側にマトリックス全体(またはそれがdata.frame?)を置いているのかは明確ではありません。 LM()関数を使用して多変量分析を行う能力がありますが、そうしたい人は一般に、より具体的な質問をします。
> lm(a$col1 ~ b$col1+b$col2 +b$col3+b$col4)
Call:
lm(formula = a$col1 ~ b$col1 + b$col2 + b$col3 + b$col4)
Coefficients:
(Intercept) b$col1 b$col2 b$col3 b$col4
16 -3 NA NA NA
少量のデータは、2つのケースを失い、残り2つしかない後、さらなる推定を防ぎます。