Python lmfit - wie berechnet man R im Quadrat?

Dies mag eine dumme Frage sein, aber ich habe nirgendwo eine Antwort darauf gefundenlmfit Dokumentation. Meine Frage ist einfach: Wie erhalte ich R im Quadrat? (Ich weiß, ich kann es manuell mit berechnen1 - SS_res / SS_tot)

Update: Ich habe versucht, das Quadrat R selbst zu berechnen und es mit dem Quadrat R von zu vergleichenstatsmodels. Die Parameter sind in beiden Schätzungen gleich, R im Quadrat jedoch nicht.

Code:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage