Statsmodels 统计分析库:Python 数据科学必备工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Statsmodels 入门介绍

Statsmodels 是一个强大的 Python 库,专为统计数据分析而设计。它提供了构建回归模型、参数估计、统计假设检验以及时间序列分析的工具。Statsmodels 广泛应用于计量经济学、生物统计学和社会科学领域,能够对分析结果进行深入的统计解释。

Statsmodels 核心功能

回归分析

Statsmodels 提供全面的回归分析功能,包括普通最小二乘法 (OLS)、广义线性模型 (GLM)、稳健回归以及面板数据模型。该库同时支持参数化和非参数化估计方法。

时间序列分析

时间序列模块包含 ARIMA、SARIMA、指数平滑、向量自回归 (VAR) 等多种模型。此外,还提供平稳性检验、序列分解和预测等功能。

统计假设检验

该库包含丰富的统计检验方法:t 检验、F 检验、正态性检验、方差齐性检验、自相关检验等。

方差分析

支持单因素和多因素 ANOVA、ANCOVA、重复测量以及混合效应模型。

非参数方法

包含核密度估计、非参数回归以及基于秩的检验方法。

安装与导入 Statsmodels

安装库

使用标准命令安装:

pip install statsmodels

如需完整功能,可安装包含全部依赖的版本:

pip install statsmodels[complete]

导入所需模块

import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as tsa
import statsmodels.stats.api as sms

库结构与主要模块

核心 API 接口

statsmodels.api — 经典接口,直接指定数据矩阵

statsmodels.formula.api — 基于公式的接口,类似 R 语言风格

statsmodels.tsa — 时间序列分析模块

statsmodels.stats — 统计检验与诊断工具

statsmodels.graphics — 结果可视化

数据处理与准备

Statsmodels 与 pandas.DataFrame 配合最佳:

import pandas as pd
import numpy as np

# 加载数据
data = pd.read_csv("dataset.csv")

# 检查缺失值
print(data.isnull().sum())

# 基本统计描述
print(data.describe())

线性回归 (OLS)

经典接口

import statsmodels.api as sm

# 准备数据
X = data[["x1", "x2", "x3"]]
X = sm.add_constant(X)  # 添加截距项
y = data["y"]

# 构建模型
model = sm.OLS(y, X).fit()
print(model.summary())

# 提取系数
print("系数:", model.params)
print("P 值:", model.pvalues)
print("R 方:", model.rsquared)

公式接口

import statsmodels.formula.api as smf

# 使用公式
model = smf.ols("y ~ x1 + x2 + x3", data=data).fit()
print(model.summary())

# 变量交互
model_interaction = smf.ols("y ~ x1 * x2 + x3", data=data).fit()

# 分类变量
model_cat = smf.ols("y ~ C(category) + x1", data=data).fit()

广义线性模型 (GLM)

GLM 扩展了线性回归,支持非正态分布的响应变量:

import statsmodels.api as sm

# 逻辑回归(二分类)
logit_model = sm.GLM(y_binary, X, family=sm.families.Binomial()).fit()
print(logit_model.summary())

# 泊松回归(计数数据)
poisson_model = sm.GLM(y_counts, X, family=sm.families.Poisson()).fit()

# 伽马回归(正偏态数据)
gamma_model = sm.GLM(y_positive, X, family=sm.families.Gamma(link=sm.families.links.log)).fit()

推荐