线性模型中的R平方与广义线性模型中的偏差成正比?


14

这是我针对这个问题的上下文:据我所知,使用加权数据和数据survey包时,我们无法在R中运行普通的最小二乘回归。在这里,我们必须使用svyglm(),而不是运行一个广义线性模型(可能是同一件事?在这里我不清楚什么是不同的)。

在OLS中,通过该lm()函数,它可以计算R平方值,我确实理解其解释。但是,svyglm()似乎并没有计算出这个误差,而是给了我一个偏差,我在互联网上的短暂旅行告诉我,这是一种拟合优度度量,其解释与R平方不同。

所以我想我基本上有两个我希望得到指导的问题:

  1. 为什么survey似乎无法在Stata中使用加权数据来在包中运行OLS ?
  2. 广义线性模型的偏差和r平方值在解释上有什么区别?

2
欢迎访问@RichardBlissett网站,+ 1是一个很好的问题。OLS回归是广义线性模型的一种特殊情况,其中链接函数是恒等函数且响应分布是正态的(有关更多信息,请参见此处的答案:logit和probit模型之间的区别)。有用于GLiM的“伪R2”,但它们有争议(有关更多信息,请参见此处:which-pseudo-r2-to-report-for-logistic-regression)。
gung-恢复莫妮卡

1
非常感谢您的评论(很抱歉,我花了这么长时间回复...我迷失了这个问题,完全忘记了我没有将其放在SO上)。谢谢,这是一对令人惊讶的解释。我猜想我的问题是:我认为,那么这些统计数据包将不会运行OLS,因为使用调查加权数据运行时存在一些基本问题。我似乎无法弄清楚那个问题是什么。
RickyB 2013年

1
偏差是方差的一般化,而预期偏差是R平方的一般化。问题是,对于预期的偏差似乎没有一个简单或普遍的答案,例如,请参见此处:stats.stackexchange.com/questions/124306/…–
nukimov

Answers:


2

据我所知,使用加权数据和数据survey包时,我们无法在R中运行普通的最小二乘回归。在这里,我们必须使用svyglm(),而不是运行一个广义线性模型(可能是同一件事?在这里我不清楚什么是不同的)。

svyglm如果使用family = gaussian(),它将为您提供一个线性模型,这似乎是调查插图中的默认模型(在3.32-1版中)。请参阅他们找到的示例regmodel

似乎该程序包只是确保在调用时使用正确的权重glm。因此,如果您的结果是连续的,并且您假设它通常是iid分布的,则应该使用family = gaussian()。结果是加权线性模型。这个答案

为什么survey似乎无法在Stata中使用加权数据来在包中运行OLS ?

声明您确实可以使用该survey软件包执行此操作。至于以下问题

广义线性模型的偏差和r平方值在解释上有什么区别?

[R2family = 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

偏差只是使用时的平方误差之和family = gaussian()

注意事项

我假设您想根据自己的问题得出线性模型。此外,我从未使用过该survey程序包,而是快速浏览了该程序包,并做出了我在回答中说明的功能假设。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.