为什么在 Python 中使用 statsmodels.formula.api / statsmodels.api 时得到错误的预测值?

问题描述 投票:0回答:1

我正在尝试获取使用 Python 中的统计模型创建的简单线性回归模型的预测值。我得到模型的下一个结果:

Intercept      0.2750
SAT            0.0017

所以我的逻辑是,线性回归方程应该是

Y = 0.275 + 0.0017*x

如果我传递下一个值

SAT = [1700, 1670]
Y
结果应该是
~ 3.165, 3.114
但我越来越
3.089710, 3.040039

我是否对

predict()
方法的工作原理有误解,或者我的代码有问题吗?任何帮助将不胜感激,我试图在谷歌上找到任何内容,但附近什么也没有。先谢谢大家了!

这是我正在使用的数据集的头部和Python代码块

#Creating the model
dataset = pd.read_csv('1.01. Simple linear regression.csv')

print(dataset.head())
    SAT   GPA
0  1714  2.40
1  1664  2.52
2  1760  2.54
3  1685  2.74
4  1693  2.83

reg_exp = 'GPA ~ SAT'
ols_model_results = smf.ols(formula=reg_exp, data=dataset).fit()

print(ols_model_results.params)
Intercept    0.275040
SAT          0.001656


#Making predictions
new_data = pd.DataFrame({'Intercept': 1, 'SAT': [1700, 1670]})
predictions = ols_model_results.predict(new_data)
print(predictions)
0  3.089710
1  3.040039
python linear-regression statsmodels predict
1个回答
0
投票

打印的 OLS 参数可能已四舍五入至小数点后 6 位,并且您在问题开头分享的结果已进一步四舍五入至小数点后 4 位。 Predict() 函数结果与您的手工计算之间差异的最大来源来自于您对 SAT 系数的舍入。即使您只将其更改了大约 0.00005(看起来非常小!),当乘以数千个值(例如 SAT 分数)时,它会传播为

的错误
1700*0.0017 - 1700*0.001656 = 1700*(0.0017 - 0.001656)
                            = 1700*0.000044
                            = 0.0748

这就是当你查看你的结果和预测()的结果之间的差异时你会得到什么。预测将比您根据舍入输出进行的任何手工计算更精确。

© www.soinside.com 2019 - 2024. All rights reserved.