GLM 的伪 R 平方公式

机器算法验证 r 回归 广义线性模型 r平方
2022-02-01 05:13:39

我在用 R 扩展线性模型一书中找到了伪的公式,Julian J. Faraway (第 59 页)。R2

1ResidualDevianceNullDeviance

这是 GLM 的伪的常用公式吗?R2

4个回答

GLiM有大量的伪出色的 UCLA 统计帮助网站在这里对它们进行了全面的概述您列出的那个称为 McFadden 的伪相对于 UCLA 的类型学,它在某种意义上类似于,它指示拟合模型相对于空模型的改进。一些统计软件,特别是 SPSS,如果我没记错的话,默认打印出 McFadden 的伪以及逻辑回归等一些分析的结果,所以我怀疑它很常见,尽管 Cox & Snell 和 Nagelkerke 伪可能更是如此。然而,McFadden 的伪并不具备R2R2R2R2R2R2R2(没有伪会)。如果有人有兴趣使用伪来理解模型,我强烈建议阅读这个优秀的 CV 线程:哪个伪度量是要报告逻辑回归的度量(Cox & Snell 或 Nagelkerke)? (对于它的价值,本身比人们意识到的更滑,在@whuber 的回答中可以看到一个很好的证明:R有用还是危险?R2R2R2R2R2

R 在输出中给出空值和剩余偏差,glm以便您可以进行这种比较(请参见下面的最后两行)。

> x = log(1:10)

> y = 1:10

> glm(y ~ x, family = poisson)

>Call:  glm(formula = y ~ x, family = poisson)

Coefficients:
(Intercept)            x  
  5.564e-13    1.000e+00  

Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
Null Deviance:      16.64 
Residual Deviance: 2.887e-15    AIC: 37.97

您还可以使用 和 将这些值从对象中提取model$null.deviance出来model$deviance

您提出的公式由 Maddala (1983) 和 Magee (1990) 提出,用于估计逻辑模型上的 R 平方。因此,我认为它不适用于所有 glm 模型(参见 Thomas P. Ryan 的《现代回归方法》一书,第 266 页)。

如果您制作一个假数据集,您会发现它低估了 R 平方...对于每个示例的高斯 glm。

我认为对于高斯 glm,您可以使用基本的 (lm) R 平方公式...

R2gauss<- function(y,model){
    moy<-mean(y)
    N<- length(y)
    p<-length(model$coefficients)-1
    SSres<- sum((y-predict(model))^2)
    SStot<-sum((y-moy)^2)
    R2<-1-(SSres/SStot)
    Rajust<-1-(((1-R2)*(N-1))/(N-p-1))
    return(data.frame(R2,Rajust,SSres,SStot))
}

对于逻辑(或 r 中的二项式系列),我将使用您提出的公式...

    R2logit<- function(y,model){
    R2<- 1-(model$deviance/model$null.deviance)
    return(R2)
    }

到目前为止,对于 poisson glm,我使用了这篇文章中的方程。

https://stackoverflow.com/questions/23067475/how-do-i-obtain-pseudo-r2-measures-in-stata-when-using-glm-regression

在研究门上还有一篇关于伪 R2 的精彩文章……这是链接:

https://www.researchgate.net/publication/222802021_Pseudo_R-squared_measures_for_Poisson_regression_models_with_over-_or_underdispersion

我希望这会有所帮助。

David J. Harris 所述,R 包modEvA计算D-Squared1 - (mod$deviance/mod$null.deviance)

set.seed(1)
data <- data.frame(y=rpois(n=10, lambda=exp(1 + 0.2 * x)), x=runif(n=10, min=0, max=1.5))

mod <- glm(y~x,data,family = poisson)

1- (mod$deviance/mod$null.deviance)
[1] 0.01133757
library(modEvA);modEvA::Dsquared(mod)
[1] 0.01133757

模型的 D 平方或解释偏差在 (Guisan & Zimmermann 2000) https://doi.org/10.1016/S0304-3800(00)00354-9中介绍