R'nin lm () neden ders kitabımdan farklı katsayı tahminleri döndürüyor?


13

Arka fon

Ben modelleri uydurma bir kursta ilk örneği anlamaya çalışıyorum (bu yüzden bu gülünç derecede basit görünebilir). Hesaplamaları elle yaptım ve örnekle eşleşiyorlar, ancak bunları R'de tekrarladığımda, model katsayıları kapalı. Ben fark nüfus kitaplığı ( ) kullanarak ders kitabı nedeniyle olabilir R ise örnek varyans ( ) kullanıyor olabilir , ama bu hesaplamalarda nerede kullanıldığı göremiyorum. Örneğin, eğer kullandığı yerde, üzerinde yardım bölümü notları:S 2σ2S2lm()var()var()

İid gözlemleri için (ko) varyansın tarafsız bir tahmincisini veren n - 1 paydası kullanılır.

Her ikisi için kod baktım lm()ve lm.fit()ve ne make kullanımı var(), ama lm.fit()derlenmiş C koduna (bu verileri geçirir z <- .Call(C_Cdqrls, x, y, tol, FALSE)ben erişimi yok).

Soru

Herkes R'nin neden farklı sonuçlar verdiğini açıklayabilir mi? Örneklem ile popülasyon varyansı kullanımında fark olsa bile, katsayı tahminleri neden farklıdır?

Veri

Okuldaki sınıftan ayakkabı boyutunu tahmin etmek için bir çizgi takın.

# model data
mod.dat <- read.table(
    text = 'grade shoe
                1    1
                2    5
                4    9'
    , header = T);

# mean
mod.mu  <- mean(mod.dat$shoe);
# variability 
mod.var <- sum((mod.dat$shoe - mod.mu)^2)

# model coefficients from textbook
mod.m  <- 8/3;
mod.b  <- -1;

# predicted values  ( 1.666667 4.333333 9.666667 )
mod.man.pred       <- mod.dat$grade * mod.m + mod.b;
# residuals         ( -0.6666667  0.6666667 -0.6666667 )
mod.man.resid      <- (mod.dat$shoe - mod.man.pred)
# residual variance ( 1.333333 )
mod.man.unexpl.var <- sum(mod.man.resid^2);
# r^2               ( 0.9583333 )
mod.man.expl.var   <- 1 - mod.man.unexpl.var / mod.var;

# but lm() gives different results:
summary(lm(shoe ~ grade, data = mod.dat))
Call:
lm(formula = shoe ~ grade, data = mod.dat)

Residuals:
      1       2       3 
-0.5714  0.8571 -0.2857 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -1.0000     1.3093  -0.764    0.585
grade         2.5714     0.4949   5.196    0.121

Residual standard error: 1.069 on 1 degrees of freedom
Multiple R-squared:  0.9643,    Adjusted R-squared:  0.9286 
F-statistic:    27 on 1 and 1 DF,  p-value: 0.121

Düzenle

As Ben Bolker göstermiştir öğretmenler bazen hata yapabilir gibi görünüyor. Görünüşe göre R hesaplamaları doğru. Hikayenin ahlakı: Bir öğretmenin doğru olduğunu söylediği için bir şeye inanma. Kendiniz doğrulayın!


2
İki kez kontrol edin mod.m=8/3. Çünkü sen koyarsan mod.m=2.5714, aynı görünüyorlar.
Stat

2
Mod.m = 8/3 ve mod.b = -1 katsayıları, yorumların hiçbir yerinde anladığım kadar hesaplanmaz, bu yüzden açık değildir. Yukarıdaki @Stat yorumlarında olduğu gibi, hata mod.m hesaplamasında görünüyor.
Juho Kokkala

2
Herkesin hata yapabileceğini akılda tutmak önemlidir - öğretmeniniz, siz, burada cevap verenler , R programcıları - herhangi biri. Bu nedenle, işler aynı fikirde olmadığında hataların nerede olabileceğini anlamaya çalışırken, her şeyi kaç kişinin kontrol ettiğini düşünün. lmR'deki işlev durumunda , kelimenin tam anlamıyla on binlerce kişi sonuçları başka şeylerle karşılaştırarak lmkontrol etti ve kodda her değişiklik olduğunda , çıktısı bilinen örneklerle karşılaştırıldı. Burada cevaplarla, en az birkaç kişinin kontrol etmesi muhtemeldir (sorunuz 29 defa incelenmiştir).
Glen_b-Monica

1
@Glen_b Aslına bakarsanız, buraya buraya sormaya gelmem nedenim. Böyle bir temel hesaplamada R'nin nasıl yanlış olabileceğini anlayamadım, ancak neden farklı olduklarını anlayamadım. Ben olay kaynak kodu etrafında snooped. Ama sonuçta hata, en çok kalkülüs kısmı bilgimin sınırlarında olduğu için bakmayı düşündüğüm son yerdeydi. Cevaptan çok şey öğrendim!
hoc sonrası

2
Evet, neden farklı olduklarını anlamaya çalışmak önemlidir; burada çalışıp çalışamayacağınızı sormak mantıklıdır. Düşündüğünüz son yerin neden ilk bakılan yerlerden biri olabileceğini önermeye çalışıyordum. Bir veya iki kez örneklerde son dakika 'basitleştirici' değişiklikler yaparak yakalandım.
Glen_b-Monica

Yanıtlar:


25

Yazar bir yerde matematiksel bir hata yapmış gibi görünüyor.

Kareler toplamı sapmasını genişletirseniz

S=((b+m)1)2+((b+2m)5)2+((b+4m)9)2
olsun
S=b2+2bm+m2+12b2m+b2+4bm+4m2+2510b20m+b2+8bm+16m2+8118b72m

için azaltır zaten önemli değil sabit terim, ancak, yazarın ifadesi ile aynıdır).

3b2+14bm+21m2+10730b94m

Şimdi, ve göre türevlerini sıfıra ayarlayıp sistemi çözerek bunu en aza indirmeye çalışmalıyız . Sbm

dS/db=6b+14m303b+7m15=0
dS/dm=14b+42m947b+21m47=0

çözmek

b=(157m)/30=7(157m)/3+21m474735=(49/3+21)mm=(4735)/(2149/3)=18/7

R, bunun gerçekten 2.571429 olduğunu söylüyor ...

Bu bağlantıya dayanarak bu bir Coursera kursundan gibi görünüyor ...? Belki bir yerde verilerin yanlış transkripsiyonu vardı?

Bu hesaplamayı yapmanın diğer bağımsız yolu, tahmini regresyon eğiminin çapraz ürünlerin ) kare toplamına ( ).(yy¯)(xx¯)(xx¯)2

g <- c(1,2,4)
g0 <- g - mean(g)
s <- c(1,5,9)
s0 <- s- mean(s)
sum(g0*s0)/(sum(g0^2))
## [1] 2.571429

Ayakkabı boyutları yerine olsaydı , eğim 8/3 olur ...{ 1 , 5 , 9 }{1,11/3,9}{1,5,9}


2
Vay. Evet haklısın. Bir Coursera kursundan ve videodan değil, transkripsiyondan değil. Bu yüzden video için hesaplamaları daha basit hale getirmek için basitleştirdiğini ve kimsenin tekrar denemesini beklemediğini tahmin ediyorum. Gördüğüm ilk video oldu, bu yüzden takip etmeye çalıştım. Matematik söz konusu olduğunda beceriyi arttırmam gerektiği açıktır. Bence hatayı buldum. Önemli olmadığını söylediğiniz sabit terim, muhtemelen hesaplamaları yoluyla doğru değerdir. Kendime öğretmek için cevabınıza birkaç kez daha bakacağım. Gerçekten onu takdir ederim!
post hoc

Sabit terimin hesaplamaları atacağını sanmıyorum. Eğim ve kesişim tahminlerini etkilemez (türevi aldığımızda kaybolur), sadece artık SSQ / standart sapmanın tahminleri.
Ben Bolker
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.