这是一个统计问题,因为代码可以正常工作,但是我正在学习python中的回归建模。我在下面的一些代码中使用statsmodel创建一个简单的线性回归模型:
import statsmodels.api as sm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ng = pd.read_csv('C:/Users/ben/ngDataBaseline.csv', thousands=',', index_col='Date', parse_dates=True)
X = ng['HDD']
y = ng['Therm']
# Note the difference in argument order
model = sm.OLS(y, X).fit()
# Print out the statistics
model.summary()
我得到如下屏幕截图所示的输出。我正在尝试判断拟合优度,并且我知道R ^ 2高,但是是否可以通过statsmodel找到预测的均方根误差(RMSE)?
我还尝试研究是否可以估计置信区间的采样分布。如果我正确地解释了截距HDD 5.9309的表,标准误为0.220,p值低0.000,并且我认为置信区间为97.5%,那么HDD的值(或者是我的因变量Therm?)将介于5.489和6.373 ??或者我认为以百分比形式可以表示为〜+-0.072%
答案 0 :(得分:0)
是否可以使用statsmodels计算RMSE?是的,但是您必须首先使用模型生成预测,然后使用rmse
方法。
from statsmodels.tools.eval_measures import rmse
# fit your model which you have already done
# now generate predictions
ypred = model.predict(X)
# calc rmse
rmse = rmse(y, ypred)
对于解释结果,HDD
不是截距。这是您的自变量。系数(例如重量)为5.9309,标准误差为0.220。该变量的t分数确实很高,表明它是一个很好的预测指标,并且由于该变量很高,因此p值非常小(接近0)。
5.489和6.373值是95%置信区间的置信区间。简单地基于从系数中减去与95%置信区间关联的t统计量的标准误差乘以标准误差即可计算出边界。
t统计量取决于样本量,在您的情况下为53,因此您的自由度为52。使用t-table,这意味着对于df = 52和95%的置信度,t统计量为2.0066。因此,可以按照以下方式手动计算边界:
lower: 5.9309 - (2.0066 x 0.220) = 5.498
upper: 5.9309 + (2.0066 x 0.220) = 6.372
当然,由于四舍五入,会导致一些精度损失,但是您可以看到手动计算的确与摘要中的报告相近。
对您的评论的其他回复:
您可以使用多种指标来评估拟合优度。其中之一是调整后的R平方统计量。其他是RMSE,F统计或AIC / BIC。由您决定使用哪个或哪些度量来评估拟合优度。对我来说,我通常使用调整后的R平方和/或RMSE,尽管RMSE更像是与其他模型进行比较的相对指标。
现在查看您的模型摘要,这两个模型都非常合适,尤其是第一个模型,它具有较高的已调整R平方值。第二个模型可能有潜在的改进(可以尝试使用自变量的不同组合),但是除非您进行实验,否则您将不会知道。最终,没有对与错的模型。它只是建立几个模型并比较它们以获得最佳模型。我还将链接一个article,解释回归模型的拟合指标的一些优点。
关于置信区间,我将链接SO post,因为回答问题的人都有创建置信区间的代码。您需要查看他在代码中创建的predict_mean_ci_low
和predict_mean_ci_high
。这两个变量将为您提供每次观察的置信区间,然后,您可以通过从预测中减去较低的CI或从较高CI减去预测来计算+/- Therms / kWh。