statsmodels 是一个基于 Python 的科学计算库,专注于统计数据分析、统计模型估计、统计检验和数据探索。它提供了对 R 语言中许多统计方法的完整复现,同时紧密集成在 Python 的科学计算生态(NumPy, Pandas, SciPy)中。
1. 线性模型
这是最基础也是最常用的部分。
-
普通最小二乘回归(OLS):最基本的线性回归。
-
广义最小二乘回归(GLS):用于处理异方差性的回归。
-
加权最小二乘回归(WLS):用于处理已知权重的异方差性。
2. 广义线性模型(GLM)
用于处理因变量非正态分布的情况,如二项分布(逻辑回归)、泊松分布等。
-
逻辑回归(Logit):用于二分类问题。
-
泊松回归(Poisson):用于计数型数据。
3. 时间序列分析
这是 statsmodels 非常强大的一个模块。
-
AR / MA / ARMA / ARIMA 模型:用于单变量时间序列分析和预测。
-
状态空间模型和卡尔曼滤波:更高级的时间序列方法。
-
向量自回归(VAR):用于多变量时间序列系统。
-
单位根检验(ADF):检验时间序列的平稳性。
from statsmodels.tsa.arima.model import ARIMA# 拟合一个 ARIMA(1, 1, 1) 模型 model = ARIMA(data, order=(1, 1, 1)) results = model.fit() print(results.summary()) results.plot_diagnostics() # 绘制诊断图形 forecast = results.forecast(steps=5) # 预测未来5步
4. 非参数方法和稳健回归
-
核密度估计:用于估计随机变量的概率密度函数。
-
广义加性模型(GAM):在
statsmodels.gam
中。 -
RLM(稳健线性模型):用于处理数据中有异常值的情况。
5. 多元统计模型
-
主成分分析(PCA)、因子分析等。
-
方差分析(ANOVA)。
6. 生存分析
-
Kaplan-Meier 估计量:用于估计生存函数。
-
Cox 比例风险模型:用于分析生存时间与一个或多个预测变量之间的关系。
与 Scikit-learn 的区别
这是一个非常常见的问题。两者都是建模库,但侧重点完全不同:
特性 | statsmodels | Scikit-learn |
---|---|---|
主要目标 | 统计推断,理解变量关系、显著性 | 预测精度,机器学习 |
输出 | 丰富的统计指标(p值、置信区间等) | 相对简洁,侧重于预测结果 |
模型 | 经典的统计模型(线性、时序、GLM) | 机器学习模型(树、SVM、集成学习、神经网络) |
接口 | 支持 R 风格的公式接口 | 统一的 fit /predict /score 接口 |