用Python做多项Logit模型

看到网上有一些用 python 做多项 Logit 模型的讲解,大多是使用 scikit-learn 库。这里要介绍的是如何使用 statsmodels 库来做多项 Logit 模型。

题外话,有人会问,statsmodels 和 scikit-learn 两个库有什么区别?为什么你非要用 statsmodels 库来做东西?我想引用读过的一本书的作者 唐亘(读音gen四声) 前辈的一段文字:

“和武侠世界里有少林和武当两大门派一样,数据科学领域也有两个不同的学派:以统计分析为基础的统计学派,和以机器学习为基础的人工智能牌。虽然这两个学派的目的都是从数据中挖掘价值,但彼此都不服气。注重模型预测效果的人工智能派,认为统计学派固步自封,研究和使用的模型都只是一些线性模型,太过简单,根本无法处理复杂的现实数据。而注重假设和模型解释的统计学派,则认为人工智能派搭建的模型缺乏理论依据,无法解释,很难帮助我们通过模型去理解数据。        从历史上来看,一门学科出现相互对立的学派,通常意味着这门学科处于爆发的前夜,比如二十世纪(后半叶)的经济学,凯恩斯学派和新古典经济学派的长期论战,极大地促进了宏观经济学的发展,并深刻地影响了各国政府的经济决策,由此改变了人们的生活方式。现在数据科学已经处在这样相似的位置和时间节点,它已经开始并将继续改变我们的世界。”

读完这段文字后,您就会发现支持统计学派的本文作者,对统计学派成果的偏爱 : )

闲话少说,先给出数据。C站很多文章,不给数据,这是我一直头疼的,没有数据,也就无法验证文章的观点,所以,我的文章,能给数据的地方,尽量给出数据。

数据如下,这其实是来自潘省初、周凌瑶两位教授的《计量经济学(第7版)》的最后一章定性选择模型的数据。

先解释一下数据的物理含义。这是一个选民投票场景,一共有40位选民,从3位候选人中选择自己支持的市长。数据表中,No 表示选民标号,标号是 1-40. Income 代表选民的年收入,Age代表选民的年龄,Male 代表选民的是否是男性。Candidate 代表了选民投票给了第几号候选人,范围是1-3的三位候选人。后面的三列,是在将 Candidate 做0-1化处理,即选民投票给第几号候选人,就在该候选人下面记录1.否则记录0.建模时没有真正用到后三列。

NoIncomeAgeMaleCandidate(Cand)Cand1Cand2Cand3
1101802010
2584811100
3645101100
4141902010
5112212010
6162302010
7604411100
8192602010
91103701100
10446811100
11212802010
12292512010
13282702010
14404501100
15263202010
16333212010
17462811100
18124202010
19304102010
20403811100
21354012010
22184801100
23141912010
24504001100
25723101100
26381802010
27554311100
28505012010
29226201100
30856201100
31221913001
32242013001
33302213001
34212413001
35262113001
36303403001
37292413001
38332513001
39282713001
40323013001

下面开始介绍代码,其实比较简单,如下所示。黑框里给出的是关键代码,读入数据以及加载其它库的部分略去。

import statsmodels.formula.api as smf

model=smf.mnlogit("Cand~Income+Age+Male",data=df)
result=model.fit()
print(result.summary())

得到的运行结果如下图所示:


相关参数结果不做过多解释了。尽管 Male、Income 变量的系数显著性不高,但是为了演示原理,暂且留了下来,继续后面的预测。

No实际的Cand拟合的Cand
122
211
311
422
522
622
711
822
913
1011
1122
1223
1323
1411
1522
1623
1713
1822
1922
2013
2121
2212
2322
2411
2513
2623
2711
2821
2911
3011
3133
3233
3333
3432
3533
3632
3733
3833
3933
4033

可以看到,多项 Logit 模型对数据的拟合值与实际值还是有一定差距的。

由于本文的重点不是去讨论模型的拟合优度,而只是介绍如何去做模型,因此,对拟合优度的讨论,暂不去细说。只是供感兴趣的读者自己去试一下改良,比如,在模型中删除 Male、Income 变量重新建模型,看看拟合优度能有多大的提高 : )

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值