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