当前位置:   article > 正文

python统计分析——逻辑回归_sm.families.binomial

sm.families.binomial

参考资料:用python动手学统计学

        逻辑回归即logistic回归。概率分布为二项分布、联系函数为logit函数的广义线性模型叫作logistic回归。解释变量可以有多个,连续型和分类型的解释变量也可以同时存在。

1、logit函数

        logit函数的数学式如下,对数的底为e:

f(x)=ln(\frac{x}{1-x})

2、反函数

        已知函数f(a)=b,交换a与b的关系,得到g(b)=a,g(x)就是f(x)的反函数。

3、logistic函数

        logistic函数时logit函数的反函数,设Logit函数为f(x),logistic函数为g(x),则g(f(x))=x。

        logistic函数的数学式如下:

g(y)=\frac{1}{1+exp(-y)}

4、logistic函数的性质

        指数函数exp(-y)不可能小于0,所以logistic函数的分布不可能小于1。y越小,exp(-y)越大。当分母很大时,logistic函数的值趋向于0。总结如下

当y趋向于正无穷时,g(y)趋向于1;当y趋向于负无穷时,g(y)趋向于0。

logistic函数的值永远介于0和1之间。

5、logistic回归的推导

        logistic回归的概率分布为二项分布,联系函数为logit函数。

        设成功概率(即考试合格率)为p,联系函数为logit函数,则考试合格率与学习时间的关系如下:(本例将研究考试合格情况与学习时间的逻辑回归关系)

ln(\frac{p}{1-p})=\beta_0+\beta_1 \times time

        将两边转化为logistic函数,得到:

p=\frac{1}{1+exp[-(\beta_0+\beta_1 \times time)]}

        这就是用于预测合格率的数学式。

6、python实现

6.1 导入库

  1. # 导入库
  2. # 用于数值计算的库
  3. import numpy as np
  4. import pandas as pd
  5. import scipy as sp
  6. from scipy import stats
  7. # 导入绘图的库
  8. import matplotlib.pyplot as plt
  9. import seaborn as sns
  10. sns.set()
  11. # 用于估计统计模型的库
  12. import statsmodels.formula.api as smf
  13. import statsmodels.api as sm

6.2 数据准备

test_result=pd.read_csv(r"文件目录")

6.3 数据展示

        以横轴为学习时间(hour)、纵轴为合格率(result),绘制出学习时间与合格率关系的条形图。

sns.barplot(x='hours',y='result',data=test_result)

         在条形图中,纵轴的值为均值。合格为1,不合格为0,因此均值可看作合格率。由图形可以看出,学习时间越长,合格率越高。

6.4 拟合logistic回归

  1. mod_glm=smf.glm(formula='result~hours',
  2. data=test_result,
  3. family=sm.families.Binomial()).fit()

        在进行广义线性模型估计时,不管是不是logistic回归模型,都需要使用smf.glm函数。参数介绍如下:

(1)formula参数与估计正态线性模型时所用的一样。参数值为“result ~ hours”,代表响应变量为result,解释变量为hours。当存在多个解释变量时,使用加号连接。

(2)data参数代表数据源,要求为dataframe格式。

(3)family参数代表概率分布。sm.families.Binomial()为二项分布,sm.families.Poisson()为泊松分布。本例没有指定联系函数。当概率分布为二项分布时,联系函数默认为logit函数。不同的概率分布默认的联系函数也不同。泊松分布默认的联系函数为对数函数。我们也可以通过sm.families.Binomial(link=sm.families.links.logit)显式指定联系函数。

6.5 logistic回归的结果

mod_glm.summary()

        Method中的IRLS为迭代加权最小二乘法的英文 Iterative Reweighted Least Squares的缩写。算法中的迭代次数为No.Iterations。

        Deviance与Pearson chi2是表示模型拟合程度的指标。

        Wald检验用于对系数的解读。

6.6 模型的选择

        下面使用AIC对比空模型和包含解释变量(学习时间)的模型哪个更合适。

  1. # 估计空模型
  2. mod_glm_null=smf.glm('result~1',
  3. data=test_result,
  4. family=sm.families.Binomial()).fit()
  5. # 对比AIC
  6. print('空模型:',mod_glm_null.aic.round(3))
  7. print('包含解释变量的模型:',mod_glm.aic.round(3))

        包含解释变量的模型的AIC更小,说明在预测合格率是需要学习时间这个解释变量。由6.5的结果可知学习时间的系数为正数,说明学习时间越长,合格率越高。

6.7 回归曲线

        以横轴为学习时间、纵轴为合格情况(二值变量)绘制散点图,并在其上绘制有logistic回归所得的理论合格率。设置函数seaborn.lmplot的参数logistic=True,即可绘制出指定图形。

  1. sns.lmplot(x='hours',y='result',
  2. data=test_result,
  3. logistic=True,
  4. x_jitter=0.1,y_jitter=0.02)

        合格的数据全是0或1,在图形上会重合,因而这里制订了x_jitter与y_jitter,以让散点图的数据在图形上稍微分散一些。

6.8 预测

  1. # 建立0-9的公差为1的等差数列
  2. exp_val=pd.DataFrame({
  3. 'hours':np.arange(0,10,1)
  4. })
  5. # 成功概率的预测值
  6. pred=mod_glm.predict(exp_val)
  7. pred

        由预测结果可以看出,不学习的合格率只有1%,学习9小时的合格率接近为98%。得到要么为0要么为1的值,只需要对小数点后1位四舍五入,数值只要不小于0.5就是合格。

7、优势

        要解读logistic回归模型中估计的参数,还需要掌握一个术语。

        成功概率与失败概率的比值叫做优势,它表示是否容易成功,其数学式表示为:优势=p/(1-p)。其中p为成功概率。当p=0.5时,有时为1,表示成功和失败的容易程度相当;当p=0.75时,优势为3,表示成功比失败容易3被。

        优势的对数叫作对数优势,logit函数也可以看作将成功概率转换为对数优势的函数。

        优势的比值叫做优势比。优势比的对数叫作对数优势比。

8、logistic回归的系数与优势比的关系

        当联系函数为logit函数时,logistic回归的系数与有时密切相关。具体来说解释变量改变一个单位时的对数优势比就是回归系数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/475780
推荐阅读
相关标签
  

闽ICP备14008679号