İstatistiksel bir model için uygun ve öngörülen değerleri bulma


12

Diyelim ki aşağıdaki verilerim var ve bir regresyon modeli kullanıyorum:

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))

Bir yandan, geliri tahmin etmek için doğrusal bir model çalıştırıyorum:

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

İkinci olarak, kazanılan değişkeni tahmin etmek için bir logit modeli çalıştırıyorum:

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

Her iki model için de, tahmin yanıt kategorisi, uygun değer ve model tahmin değeri ile nasıl bir tablo veya veri çerçevesi oluşturabileceğimi merak ediyorum.

Doğrusal model için şöyle bir şey:

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

Ya da belki de her veri noktası için olmalıdır. Yani x_i veri noktası için, takılmış ve tahmin edilen değerler şunlardır:

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. İstatistiksel açıdan bakıldığında, böyle bir girişim faydalı mıdır? Neden ya da neden olmasın?

  2. Bu, R'de nasıl yapılabilir? (isimlere (md1) baktı ve modelden neler çekebileceğimi buldum, ancak bunu geçemedim)

Teşekkürler!


1
Re # 2: stat.ethz.ch/R-manual/R-patched/library/stats/html/… . Re # 1: ne için yararlı? Sonunda ne yapmak istiyorsunuz?
whuber

Modelin her bir veri noktası için "öngörücü" olup olmadığını söylemek için kullanışlıdır. Herhangi bir satır / id bakmak ve ne kadar doğru olduğunu görmek için gerçek / takılmış değer ve tahmini değeri karşılaştırmak istiyorum.
ATMathew

Tabloyu taramak isterseniz, gerçek yanıtın değişkene göre nasıl değiştiğini görmek istiyorsanız, bunun yararlı olabileceğini düşünüyorum. Yine de terminolojinizi anlamıyorum. uygun değer ile öngörülen değer aynı olmalıdır. Farklı olması gereken gözlemlenen değer ve takılmış değerdir.
Michael R.Chernick

2
Şunun gibi bir şey deneyebiliriz: x = cbind (df, md1 $ donatılmış. Değerler) colnames (x) = c (colnames (df), "tahmin edilen")
RioRaider

2
Gözlenen ve monte değerleri arasındaki farklar yoluyla kullanılabilir residualskomut içinde R. cbindBunları orijinal veri çerçevesine birleştirmek için kullanın .
whuber

Yanıtlar:


20

R'deki model nesnelerle biraz dikkatli olmalısınız. Örneğin, takılan değerler ve egzersiz verilerinin tahminleri glm()model durumunda aynı olsa da, doğru çıkarıcı işlevlerini kullandığınızda aynı değildir:

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

Çünkü varsayılan predict.glm()öngörü, doğrusal öngörücünün ölçeğinde tahminler döndürmektir. Takılan değerleri elde etmek için link fonksiyonunun tersini bu değerlere uygulamak istiyoruz. fitted()bunu bizim için yapar ve biz de kullanarak doğru değerleri elde edebiliriz predict():

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

Aynı şekilde residuals()(veya resid()); içinde saklanan değerler md2$residuals, çalışma artıklarının istediğiniz gibi olması muhtemel değildir. resid()Yöntem istediğiniz kalıntı türünü belirlemenizi sağlar ve yararlı bir varsayılan değere sahiptir.

İçin glm()model böyle bir şey yeterli olacaktır:

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()Model için benzer bir şey yapılabilir :

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.