1.分组数据的Logistic回归模型
下面我们以一道例题来说明,R软件中实现分组数据的logistics回归模型:
代码实现如下:
data10.4<-read.csv("C:/Users/Administrator/Desktop/data10.4.csv",head=TRUE)
# data10.4中保留的p1变量为逻辑变换后的变量
lm10.4<-lm(p1~x,weights=w,data10.4)
summary(lm10.4)
输出结果为:
通过加权最小二乘法得到的logistics回归方程为:
p
^
=
e
x
p
(
−
0.849
+
0.149
x
)
1
+
e
x
p
(
−
0.849
+
0.149
x
)
\hat{p}=\frac{exp(-0.849+0.149x)}{1+exp(-0.849+0.149x)}
p^=1+exp(−0.849+0.149x)exp(−0.849+0.149x)
这里需要说明的是分组数据的logistics回归只适用于样本量大的分组数据,对样本量小的未分组数据不适用,并且以组数
c
c
c为回归拟合的样本量,拟合的精度低。
实际上,我们可以用最大似然估计直接拟合未分组数据的logistics回归模型,下面将介绍这种方法。
2.未分组数据的Logistics回归模型
代码实现如下:
library(DAAG)
fm<-glm(nomove~conc,family=binomial(link="logit"),data=anesthetic)
# nomove为上表中的y,conc为x
summary(fm)
p=predict(fm,type="response") # 计算y=1的概率的预测值
输出结果为:
输出结果中的z value的计算公式类似于线性回归中的t value,即
Z
=
β
j
^
D
(
β
j
^
)
Z=\frac{\hat{\beta _{j}}}{\sqrt{D(\hat{\beta _{j}})}}
Z=D(βj^)βj^
其中,
β
j
^
\hat{\beta _{j}}
βj^是参数的估计值,
D
(
β
j
^
)
\sqrt{D(\hat{\beta _{j}})}
D(βj^)是估计参数的标准差,并且在假设
β
j
^
=
0
\hat{\beta _{j}}=0
βj^=0成立时,
Z
Z
Z近似服从标准正态分布,因此检验的
P
P
P值为
P
(
∣
Z
∣
>
∣
z
∣
)
=
2
−
2
Φ
(
z
)
P(\left | Z \right |>\left | z \right |)=2-2\Phi (z)
P(∣Z∣>∣z∣)=2−2Φ(z),
Φ
(
z
)
\Phi (z)
Φ(z)为标准正态分布的分布函数。
由此可知,该实例中回归系数是显著的,回归方程为:
p
^
=
e
x
p
(
−
6.469
+
5.567
x
)
1
+
e
x
p
(
−
6.469
+
5.567
x
)
\hat{p}=\frac{exp(-6.469+5.567x)}{1+exp(-6.469+5.567x)}
p^=1+exp(−6.469+5.567x)exp(−6.469+5.567x)
因此,易知麻醉剂的浓度超过 6.469 / 5.567 = 1.162 6.469/5.567=1.162 6.469/5.567=1.162时,患者保持静止的概率大于0.5。另外,对应于30个样本自变量样本的 p ^ \hat{p} p^,如果令 p ^ > 0.5 \hat{p}>0.5 p^>0.5时, y ^ = 1 \hat{y}=1 y^=1; p ^ ≤ 0.5 \hat{p}\leq0.5 p^≤0.5时, y ^ = 0 \hat{y}=0 y^=0,将会发现有6个样本被误判,此时误判率为0.2,说明回归模型较理想。
Probit回归模型
代码实现如下:
data10.4<-read.csv("C:/Users/Administrator/Desktop/data10.4.csv",head=TRUE)
glm10.6<-glm(p~x,weight=n,family=binomial(link="probit"),data=data10.4)
# 变量p为实际购房比例,变量n为签订意向书的人数
summary(glm10.6)
输出结果为:
由输出结果得到回归方程:
Φ
−
1
(
p
^
)
=
−
0.532
+
0.0935
x
\Phi ^{-1}(\hat{p})=-0.532+0.0935x
Φ−1(p^)=−0.532+0.0935x
3.多类别Logistic回归
代码实现如下:
library(mlogit)
data("Fishing",package="mlogit")
Fish<-mlogit.data(Fishing,varying=c(2:9),shape="wide",choice="mode")
m<-mlogit(mode~0|income,data=Fish)
summary(m)
输出结果为:
由以上结果可知,4类别的频率分别为0.113,0.354,0.382和0.151,而且第一个类别beach的回归系数均取了0,因此回归系数(Coefficients)中没有beach这一类别。
另外,由似然比检验结果可知,回归模型整体是显著的,但是对应于自变量income的charter类别的回归系数是不显著的。