用python比较两个回归模型

时间:2019-08-14 05:16:40

标签: python regression

如何使用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)

1 个答案:

答案 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)
相关问题