Doğrusal modelde R-kare, genelleştirilmiş doğrusal modelde sapma?


14

İşte bu soruya ilişkin bağlamım: Anlayabildiğim kadarıyla, ağırlıklı veri ve surveypaketi kullanırken R'de sıradan bir en küçük kareler regresyonunu çalıştıramayız . Burada kullanmak zorundayız svyglm(), bunun yerine genelleştirilmiş doğrusal bir model çalıştırıyor olmalıyız (aynı şey olabilir mi? Burada neyin farklı olduğu konusunda bulanıkım).

OLS ve lm()fonksiyon aracılığıyla, yorumunu anladığım bir R kare değerini hesaplar. Bununla birlikte, svyglm()bunu hesaplamak gibi görünmüyor ve bunun yerine bana internetteki kısa yolculuğumun bir R karesinden farklı olarak yorumlanan bir uyum iyiliği ölçüsü olduğunu söyleyen bir Sapma veriyor.

Bu yüzden, aslında bir yön bulmayı umduğum iki sorum var:

  1. Neden Stata'daki surveyağırlıklı verilerle yapmak mümkün olsa da , pakette OLS'yi çalışamıyoruz?
  2. Genelleştirilmiş doğrusal bir modelin sapması ile r-kare değeri arasındaki yorumdaki fark nedir?

2
İyi bir soru için @RichardBlissett, +1 sitesine hoş geldiniz. OLS regresyonu, genelleştirilmiş doğrusal modelin özel bir örneğidir; burada bağlantı işlevi kimlik işlevi ve yanıt dağılımı normaldir (buradaki cevabım bölümüne bakın: daha fazla bilgi için log-ve-probit modelleri arasındaki fark ). GLiM'ler için 'sözde R2'ler vardır, ancak tartışmalıdırlar ( daha fazla bilgi için bkz. Hangi-sözde-r2-lojistik-regresyon için rapor ).
gung - Monica'yı eski durumuna getirin

1
Yorumunuz için çok teşekkürler (ve üzgünüm cevap vermem çok uzun sürdü ... Bu soruyu kaybettim ve tamamen SO'ya koymadım unutmuştum). Bu inanılmaz bir açıklama, teşekkürler. Sanırım sorum şu: Bu sanırım, o zaman bu istatistiksel paketler OLS'yi çalıştırmıyor çünkü anket ağırlıklı verilerle çalıştırmanın bazı temel sorunları var. Ancak bu sorunun ne olduğunu anlayamıyorum.
RickyB

1
Sapma, varyansın genelleştirilmesidir ve beklenen sapma, R-karesinin genelleştirilmesidir. Sorun şu ki, beklenen sapmaya kolay veya genel bir cevap yok gibi görünüyor, örneğin buraya bakın: stats.stackexchange.com/questions/124306/…
nukimov

Yanıtlar:


2

Söyleyebileceğim kadarıyla, ağırlıklı veri ve surveypaketi kullanırken R'de normal bir en küçük kareler regresyonunu çalıştıramayız . Burada kullanmak zorundayız svyglm(), bunun yerine genelleştirilmiş doğrusal bir model çalıştırıyor olmalıyız (aynı şey olabilir mi? Burada neyin farklı olduğu konusunda bulanıkım).

svyglmanket vinyetinden family = gaussian()varsayılan gibi görünen doğrusal bir model verecektir (3.32-1 sürümünde). Buldukları örneğe bakın .regmodel

Görünüşe göre paket sadece aradığında doğru ağırlıkları kullandığınızdan emin oluyor glm. Dolayısıyla, sonucunuz sürekli ise ve bunun normal olarak dağıtıldığını varsayarsanız, kullanmalısınız family = gaussian(). Sonuç ağırlıklı bir doğrusal modeldir. Bu cevap

Neden Stata'daki surveyağırlıklı verilerle yapmak mümkün olsa da , pakette OLS'yi çalışamıyoruz?

bunu surveypaketle gerçekten yapabileceğinizi belirterek . Aşağıdaki soruya gelince

Genelleştirilmiş doğrusal bir modelin sapması ile r-kare değeri arasındaki yorumdaki fark nedir?

R,2family = gaussian()

> set.seed(42293888)
> x <- (-4):5
> y <- 2 + x + rnorm(length(x))
> org <- data.frame(x = x, y = y, weights = 1:10)
> 
> # show data and fit model. Notice the R-squared
> head(org) 
   x          y weights
1 -4  0.4963671       1
2 -3 -0.5675720       2
3 -2 -0.3615302       3
4 -1  0.7091697       4
5  0  0.6485203       5
6  1  3.8495979       6
> summary(lm(y ~ x, org, weights = weights))

Call:
lm(formula = y ~ x, data = org, weights = weights)

Weighted Residuals:
    Min      1Q  Median      3Q     Max 
-3.1693 -0.4463  0.2017  0.9100  2.9667 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.7368     0.3514   4.942  0.00113 ** 
x             0.9016     0.1111   8.113 3.95e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 2.019 on 8 degrees of freedom
Multiple R-squared:  0.8916,    Adjusted R-squared:  0.8781 
F-statistic: 65.83 on 1 and 8 DF,  p-value: 3.946e-05

> 
> # make redundant data set with redundant rows
> idx <- unlist(mapply(rep, x = 1:nrow(org), times = org$weights))
> org_redundant <- org[idx, ]
> head(org_redundant)
     x          y weights
1   -4  0.4963671       1
2   -3 -0.5675720       2
2.1 -3 -0.5675720       2
3   -2 -0.3615302       3
3.1 -2 -0.3615302       3
3.2 -2 -0.3615302       3
> 
> # fit model and notice the same R-squared
> summary(lm(y ~ x, org_redundant))

Call:
lm(formula = y ~ x, data = org_redundant)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.19789 -0.29506 -0.05435  0.33131  2.36610 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.73680    0.13653   12.72   <2e-16 ***
x            0.90163    0.04318   20.88   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.7843 on 53 degrees of freedom
Multiple R-squared:  0.8916,    Adjusted R-squared:  0.8896 
F-statistic: 436.1 on 1 and 53 DF,  p-value: < 2.2e-16

> 
> # glm gives you the same with family = gaussian()  
> # just compute the R^2 from the deviances. See 
> #   /stats//a/46358/81865
> fit <- glm(y ~ x, family = gaussian(), org_redundant)
> fit$coefficients
(Intercept)           x 
  1.7368017   0.9016347 
> 1 - fit$deviance / fit$null.deviance
[1] 0.8916387

Sapma, kullandığınız zaman sadece kare hatalarının toplamıdır family = gaussian().

Uyarılar

Sorunuzdan doğrusal bir model istediğinizi varsayıyorum. Ayrıca, surveypaketi hiç kullanmadım, ancak hızlı bir şekilde taradım ve cevabımda belirttiğim şey hakkında varsayımlar yaptım.

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.