Получить значение R^2 из scipy.linalg.lstsq

У меня есть встроенный 3D-набор данных, используя scipy.linalg.lstsq функция.
Я использовал:

# best-fit quadratic curve    
A = np.c_[np.ones(data.shape[0]), data[:,:2], np.prod(data[:,:2], axis=1), data[:,:2]**2]    
C,_,_,_ = scipy.linalg.lstsq(A, data[:,2])    
#evaluating on grid      
Z = np.dot(np.c_[np.ones(XX.shape), XX, YY, XX*YY, XX**2, YY**2], C).reshape(X.shape)

Но как я могу получить значение R^2 из этого для подогнанной поверхности.?
Можно ли как-нибудь проверить значимость результата подбора?

Любые идеи, связанные с этим, будут высоко оценены.
благодарю вас.

1 ответ

После http://en.wikipedia.org/wiki/Coefficient_of_determination:

B = data[:,2]

SStot = ((B - B.mean())**2).sum()
SSres = ((B - np.dot(A,C))**2).sum()
R2 = 1 - SSres / SStot

Как отмечено в статье в Википедии, R2 имеет много недостатков. Насколько мне известно, scipy/numpy плохо сравниваются с такими библиотеками, как statsmodels.

Если вы хотите запускать многовариантные регрессии, так как вам необходимо вычислить стандартные ошибки оценочного коэффициента после публикации, t-stats, p-значения и т. Д. И т. Д. И т. Д., Если вы хотите знать, что происходит в ваших данных.

Есть много постов, посвященных запуску OLS с Python, поэтому просто выберите один, например: http://www.datarobot.com/blog/ordinary-least-squares-in-python/

Другие вопросы по тегам