statsmodels︱python常规统计模型库

article/2025/11/5 9:02:20

之前看sklearn线性模型没有R方,F检验,回归系数T检验等指标,于是看到了statsmodels这个库,看着该库输出的结果真是够怀念的。。


文章目录

  • 1 安装
  • 2 相关模型介绍
    • 2.1 线性模型
    • 2.2 离散选择模型(Discrete Choice Model, DCM)
    • 2.3 非参数统计
    • 2.4 广义线性模型 - Generalized Linear Models
    • 2.5 稳健回归——Robust Regression
    • 2.6 广义估计方程
    • 2.7 方差分析
    • 2.8 时间序列分析——Time Series Analysis
    • 2.9 空间计量必备:状态空间模型——State space models
    • 2.10 多元统计模型——因子/主成分分析
  • 3 相关模型demo
    • 3.1 线性回归模型
    • 3.2 广义线性模型——GLM
    • 3.3 稳健回归
  • 4 其他
    • 4.1 模型结果如何CSV导出?
    • 4.2 画模型图以及保存
    • 4.3 快速获取模型输出参数:P检验、F检验、P统计量


1 安装

pip install statsmodels

不过有可能会报错:

ImportError: cannot import name 'factorial' from 'scipy.misc' 
(E:\Anaconda3.7\lib\site-packages\scipy\misc\__init__.py)

是跟scipy版本不匹配,笔者是删掉之前的pip uninstall statsmodels,再重新安装了一下就好了:

pip install --pre statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple

2 相关模型介绍

相关文档可见:https://www.statsmodels.org/stable/examples/index.html

在这里插入图片描述

包含的模型有:

2.1 线性模型

在这里插入图片描述

2.2 离散选择模型(Discrete Choice Model, DCM)

在这里插入图片描述

参考:离散选择模型(Discrete Choice Model, DCM)简介——之一

离散选择模型(Discrete Choice Model, DCM)在经济学领域和社会学领域都有广泛的应用。
例如,消费者在购买汽车的时候通常会比较几个不同的品牌,如福特、本田、大众,等等。
如果将消费者选择福特汽车记为Y=1,选择本田汽车记为Y=2,选择大众汽车记为Y=3;那么在研究消费者选择何种汽车品牌的时候,由于因变量不是一个连续的变量(Y=1, 2, 3),传统的线性回归模型就有一定的局限(见DCM系列文章第2篇)。
再比如,在交通安全研究领域,通常将交通事故的严重程度划分为3大类:

  • (1)仅财产损失(Property Damage Only, PDO),
  • (2)受伤(Injury),
  • (3)死亡(Fatality);
    在研究各类因素(如道路坡度、弯道曲率等、车龄、光照、天气条件等)对事故严重程度的影响的时候,由于因变量(事故严重程度)是一个离散变量(仅3个选项),使用离散选择模型可以提供一个有效的建模途径。
    在这里插入图片描述

2.3 非参数统计

在这里插入图片描述

2.4 广义线性模型 - Generalized Linear Models

在这里插入图片描述

2.5 稳健回归——Robust Regression

在这里插入图片描述

2.6 广义估计方程

在这里插入图片描述

2.7 方差分析

在这里插入图片描述

2.8 时间序列分析——Time Series Analysis

在这里插入图片描述

2.9 空间计量必备:状态空间模型——State space models

在这里插入图片描述

在这里插入图片描述

2.10 多元统计模型——因子/主成分分析

在这里插入图片描述


3 相关模型demo

3.1 线性回归模型

可参考:https://www.statsmodels.org/stable/examples/notebooks/generated/ols.html

#  线性模型
import statsmodels.api as sm
import numpy as np
x = np.linspace(0,10,100)
y = 3*x + np.random.randn()+ 10
# Fit and summarize OLS model
X = sm.add_constant(x)
mod = sm.OLS(y,X)
result = mod.fit()
print('Parameters: ', result .params)
print('Standard errors: ', result .bse)
print('Predicted values: ', result .predict())
print(result.summary())# 预测数据
print(result.predict(X[:5]))

输出结果超级熟悉。

  • result.params是回归系数
  • result.summary()把模型相关系数都打印出来
    其中,预测的时候,如果不给入参数result.predict(),则默认是X

在这里插入图片描述

在这里插入图片描述

3.2 广义线性模型——GLM

参考:https://www.statsmodels.org/stable/examples/notebooks/generated/glm.html

import statsmodels.formula.api as smf
star98 = sm.datasets.star98.load_pandas().data
formula = 'SUCCESS ~ LOWINC + PERASIAN + PERBLACK + PERHISP + PCTCHRT + \PCTYRRND + PERMINTE*AVYRSEXP*AVSALK + PERSPENK*PTRATIO*PCTAF'
dta = star98[['NABOVE', 'NBELOW', 'LOWINC', 'PERASIAN', 'PERBLACK', 'PERHISP','PCTCHRT', 'PCTYRRND', 'PERMINTE', 'AVYRSEXP', 'AVSALK','PERSPENK', 'PTRATIO', 'PCTAF']].copy()
endog = dta['NABOVE'] / (dta['NABOVE'] + dta.pop('NBELOW'))
del dta['NABOVE']
dta['SUCCESS'] = endogmod1 = smf.glm(formula=formula, data=dta, family=sm.families.Binomial()).fit()
mod1.summary()
mod1.predict(dta)

formula是常规的公式,其中所有X/Y数据都放在一个dataframe之中。
在这里插入图片描述

print('Total number of trials:',  data.endog[0].sum())
print('Parameters: ', res.params)
print('T-values: ', res.tvalues)

在这里插入图片描述

包括了回归系数,T检验值

3.3 稳健回归

参考:https://www.statsmodels.org/stable/examples/notebooks/generated/robust_models_0.html

nsample = 50
x1 = np.linspace(0, 20, nsample)
X = np.column_stack((x1, (x1-5)**2))
X = sm.add_constant(X)
sig = 0.3   # smaller error variance makes OLS<->RLM contrast bigger
beta = [5, 0.5, -0.0]
y_true2 = np.dot(X, beta)
y2 = y_true2 + sig*1. * np.random.normal(size=nsample)
y2[[39,41,43,45,48]] -= 5   # add some outliers (10% of nsample)X2 = X[:,[0,1]]
res2 = sm.OLS(y2, X2).fit()
print(res2.params)
print(res2.bse)resrlm2 = sm.RLM(y2, X2).fit()
print(resrlm2.params)
print(resrlm2.bse)
print(resrlm2.summary())

在这里插入图片描述


4 其他

4.1 模型结果如何CSV导出?

可以通过as_csv()将模型导出

resrlm2 = sm.RLM(y, x).fit()
resrlm2.summary()
with open( 'model_rlm.csv', 'w') as fh:fh.write(resrlm2.summary().as_csv())

不过导出的格式比较奇怪:
在这里插入图片描述

4.2 画模型图以及保存

import statsmodels.api as sm
import numpy as np
import matplotlib.pyplot as plt# 准备数据
x = np.linspace(0,10,100)
y = 3*x + np.random.randn()+ 10# Fit and summarize OLS model
res = sm.OLS(y,x).fit()
print(res.params)
print(res.summary())
# 稳健回归
resrlm = sm.RLM(y, x).fit()# 画图
fig, ax = plt.subplots(figsize=(8,6))
ax.plot(x, y, 'o', label="truey ")
ax.plot(x, res.predict(), 'o', label="ols")  # res2.predict(X2) == res2.predict()
ax.plot(x, resrlm.predict(), 'b-', label="rlm")# resrlm2.predict(X2) == resrlm2.predict()
legend = ax.legend(loc="best")# 图保存
plt.savefig( 'image.jpg')

4.3 快速获取模型输出参数:P检验、F检验、P统计量

def get_model_param(res2,name = 'all'):model_param_dict = {'name':name,  # 模型的名字'rsquared':res2.rsquared, # R方'fvalue':res2.fvalue, # F值,整个模型'f_pvalue':res2.f_pvalue, # P值,整个模型'params':res2.params[0], # 回归系数'pvalues':res2.pvalues[0], # 回归系数 P检验 0.000'tvalues':res2.tvalues[0]} # 回归系数 T检验 276.571return model_param_dict

http://chatgpt.dhexx.cn/article/HvNBg2sj.shtml

相关文章

数学建模——统计回归模型

前言&#xff1a;看完数学建模的统计回归模型&#xff0c;更是感到了数学建模的“细腻”之处&#xff0c;对比与机器学习&#xff0c;如果说机器学习像是“打一场仗”&#xff0c;那数学建模更是像“做一场手术”&#xff0c;一个简单的回归问题也可以从中感觉到他“细腻”的美…

统计模型 | 学习笔记

一.概述 任何统计模型都是对现实世界复杂联系的简化 根据目的分类 聚类方法&#xff08;细分类模型&#xff09;&#xff1a;市场细分&#xff0c;协同推荐 预测方法&#xff1a;回归模型&#xff0c;时间序列模型 关联归纳方法&#xff1a;购物篮分析&#xff0c;序列分析…

七大统计模型

一、多元回归 1、概述&#xff1a; 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带入回归方程可以求出因变量的估计值&#xff0c;从而可…

03 常用统计模型简述

逻辑回归模型(LR) 原理&#xff1a;分类模型&#xff0c;依据逻辑斯蒂分布&#xff0c;将线性模型转化为逻辑回归模型&#xff0c;使结果分布0~1之间。 前置条件&#xff1a; 自变量为连续变量&#xff0c;分类变量转为虚拟变量&#xff08;哑变量&#xff09;使用 自变量与因…

不可不知的七大统计模型

一、多元回归 1、概述&#xff1a; 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带入回归方程可以求出因变量的估计值&#xff0c;从而可…

数学建模笔记(十一):统计模型(MATLAB计算,函数参数解释待补充)

文章目录 一、概述二、参数估计——区间估计1.糖果称重&#xff08;求总体均值 μ \mu μ的双侧置信区间&#xff09;&#xff08;一&#xff09;根据公式计算结果&#xff08;二&#xff09;直接使用 t t e s t ( ) ttest() ttest()函数 2.灯泡寿命&#xff08; μ \mu μ的单…

scss和sass的区别,scss的基本使用

scss的官方文档 https://www.sass.hk/ sass和scss有什么关系&#xff1f; 1、sass和scss其实是一样的css预处理语言&#xff0c;SCSS 是 Sass 3 引入新的语法&#xff0c;其后缀名是分别为 .sass和.scss两种。 2、SASS版本3.0之前的后缀名为.sass&#xff0c;而版本3.0之后…

vue 安装 scss

安装scss (安装sass-loader node-sass 前者依赖于后者) sass-loader&#xff1a;把 sass编译成css node-sass&#xff1a;nodejs环境中将sass转css npm install sass-loader --save-dev npm install node-sass --sava-dev 安装指定版本&#xff1a;当由于版本过高报错时&#…

scss、sass 和 css 的区别

项目中&#xff0c;会经常使用诸如scss、sass的style样式&#xff0c;它们和css有什么区别呢&#xff1f; less大家应该都不陌生&#xff0c;同样的scss、sass一样&#xff0c;它们都可以称为&#xff1a;CSS预处理器语言。 简单来说&#xff0c;scss和sass的区别&#xff0c;就…

Scss 基本使用(变量、嵌套)

1. Scss 简介 Sass (Syntactically Awesome Stylesheets) 是一种动态样式语言&#xff0c;Sass 语法属于缩排语法&#xff0c;比 css 比多出好些功能 (如&#xff1a;变量、嵌套、运算,混入(Mixin)、继承、颜色处理&#xff0c;函数等)&#xff0c;更容易阅读。 Sass 的缩排语…

sass与scss的区别

用了很久css预编译器&#xff0c;但是一直不太清楚到底用的sass还是scss&#xff0c;直到有天被问住了有点尴尬&#xff0c;找了个教程撸了遍。。。 异同&#xff1a;简言之可以理解scss是sass的一个升级版本&#xff0c;完全兼容sass之前的功能&#xff0c;又有了些新增能力。…

SCSS的基本用法-入门篇

文章目录 前言一、什么是Sass二、SASS 和 SCSS 的区别三、Scss的基本语法1、声明变量 $2、默认变量 !default3、变量调用4、局部变量和全局变量5、嵌套5.1、选择器嵌套5.2、属性嵌套5.3、伪类嵌套 6、混合宏6.1、声明6.1.1、不带参数混合宏6.1.2、带参数混合宏 6.2、调用6.3、混…

Sass 和 SCSS

▣Sass (Syntactically Awesome StyleSheets)&#xff0c;是由buby语言编写的一款css预处理语言&#xff0c;和html一样有严格的缩进风格&#xff0c;和css编写规范有着很大的出入&#xff0c;是不使用花括号和分号的&#xff0c;所以不被广为接受。 Sass 是一款强化 CSS 的辅助…

scss的基本使用

文章目录 SCSS-了解和基本使用sass、scss、less、css的区别 SCSS-基本语法1. 嵌套语法2. 变量3. 父选择器 &4. 混合 mixins5. 模块 SCSS-了解和基本使用 总结一些scss基本使用 具体详情请看官网 sass、scss、less、css的区别 less, sass, scss都是css预处理语言&#xf…

scss理解及用法

1.scss是什么 scss是css的一种预处理语言 scss是一门很好用的类css&#xff0c;在现实中的工作当中几乎都是不采用css的&#xff0c;而是使用类css语言。 例如&#xff1a;scss、less、stylus等&#xff0c;所以学习一门css语言是必须得&#xff0c;由于我用的比较多的就是scss…

程序员那些你不知道的事:高收入程序员年薪高于50万,近四成程序员单身

本文转自&#xff1a;人民网 原文地址&#xff1a;《互联网从业者生活品质报告》发布&#xff1a;近四成程序员单身--IT--人民网 人民网北京10月24日&#xff08;记者毕磊&#xff09;10月23日&#xff0c;《互联网从业者生活品质报告》。据悉&#xff0c;该报告是基于挖财记…

程序员年薪30万,被准丈母娘各种刁难,网友说:分手吧!

这是一个很现实的社会&#xff0c;你没钱没车没房&#xff0c;很可能连老婆都讨不到&#xff0c;即使你收入不错潜力很大&#xff0c;但如果手头拿不出车房&#xff0c;丈母娘很可能一句话就把你怼得无话可说&#xff1a;没车没房我女儿跟你喝西北风&#xff1f; 这也是一名女…

python大神年薪_我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?

但是毕业后&#xff0c;在父母辈的眼里似乎只有公务员、律师、教师这三大铁饭碗是他们心中的最佳职业&#xff0c;我第一次跟我妈说我从事的是IT行业程序员&#xff0c;她回答道&#xff1a;那是修电脑的吗&#xff1f;然后程序员行业被外界吐槽似乎司空见惯了&#xff0c;今日…

八年跳槽五次,程序员年薪4万变92万,引热议

本文转载自 程序员编程社区 很多时候&#xff0c;虽然跳槽可能带来降薪的结果&#xff0c;但依然有很多人认为跳槽可以涨薪。近日&#xff0c;看到一则帖子&#xff0c;发帖的楼主表示&#xff0c;自己8年5跳&#xff0c;年薪4万到92万&#xff0c;现在环沪上海各一套房&#…

2020年程序员年薪、婚恋、跳槽等报告出炉,说的是你吗?

黑马程序员 微信号&#xff1a;heiniu526 传智播客旗下互联网资讯&#xff0c;学习资源免费分享平台 程序员一直都是一个备受人们关注的群体&#xff0c;随着互联网的飞速发展&#xff0c;市场对程序员的需求尤为庞大。但是2020年&#xff0c;因为疫情影响&#xff0c;许多企业…