python - 了解 statsmodels 线性回归
问题描述
我正在尝试拟合在statsmodels
库中实现的线性回归模型。
我对方法有疑问fit()
。假设我有大小为 15 的数据样本,我将其分解为 3 个部分并拟合模型。是否调用 eachfit()
将正确拟合模型或将覆盖以前的值。
import numpy as np
import statsmodels.api as sm
# First call
X = [377, 295, 457, 495, 9] # independent variable
y = [23, 79, 16, 41, 40] # dependent variable
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())
# Second call
X = [243, 493, 106, 227, 334]
y = [3, 5, 1, 62, 92]
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())
# Third call
X = [412, 332, 429, 96, 336]
y = [30, 1, 99, 4, 33]
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())
scores = [9, 219, 200, 134, 499]
scores = sm.add_constant(scores)
print(ols.predict(scores))
解决方案
每次调用sm.OLS(y,X)
都会创建一个新的模型实例,每次调用.fit()
都会创建一个引用底层模型的新结果实例。实例彼此独立,即除了可能的基础数据之外,它们不共享任何属性。
但是,在您的示例中,您ols
为每个回归结果分配了相同的名称,因此该名称ols
仅指最后一个实例。
更多细节:
如果不需要复制,则创建类似的模型sm.OLS(y,X)
不会复制数据 y 和 X。具体来说,如果 y 和 X 是 numpy ndarray,则不需要复制。(从技术上讲,转换和复制行为取决于 np.asarray(y) 和 np.asarray(X))
对方法的重复调用fit
每次都会创建一个新的结果实例,但它们持有对同一模型实例的引用。例如,我们可以使用不同的 cov_type 选项调用 fit,这将使用不同的假设创建参数估计的协方差。
model = sm.OLS(y,X)
ols_nonrobust = model.fit()
ols_hc = model.fit(cov_type="HC3")
在大多数模型中,拟合中的所有相关信息都附加到结果实例中。在上述情况下,我们可以同时查看两个结果实例,例如比较参数标准误差
ols_nonrobust.bse
ols_hc.bse
statsmodels 在 RLM 和一些时间序列模型中仍有一些案例,其中一些拟合选项可能会改变基础模型。在这种情况下,只有 fit 创建的最后一个结果实例才会具有正确的模型属性。如果我们适合只需要最后一个实例的循环,那么这些情况很好,但如果同时使用多个结果实例并且它们引用相同的底层模型实例,则可能会显示不正确的结果。 http://www.statsmodels.org/devel/pitfalls.html#repeated-calls-to-fit-with-different-parameters
推荐阅读
- python - 如何将 spark rdd 转换为 numpy 数组?
- c - C将结构转换为字节数组并再次返回
- javascript - I need to create admin page using React and MongoDB
- python - Caeser Cipher蛮力攻击不会解密 - Python
- python - 使用 SQLAlchemy 如何更改列的默认值?
- javascript - 使用 JavaScript 在手机号码字段中要求不超过/不低于 11 位数字
- rust - 如何创建一个避免捕获变量的冗余克隆的闭包?
- c++11 - 来自同一类的字符串和int的隐式转换?
- ansible - 特定任务应该只针对单个服务器
- c# - Chromium 如何知道/设置打开的 pdf 文件中的滚动位置?