我正在尝试使用多元线性回归来计算系数。我正在使用statsmodels
库来计算系数。问题是,通过此代码,我得到错误ValueError: endog and exog matrices are different sizes
。我得到这个错误,因为在这个例子中,y
设置了4个元素,而X
设置了一个包含7个规则的列表,其中每个列表都有5个元素。在多元线性回归中计算系数
但我不明白的是,在x
集(不X
)是4名名单内(y
有4种元素),其中每列由7个变量组成的列表。对我而言,x
和y
具有相同数量的元素。
我该如何解决这个错误?
import numpy as np
import statsmodels.api as sm
def test_linear_regression():
x = [[0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102259506.0, 44049537.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102259506.0, 44049537.0, 10.0, 2.0, 32000.0, 49222464.0]]
y = [71.7554421425, 37.5205008984, 44.9945571423, 53.5441429615]
reg_m(y, x)
def reg_m(y, x):
ones = np.ones(len(x[0]))
X = sm.add_constant(np.column_stack((x[0], ones)))
y.append(1)
for ele in x[1:]:
X = sm.add_constant(np.column_stack((ele, X)))
results = sm.OLS(y, X).fit()
return results
if __name__ == "__main__":
test_linear_regression()
我认为你有一个非常好的了解这个问题。 'x'(小x)中的每个列表都有七个元素,而您的'y'是'x'中每个列表的单个元素。最后,'X'(大X)的形状为(7,5),但是你的'y'(这是一个列表)的len值为5.由于回归需要有相同数量的样本,预测7个样品的5个元素(y)将不起作用。你想做什么?你想每个'x'列表中的7个元素预测'y'吗? – Jarad