编程学习网 > 编程语言 > Python > python statsmodels教程(Python建模库介绍——statsmodels)
2023
04-13

python statsmodels教程(Python建模库介绍——statsmodels)

statsmodels是一个Python库,用于拟合多种统计模型,进行统计测试、数据探索和可视化,可以使用conda安装:conda install statsmodels。 

statsmodels中包括以下一些模型:
线性模型、广义线性模型和鲁棒线性模型;
线性混合效应模型;
方差分析(ANOVA)方法;
时间序列过程和状态空间模型;
广义矩量法。
本文我们将使用statsmodels中的一些基本工具,并探索如何使用Patsy公式和pandas DataFrame对象的建模接口。1.评估线性模型:statsmodels中的线性回归模型有多种,从基本的(如普通最小二乘法)到复杂的(如迭代重新加权的最小二乘法)。
statsmodels中的线性模型有两个不同的主要接口:基于数组和基于公式。这些接口都是通过以下API模块导入访问的。
1import statsmodels.api as sm
2import statsmodels.formula.api as smf
首先我们根据一些随机数据生成一个线性模型:
 1# 定义随机种子,使得结果可重复
 2rng = np.random.default_rng(seed=12345)
 3
 4# 定义一个用于生成具有特定均值和方差的正态分布数据的辅助函数
 5def dnorm(mean, variance, size=1):
 6    if isinstance(size, int):
 7        size = size,
 8    return mean + np.sqrt(variance) * rng.standard_normal(*size)
 9
10N = 100
11# np.c_ 用于连接多个矩阵,X的shape为(100,3)
12X = np.c_[dnorm(0, 0.4, size=N),
13          dnorm(0, 0.6, size=N),
14          dnorm(0, 0.2, size=N)]
15eps = dnorm(0, 0.1, size=N)
16beta = [0.1, 0.3, 0.5]
17
18y = np.dot(X, beta) + eps # 已知参数beta的 "真实 "模型

线性模型一般是用截距项来拟合的,sm.add_constant 函数可以在现有的矩阵中添加截距项。
1X_model = sm.add_constant(X)
m.OLS类可以拟合一个普通最小二乘法的线性回归。
1model = sm.OLS(y, X)
模型的 fit 方法返回一个包含估计的模型参数和其他诊断的回归结果对象。
1results = model.fit()
2results.params # array([0.06681503, 0.26803235, 0.45052319])
在 results 上调用 summary 方法可以打印一个模型的详细诊断输出。

1print(results.summary())

上述输出中的参数名称已经被赋予了通用名称 x1,x2,等等。假设所有的模型参数都在一个DataFrame中。
1data = pd.DataFrame(X, columns=['col0', 'col1', 'col2'])
2
3data['y'] = y
4
5data[:5]

现在我们可以使用statsmodels公式API和Patsy公式字符串。在使用公式和pandas对象时,我们也不需要使用add_constant。
 1results = smf.ols('y ~ col0 + col1 + col2', data=data).fit()
 2
 3results.params
 4# Intercept   -0.020799
 5# col0         0.065813
 6# col1         0.268970
 7# col2         0.449419
 8# dtype: float64
 9
10results.tvalues
11# Intercept   -0.652501
12# col0         1.219768
13# col1         6.312369
14# col2         6.567428
15# dtype: float64
给定新的样本外数据后,可以计算出给定的模型参数的预测值。
1results.predict(data[:5])
2# 0   -0.592959
3# 1   -0.531160
4# 2    0.058636
5# 3    0.283658
6# 4   -0.102947
7# dtype: float64
在statsmodels中,还有许多额外的工具用于线性模型结果的分析、诊断和可视化。除了普通最小二乘法,还有其他类型的线性模型。
2.评估时间序列处理:statsmodels中的另一类模型是用于时间序列分析的。其中有自回归过程、卡尔曼滤波和其他状态空间模型,以及多变量自回归模型。
首先模拟生成一些具有自回归结构和噪声的时间序列数据:
 1init_x = 4
 2
 3values = [init_x, init_x]
 4N = 1000
 5
 6b0 = 0.8
 7b1 = -0.4
 8noise = dnorm(0, 0.1, N)
 9for i in range(N):
10    new_x = values[-1] * b0 + values[-2] * b1 + noise[i]
11    values.append(new_x)
这个数据有一个AR(2)结构(两个滞后期),参数为0.8和-0.4。当你拟合一个AR模型时,你可能不知道要包括多少个滞后项,所以你可以用一些更大的滞后项来拟合模型。
 1from statsmodels.tsa.ar_model import AutoReg
 2
 3MAXLAGS = 5
 4
 5model = AutoReg(values, MAXLAGS)
 6
 7results = model.fit()
 8
 9# 结果中的估计参数首先是截距,然后是前两个滞后期的估计值。
10results.params
11# array([ 0.02346612,  0.8096828 , -0.42865278, -0.03336517,  0.04267874, -0.05671529])
这些模型的更深层次的细节以及如何解释它们的结果,可以在statsmodels文档中查看。

以上就是python statsmodels教程(Python建模库介绍——statsmodels)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取