python-3.x 属性错误:“ModelData”对象没有属性“design_info”

ezykj2lf  于 2023-05-19  发布在  Python
关注(0)|答案(1)|浏览(272)

我无法对线性回归模型执行annova。我附上了下面的简化代码。请告诉我怎么修。

import statsmodels.api as sm
import numpy as np

# define the data
x1 = np.random.rand(100)
x2 = np.random.rand(100)
y = 2*x1 + 3*x2 + np.random.normal(size=100)

# build the model with all independent variables
X = sm.add_constant(np.column_stack((x1, x2)))
model = sm.OLS(y, X).fit()

# perform the F-test
f_value, p_value, _ = sm.stats.anova_lm(model, typ=1)

错误屏幕截图:

9udxz4iz

9udxz4iz1#

来自anova_lm文档:

注意事项

模型统计量以args的顺序给出。模型必须使用公式API进行拟合。
在定义模型时,您需要使用公式API

import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np

x1 = np.random.rand(100)
x2 = np.random.rand(100)
y = 2*x1 + 3*x2 + np.random.normal(size=100)
X = sm.add_constant(np.column_stack((x1, x2)))

model = smf.ols("y ~ X", data={"y": y, "X": X}).fit()

print(sm.stats.anova_lm(model, typ=1))

另外,我不确定为什么要在X中添加一个常数。这样,拟合的模型最终会有两个截距。我猜你真正想做的是

import numpy as np
import statsmodels.formula.api as smf

X = np.random.rand(100, 2)
y = 2 * X[:, 0] + 3 * X[:, 1] + np.random.normal(size=100)

model = smf.ols("y ~ X", data={"y": y, "X": X}).fit()

print(model.params)

相关问题