【问题标题】:Statsmodels OLS function for multiple regression parameters用于多个回归参数的 Statsmodels OLS 函数
【发布时间】:2014-02-09 15:42:37
【问题描述】:

假设我想找到一个方程的 alpha (a) 值,它有类似的东西

y=a+ax1+ax2+...+axi

使用 OLS 假设我们从 i=2 的基本情况的 10 个值开始

#y=a+ax1+ax2

y = np.arange(1, 10)
x = np.array([[ 5, 10], [10,  5], [ 5, 15],
       [15, 20], [20, 25], [25, 30],[30, 35],
       [35,  5], [ 5, 10], [10, 15]])

使用 statsmodel 我通常会使用以下代码来获取 nx1 x 和 y 数组的根:

import numpy as np
import statsmodels.api as sm

X = sm.add_constant(x)

# least squares fit
model = sm.OLS(y, X)
fit = model.fit()
alpha=fit.params

但是当 x 不等于 y 时,这不起作用。如果您不知道 OLS 是什么,则公式为第一页上的 here

【问题讨论】:

  • 如果你想要y=a+ax1+ax2,那么你在设置数据的代码中颠倒了x和y。 OLS 只能处理一维 y。
  • @user333700 即使你把它倒过来,它也有与 nx1 数组相同的问题

标签: python numpy statistics statsmodels


【解决方案1】:

回溯告诉你出了什么问题

    raise ValueError("endog and exog matrices are different sizes")
ValueError: endog and exog matrices are different sizes

你的 x 有 10 个值,你的 y 有 9 个值。回归仅在两者具有相同数量的观察值时才有效。

endog 是 y,exog 是 x,这些是 statsmodels 中用于自变量和解释变量的名称。

如果您将 y 替换为

y = np.arange(1, 11)

然后一切都按预期进行。

【讨论】:

  • in alpha=fit.params 我得到了 4 个 alpha 值,但我只解决了 2 个问题,其他 2 个是从哪里来的?
  • 你应该得到 3 个值,一个用于常数和两个斜率参数。您希望所有系数都相等吗?
【解决方案2】:

这是上面的基本问题,你说你使用 10 个项目,但你只使用 9 作为 y 的向量。

>>> import numpy
>>> len(numpy.arange(1, 10))
9

这是因为 Python 中的切片和范围会上升到但不包括停止整数。如果你这样做了:

numpy.arange(10)

您将拥有一个包含 10 个项目的列表,从 0 开始,以 9 结束。

对于回归,每组预测变量都需要一个预测变量。否则,预测器是无用的。您也可以丢弃没有预测变量的预测变量集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2016-05-03
    • 2014-03-30
    • 2014-12-19
    • 2015-12-31
    • 2020-06-01
    • 2016-12-29
    • 2017-07-25
    相关资源
    最近更新 更多