Python lmfit - como calcular R ao quadrado?
Esta pode ser uma pergunta estúpida, mas não encontrei uma resposta em nenhum lugarDocumentação de lmfit. Minha pergunta é simples: como recupero R ao quadrado? (Eu sei que posso calculá-lo manualmente com1 - SS_res / SS_tot
)
Atualização: tentei calcular R ao quadrado e comparei com o R ao quadrado destatsmodels
. Os parâmetros são os mesmos em ambas as estimativas, mas R ao quadrado não é.
Código:
from lmfit import minimize, Parameters
import numpy as np
import statsmodels.api as sm
import random
x = np.linspace(0, 15, 10)
x_ols = sm.add_constant(x)
y = [random.randint(0,15) for r in xrange(10)]
model = sm.OLS(y,x_ols)
results = model.fit()
print "OLS: ", format(results.params[0], '.5f'), format(results.params[1], '.5f'), "R^2: ", results.rsquared
# define objective function: returns the array to be minimized
def fcn2min(params, x, data):
a = params['a'].value
b = params['b'].value
model = a + b * x
return model - data
for i in range(0,1):
# create a set of Parameters
params = Parameters()
params.add('a', value= i)
params.add('b', value= 20)
# do fit, here with leastsq model
result = minimize(fcn2min, params, args=(x, y))
yhat = params['a'].value + params['b'].value * x
ybar = np.sum(y)/len(y)
ssreg = np.sum((yhat-ybar)**2) # or sum([ (yihat - ybar)**2 for yihat in yhat])
sstot = np.sum((y - ybar)**2) # or sum([ (yi - ybar)**2 for yi in y])
r2 = ssreg / sstot
print "lmfit: ", format(params['a'].value, '.5f'), format(params['b'].value, '.5f'), "R^2: ", r2