假设我想找到类似
的等式的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。
答案 0 :(得分: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)
然后一切都按预期工作。
答案 1 :(得分:0)
以上是上面的基本问题,你说你正在使用10个项目,但是你只使用了9个你的y矢量。
>>> import numpy
>>> len(numpy.arange(1, 10))
9
这是因为Python中的切片和范围可以达到但不包括停止整数。如果你做了:
numpy.arange(10)
您将拥有10个项目的列表,从0开始,以9结尾。
对于回归,您需要为每组预测变量预测变量。否则,预测变量就没用了。您也可以放弃没有预测变量的预测变量集。