我正在尝试获取使用 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
打印的 OLS 参数可能已四舍五入至小数点后 6 位,并且您在问题开头分享的结果已进一步四舍五入至小数点后 4 位。 Predict() 函数结果与您的手工计算之间差异的最大来源来自于您对 SAT 系数的舍入。即使您只将其更改了大约 0.00005(看起来非常小!),当乘以数千个值(例如 SAT 分数)时,它会传播为
的错误1700*0.0017 - 1700*0.001656 = 1700*(0.0017 - 0.001656)
= 1700*0.000044
= 0.0748
这就是当你查看你的结果和预测()的结果之间的差异时你会得到什么。预测将比您根据舍入输出进行的任何手工计算更精确。