如何使用python比较两个回归模型。在R中,能够使用anova(md1,md2)进行比较。但是在python中尝试使用sm.stats.anova_lm(md1,md2)显示AttributeError:'MixedLMResults'对象没有属性'ssr'
R示例:
md1 = lmer(A ~ B + (1|Z), data = df, REML = FALSE)
md2 = lmer(A ~ B + C + (1|Z), data = df, REML = FALSE)
anova(md1,md2)
python示例:
md1= smf.mixedlm("A ~ B", data=df ,groups=df["Z"]).fit(reml=False)
md2= smf.mixedlm("A ~ B + C", data=df ,groups=df["Z"]).fit(reml=False)
result = sm.stats.anova_lm(md1,md2)
RMSE和R平方:
md= smf.mixedlm("A ~ B", data=df ,groups=df["Z"]).fit(reml=False)
y= df["A"]
y_predict = md.fittedvalues
RMSE = np.sqrt((( y - y_predict)**2).values.mean())
Rsquared = 1.0 - (np.var( y - y_predict) / np.var(y))
print("\n")
print("RMSE: ", RMSE)
print("R-squared: ", Rsquared)
答案 0 :(得分:0)
如果您想使用RMSE和R平方进行比较,下面是示例代码来计算这些值。此代码段假定回归中的拟合参数名为“ fittedParameters”,从属数据名为“ yData”,独立数据名为“ xData”,ffitted函数的名称为“ func”:
import numpy
modelPredictions = func(xData, *fittedParameters)
error = modelPredictions - yData
SE = numpy.square(error) # squared errors
MSE = numpy.mean(SE) # mean squared errors
RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE
Rsquared = 1.0 - (numpy.var(error) / numpy.var(yData))
print()
print('RMSE:', RMSE)
print('R-squared:', Rsquared)