原文链接:http://tecdat.cn/?p=6295

原文出处:拓端数据部落公众号

 并非所有后果/因变量都能够应用线性回归进行正当建模。兴许第二种最常见的回归模型是逻辑回归,它实用于二元后果数据。如何计算逻辑回归模型的R平方? 

McFadden麦克法登R平方

在R中,glm(狭义线性模型)命令是用于拟合逻辑回归的规范命令。据我所知,拟合的glm对象并没有间接给你任何伪R平方值,但能够很容易地计算出McFadden的度量。为此,咱们首先拟合咱们感兴趣的模型,而后是仅蕴含截距的null模型。而后咱们能够应用拟合模型对数似然值计算McFadden的R平方:

mod < -  glm(y~x,family =“binomial”)nullmod < -  glm(y~1,family =“binomial”)1-logLik(MOD)/ logLik(nullmod)

为了理解预测器须要取得某个McFadden的R平方值的强度,咱们将应用单个预测模型X来模仿数据, 咱们首先尝试P(Y = 1 | X = 0)= 0.3和P(Y = 1 | X = 1)= 0.7:

set.seed(63126)n < -  10000x < -  1 *( (n)<0.5)pr < - (x == 1)* 0.7 +(x == 0)* 0.3y < -  1 *(  f(n)<pr)mod < -  glm(y~x,family =“binomial”)nullmod < -  glm(y~1,family =“binomial”)1-logLik(MOD)/  (nullmod)'log Lik。' 0.1320256(df = 2)

 因而,即便X对Y = 1的概率有相当强烈的影响,McFadden的R2也只有0.13。要减少它,咱们必须使P(Y = 1 | X = 0)和P(Y = 1 | X = 1)更加不同:

set.seed(63126)n < -  10000x < -  1 *(runif(n)<0.5)pr < - (x == 1)* 0.9 +(x == 0)* 0.1y < -  1 *( (n)<pr)mod < -  glm(y~x,family =“binomial”)nullmod < -  glm(y~1,family =“binomial”)1- (MOD)/  (nullmod)\[1\] 0.5539419

即便X将P(Y = 1)从0.1变为0.9,McFadden的R平方仅为0.55。最初咱们将尝试0.01和0.99的值 - 我称之为十分弱小的成果!

set.seed(63126)n < -  10000x < -  1 *(runif(n)<0.5)pr < - (x == 1)* 0.99 +(x == 0)* 0.01y < -  1 *( (n) pr)mod < -  glm(y~x,family =“binomial”)nullmod < -  glm(y~1,family =“binomial”)1- (MOD)/  ( )\[1\] 0.9293177

当初咱们有一个更靠近1的值。 

分组二项数据与单个数据

data < -  data.frame(s = c(700,300),f = c(300,700),x = c(0,1))     SFX1 700 300 02 300 700 1

 为了使逻辑回归模型拟合R中的数据,咱们能够将因变量传递给glm函数, :

Call:glm(formula = cbind(s, f) ~ x, family = "binomial", data = data)Deviance Residuals: \[1\]  0  0Coefficients:            Estimate Std. Error z value Pr(>|z|)    (Intercept)  0.84730    0.06901   12.28   <2e-16 ***x           -1.69460    0.09759  -17.36   <2e-16 ***\-\-\-Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)    Null deviance: 3.2913e+02  on 1  degrees of freedomResidual deviance: 1.3323e-13  on 0  degrees of freedomAIC: 18.371Number of Fisher Scoring iterations: 2

咱们当初将分组的二项式数据转换为 伯努利 数据,并拟合雷同的逻辑回归模型。 

individualData <-  (cbind(data,y=0),cbind(data,y=1))individualData$freq <- individualData$sindividualData$freq\[ $y==0\] <-  $f\[individualData$y==0\]mod2 <- glm(y~x, family="binomial",data= ,weight=freq)summary(mod2)Call:glm(formula = y ~ x, family = "binomial", data = individualData,     weights = freq)Deviance Residuals:      1       2       3       4  -26.88  -22.35   22.35   26.88  Coefficients:            Estimate Std. Error z value Pr(>|z|)    (Intercept)  0.84730    0.06901   12.28   <2e-16 ***x           -1.69460    0.09759  -17.36   <2e-16 ***\-\-\-Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)    Null deviance: 2772.6  on 3  degrees of freedomResidual deviance: 2443.5  on 2  degrees of freedomAIC: 2447.5Number of Fisher Scoring iterations: 4

正如所料,咱们从分组数据框中取得雷同的参数估计和推论。 

nullmod1 <- glm(cbind(s,f)~1, family="binomial",data)nullmod2 <- glm(y~1, family="binomial",data=individualData, =freq)1-logLik(mod1)/logLik(nullmod1)'log Lik.' 0.9581627 (df=2)1-logLik(mod2)/logLik(nullmod2)'log Lik.' 0.1187091 (df=2)

咱们看到分组数据模型的R平方为0.96,而单个数据模型的R平方仅为0.12。