用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 变量重新建模型,看看拟合优度能有多大的提高 : )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/592918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL 基础 | JOIN 操作介绍

在SQL中,JOIN是一种强大的功能,用于将两个或多个表中的行结合起来,基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中,以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法: INNER JOIN&#xff1…

数据结构===树

文章目录 概要概念相关概念 有哪些常用的树小结 概要 树是一种新的数据结构,不同于数组,链表。就像大自然中的树,看下这个数据结构,很有意思,有一个主干,然后还有很多树叉,即支干。不错&#xf…

数据结构练习题---环形链表详解

链表成环,在力扣中有这样的两道题目 https://leetcode.cn/problems/linked-list-cycle/ https://leetcode.cn/problems/linked-list-cycle-ii/description/ 这道题的经典解法是利用快慢指针,如果链表是一个环形链表,那么快指针(fast)和慢指…

求矩阵对角线元素之和(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int sum 0;int a[3][3] { 0 };//获取数组a的值&#xff1b;printf(&qu…

华为鸿蒙系统(Huawei HarmonyOS)

华为鸿蒙系统&#xff08;华为技术有限公司开发的分布式操作系统&#xff09; 华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;&#xff0c;是华为公司在2019年8月9日于东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的分布式操作系统。 华为鸿蒙…

STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】

嵌入式单片机开发实战例程合集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码&#xff1a;28ab I2C模块测试 功能描述 I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能&#xff0c;控制所有I2C总线特定的时序&am…

QCC3071/QCC3081/QCC3083/QCC3084/QCC5171/QCC5181/QCC3091/QCC3095平台LDAC解码

QCC3071/QCC3081/QCC3083/QCC3084/QCC5171/QCC5181/QCC3091/QCC3095平台LDAC解码 LDAC Decoder Evaluation Kit for QCC5181 and QCC5171 (The 5181 Kit) 随着Qualcomm DSP向下开放&#xff0c;QCC3071/QCC3081/QCC3083/QCC3084目前可以可以实现LDAC Decoder。 QCC3071/QCC3…

MATLAB 多项式

MATLAB 多项式 MATLAB将多项式表示为行向量&#xff0c;其中包含按幂次降序排列的系数。例如&#xff0c;方程P(x) X 4 7 3 - 5 9可以表示为 p [1 7 0 -5 9]; 求值多项式 polyval函数用于求一个特定值的多项式。例如&#xff0c;在 x 4 时&#xff0c;计算我们之前的多项式…

运行时数据区-基础

运行时数据区-基础 为什么学习运行时数据区Java内存区域&#xff08;运行时数据区域&#xff09;和内存模型&#xff08;JMM&#xff09; 区别组成部分&#xff08;jdk1.7 / jdk1.8&#xff09;从线程隔离性分类与类加载的关系每个区域的功能参考文章 为什么学习运行时数据区 …

Amazon EKS创建S3数据存储卷

亚马逊相关文档 1、创建适用于 Amazon S3的IAM策略 创建存储桶amazoneks {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "s3express:CreateSession","Resource": &…

Java零基础入门到精通_Day 9

1.ArrayList 编程的时候如果要存储多个数据&#xff0c;使用长度固定的数组存储格式&#xff0c;不一定满足我们的需求&#xff0c;更适应不了变化的需求&#xff0c;那么&#xff0c;此时该如何选择呢? 集 合 集合类的特点:提供一种存储空间可变的存储模型&#xff0c;存储的…

2024年 Java 面试八股文——SpringBoot篇

目录 1. 什么是 Spring Boot&#xff1f; 2. 为什么要用SpringBoot 3. SpringBoot与SpringCloud 区别 4. Spring Boot 有哪些优点&#xff1f; 5. Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f; 6. Spring Boot 支持哪些日志框架&#…

信息系统项目管理师0086:项目内外部运行环境(6项目管理概论—6.2项目基本要素—6.2.5项目内外部运行环境)

点击查看专栏目录 文章目录 6.2.5项目内外部运行环境1.组织过程资产2.组织内部的事业环境因素3.组织外部的事业环境因素6.2.5项目内外部运行环境 项目在内部和外部环境中存在和运作,这些环境对价值交付有不同程度的影响。内部和外部环境可能会影响规划和其他项目活动。这些影响…

《苍穹外卖》Day12部分知识点记录——数据统计-Excel报表

一、工作台 需求分析和设计 接口设计 今日数据接口订单管理接口菜品总览接口套餐总览接口订单搜索&#xff08;已完成&#xff09;各个状态的订单数量统计&#xff08;已完成&#xff09; 代码实现 今日数据接口 1. WorkspaceController 注意不要导错包了 package com.sk…

【Linux IO基础】缓冲区

概念 缓冲区的主要作用是提高效率 --- 提高使用者的效率&#xff0c;因为有缓冲区的存在&#xff0c;我们可以积累一部分再统一发送&#xff0c;提高发送的效率。 刷新方式 缓冲区因为能够暂存数据&#xff0c;必定要有一定的刷新方式&#xff1a; 一般策略&#xff1a; 无…

【JavaEE】线程的概念

文章目录 1、什么是线程2、进程和线程的区别3、多线程的概述4、在Java中实现多线程的方法1.继承Thread类2.实现Runnable接口3.使用匿名内部类来继承Thread类&#xff0c;实现run方法4.使用匿名内部类来实现Runnable接口&#xff0c;实现run方法5.使用 lambda表达式 1、什么是线…

ubuntu20中ros与anaconda的python版本冲突问题

系统环境 原本系统是ubuntu20 noetic&#xff0c;python都在/usr/bin中&#xff0c;一共是两个版本的python&#xff0c;一个是python3.8&#xff0c;另一个是python2.7。 问题发现 当安装anaconda后&#xff0c;并且将anaconda的bin目录加入到系统环境中时候&#xff0c;…

【微服务】——Docker 基础知识

这里写自定义目录标题 1.1 了解Docker1.1.1应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.安装Docker——未实践 2.Dock…

【莫比乌斯变换-03】python实现圆对圆的变换

文章目录 一、说明二、python实现复平面的莫比乌斯变换三、线的变换四、画笑脸 一、说明 我们在前面的文章中&#xff0c;叙述了莫比乌斯变换的复数分析&#xff0c;以及种种几何属性&#xff0c;本篇中叙述如何程序地实现&#xff1a;复平面上的圆在莫比乌斯变换下的图像是另…

【ONE·基础算法 || 回溯和剪枝(暴搜/深搜)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解回溯剪枝类题型&#xff08;如何画决策树&#xff0c;如何使用深搜进行递归&#xff0c;如何运用剪枝&#xff0c;如何在一维数组/二维数组中使用&#xff09;。 文章目录 总言1、回溯和剪枝2、全排列&#xff08;med…