11 Logistic Regression
线性回归是从X预测出Y,Y是数值型;而逻辑回归也是从X预测Y,但Y是二分变量。Fisher线性区分法通过寻找预测值的线性组合使得两组间的差异最大化,以此来预测分组的归属问题。这个方法要求预测变量必须是连续型,逻辑回归做为一个superior alternative,允许二分预测变量。
Y值是二分变量,以(0,1)表示,我们可以把它当成是二项式过程,p是1的比例,q=1-p是0的比例,1代表成功而0代表失败,逻辑曲线,预测值总是0,1之间。
首先把比例转换成odds,如果p是成功概率,那么支持成功的odds是: \[ odds=\frac{p}{q}=\frac{p}{1-p}\]
在逻辑回归中,我们使用的统计量叫分对数(logit),它是odds的自然对数。 \[ logit = ln(odds) = b_0+b_1x_1+b_2x_2+...+b_kx_k\] 使用线性回归对logit进行预测,
data(iris)
dd=iris[iris$Species != "setosa",]
dd$Species=as.numeric(dd$Species)-2
res=glm(Species ~ Sepal.Length+ Sepal.Width+ Petal.Length + Petal.Width, data=dd, family="binomial")
summary(res)
##
## Call:
## glm(formula = Species ~ Sepal.Length + Sepal.Width + Petal.Length +
## Petal.Width, family = "binomial", data = dd)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.01105 -0.00541 -0.00001 0.00677 1.78065
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -42.638 25.707 -1.659 0.0972 .
## Sepal.Length -2.465 2.394 -1.030 0.3032
## Sepal.Width -6.681 4.480 -1.491 0.1359
## Petal.Length 9.429 4.737 1.991 0.0465 *
## Petal.Width 18.286 9.743 1.877 0.0605 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 138.629 on 99 degrees of freedom
## Residual deviance: 11.899 on 95 degrees of freedom
## AIC: 21.899
##
## Number of Fisher Scoring iterations: 10
结果使用的是Wald z statistic,分析显示只有Petal.Length是显著的。
res2=glm(Species ~ Petal.Length, data=dd, family="binomial")
summary(res2)
##
## Call:
## glm(formula = Species ~ Petal.Length, family = "binomial", data = dd)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.11738 -0.12758 -0.00009 0.05865 2.57260
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -43.781 11.110 -3.941 8.12e-05 ***
## Petal.Length 9.002 2.283 3.943 8.04e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 138.629 on 99 degrees of freedom
## Residual deviance: 33.432 on 98 degrees of freedom
## AIC: 37.432
##
## Number of Fisher Scoring iterations: 8
AIC(Akaike information criterion)用来度量模型拟合,它度量使用模型来描述Y变量信息损失的相对量,值越小,模型越好。 AIC可以用来做模型选择。像上面res和res2分别使用多个变量和单一变量来做拟合,AIC分别为21.9和37.43,显然第一个模型,使用多个变量来做拟合效果要好。
模型拟合可以使用卡方检验来检验拟合得好不好,检验的是null deviance (the null model)和fitted model的差别。
with(res, pchisq(null.deviance-deviance, df.null-df.residual, lower.tail=FALSE))
## [1] 1.947107e-26
p值很小,证明模型是非常好的。
par(mfrow=c(2,2))
plot(res)
同样可以用plot画出各种图,来辅助诊断。
logit=log(res$fitted.values/(1-res$fitted.values))
plot(logit, res$fitted.values)
mean(round(res$fitted.values) == dd$Species)
## [1] 0.98
从数值上看,98%的数据归类是正确的。当然这个也可以使用卡方检验来检验:
dd$fitted=round(res$fitted.values)
chisq.test(with(dd, table(fitted, Species)))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: with(dd, table(fitted, Species))
## X-squared = 88.36, df = 1, p-value < 2.2e-16
逻辑回归也有很多alternative的方法,比如 \(Hotelling's\; T^2\) 和Probit regression.