統計モデルの近似値と予測値を見つける


12

次のデータがあり、回帰モデルを実行しているとします。

df=data.frame(income=c(5,3,47,8,6,5),
              won=c(0,0,1,1,1,0),
              age=c(18,18,23,50,19,39),
              home=c(0,0,1,0,0,1))

一方では、収入を予測するために線形モデルを実行します。

md1 = lm(income ~ age + home + home, data=df)

次に、ロジットモデルを実行して、ウォン変数を予測します。

md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))

どちらのモデルでも、予測子の応答カテゴリ、近似値、モデルの予測値を含むテーブルまたはデータフレームをどのように生成できるのでしょうか。

したがって、線形モデルの場合、次のようになります。

age  fitted_income  predicted_income
18    3              5 
23    3              3
50    4              2
19    5              5
39    6              4

home   fitted_income    predicted_income
0       5               6       
1       3               9

あるいは、それは各データポイントのためであるべきです。したがって、x_iデータポイントの場合、近似値と予測値は次のようになります。

id   age  fitted_income  predicted_income
1     18    3              5 
2     23    3              3
3     50    4              2
4     19    5              5
5     39    6              4
  1. 統計的な観点から、そのような事業は有用ですか?なぜですか、なぜそうではありませんか?

  2. Rでこれを行うにはどうすればよいですか?(names(md1)を見て、モデルからプルできるものを見つけましたが、それを超えていません)

ありがとう!


1
Re#2:stat.ethz.ch/R-manual/R-patched/library/stats/html/…。再#1:何に役立つの?最後に何を達成したいですか?
whuber

モデルが個々のデータポイントに対して「予測的」かどうかを判断するのに役立ちます。任意の行/ IDを確認し、真/適合値と予測値を比較して、どれほど「正しい」かを確認したい。
ATMathew 2012

テーブルをスキャンして、共変量に対して実際の応答がどのように変化するかを確認したい場合は、それが役立つと思います。私はあなたの専門用語を理解していません。近似値と予測値は同じでなければなりません。異なるのは、観測値と近似値です。
Michael R. Chernick

2
x = cbind(df、md1 $ fitted.values)colnames(x)= c(colnames(df)、 "predicted")
RioRaider

2
観測値と近似値の違いは、のresidualsコマンドで確認できますRcbindそれらを元のデータフレームに結合するために使用します。
whuber

回答:


20

Rのモデルオブジェクトには少し注意する必要があります。たとえば、glm()モデルの場合、近似値とトレーニングデータの予測は同じでなければなりませんが、正しい抽出関数を使用すると、それらは同じではありません。

R> fitted(md2)
        1         2         3         4         5         6 
0.4208590 0.4208590 0.4193888 0.7274819 0.4308001 0.5806112 
R> predict(md2)
         1          2          3          4          5          6 
-0.3192480 -0.3192480 -0.3252830  0.9818840 -0.2785876  0.3252830

これは、のデフォルトpredict.glm()が線形予測子のスケールで予測を返すためです。フィットした値を取得するには、リンク関数の逆関数をそれらの値に適用します。fitted()私たちのためにそれを行います、そして私たちはpredict()同様に使用して正しい値を得ることができます:

R> predict(md2, type = "response")
        1         2         3         4         5         6 
0.4208590 0.4208590 0.4193888 0.7274819 0.4308001 0.5806112

同様にresiduals()(またはresid()); に保存されてmd2$residualsいる値は、作業残差であり、希望どおりになる可能性はほとんどありません。このresid()方法では、必要な残差のタイプを指定でき、便利なデフォルトがあります。

glm()モデルについては、次のようなもので十分です。

R> data.frame(Age = df$age, Won = df$won, Fitted = fitted(md2))
  Age Won    Fitted
1  18   0 0.4208590
2  18   0 0.4208590
3  23   1 0.4193888
4  50   1 0.7274819
5  19   1 0.4308001
6  39   0 0.5806112

同様のことがlm()モデルに対して実行できます。

R> data.frame(Age = df$age, Income = df$income, Fitted = fitted(md1))
  Age Income    Fitted
1  18      5  7.893273
2  18      3  7.893273
3  23     47 28.320749
4  50      8 -1.389725
5  19      6  7.603179
6  39      5 23.679251
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.