Statsmodels 是一个 Python 库,专注于为统计分析和计量经济学提供工具。它能让用户轻松进行数据探索、模型估计和结果检验。
CONTENT
1. 线性回归分析
功能
构建并拟合线性回归模型,分析自变量和因变量之间的线性关系,还能进行预测。
代码
import statsmodels.api as sm
import numpy as np
# 生成示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
X = sm.add_constant(x)
y = 2 * x + 1 + np.random.normal(0, 1, 100)
# 构建并拟合线性回归模型
model = sm.OLS(y, X)
results = model.fit()
# 输出回归结果
print(results.summary())
# 进行预测
new_X = sm.add_constant([11, 12])
predictions = results.predict(new_X)
print("预测值:", predictions)
在上述代码里,先创建了示例数据,接着使用 sm.OLS
构建普通最小二乘(OLS
)线性回归模型并拟合,然后输出模型的详细统计信息,最后用拟合好的模型进行预测。
2. 时间序列分析 - ARIMA 模型
功能
自回归积分滑动平均(ARIMA
)模型可用于时间序列数据的建模、预测,捕捉数据中的趋势、季节性等特征。
代码
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
# 生成示例时间序列数据
np.random.seed(0)
date_rng = pd.date_range(start='2020-01-01', end='2020-12-31', freq='D')
ts = pd.Series(np.random.randn(len(date_rng)), index=date_rng)
# 拟合 ARIMA 模型
model = sm.tsa.ARIMA(ts, order=(1, 1, 1))
results = model.fit()
# 进行预测
forecast = results.get_forecast(steps=10)
forecast_mean = forecast.predicted_mean
# 绘制结果
plt.plot(ts, label='Original Data')
plt.plot(forecast_mean, label='Forecast')
plt.legend()
plt.show()
此代码中,先创建了示例时间序列数据,再使用 sm.tsa.ARIMA
构建并拟合 ARIMA
模型,接着进行未来 10
步的预测,最后绘制原始数据和预测结果。
3. 广义线性模型(GLM)
功能
广义线性模型是线性回归模型的扩展,能处理非正态分布的响应变量,如二项分布、泊松分布等。
import statsmodels.api as sm
import numpy as np
# 生成示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
X = sm.add_constant(x)
y = np.random.binomial(1, 0.5, 100)
# 构建并拟合广义线性模型(逻辑回归)
model = sm.GLM(y, X, family=sm.families.Binomial())
results = model.fit()
# 输出模型结果
print(results.summary())
这里创建了二项分布的示例数据,使用 sm.GLM
构建逻辑回归模型(属于广义线性模型的一种)并拟合,最后输出模型的统计信息。
4. 方差分析(ANOVA)
功能
用于分析多个总体均值是否存在显著差异,判断不同因素对响应变量的影响。
代码:
import statsmodels.api as sm
from statsmodels.formula.api import ols
import pandas as pd
# 创建示例数据
data = {
'Group': ['A', 'A', 'B', 'B', 'C', 'C'],
'Value': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 构建并拟合方差分析模型
model = ols('Value ~ Group', data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
# 输出方差分析结果
print(anova_table)
代码中先创建了包含分组信息和数值的数据框,然后使用 ols
构建方差分析模型并拟合,最后输出方差分析表。
5. 统计检验 - t 检验
功能
用于检验两个样本的均值是否存在显著差异,可分为单样本 t
检验、独立样本 t
检验和配对样本 t
检验。
代码
import statsmodels.api as sm
import numpy as np
# 生成示例数据
np.random.seed(0)
sample1 = np.random.normal(0, 1, 100)
sample2 = np.random.normal(1, 1, 100)
# 进行独立样本 t 检验
t_stat, p_value, df = sm.stats.ttest_ind(sample1, sample2)
print(f"t 统计量: {t_stat}")
print(f"p 值: {p_value}")
此代码生成了两个示例样本,使用 sm.stats.ttest_ind
进行独立样本t
检验,最后输出 t
统计量和 p
值。