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

机器算法验证 r 广义线性模型 最小二乘 r平方 越轨
2022-02-25 23:34:06

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

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

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

  1. 为什么我们不能在survey包中运行 OLS,而这似乎与 Stata 中的加权数据有关?
  2. 广义线性模型的偏差和 r 平方值之间的解释有什么区别?
1个回答

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

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

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

为什么我们不能在survey包中运行 OLS,而这似乎与 Stata 中的加权数据有关?

通过说明您确实可以使用该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 
> #   https://stats.stackexchange.com/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软件包,而是快速浏览了它,并对我在回答中所说的它的作用做出了假设。