У меня есть набор точек данных в трехмерном пространстве, и я хотел бы определить количественно, могу ли я игнорировать компонент y данных. Я вычислил обычные наименьшие квадраты для z = ax + b и обычные наименьшие квадраты для z = ax + b * y + c. Я получаю значение R ^ 2 для моего 2D-графика и остаток (сумма квадратов ошибок) для моего 3D-графика. Как перейти от значения остатка к R ^ 2 для трехмерного графика, и допустимо ли это сравнить с моим значением R ^ 2 для моего 2D-графика?
xs = array of x data
ys = array of y data
zs = array of z data
Для 2D:
slope, intercept, r_value, p_value, std_err = stats.linregress(xs, zs)
Для 3D:
tmp_A = []
tmp_b = []
for i in range(len(xs)):
tmp_A.append([xs[i], ys[i], 1])
tmp_b.append(zs[i])
b = np.matrix(tmp_b).T
A = np.matrix(tmp_A)
fit = (A.T * A).I * A.T * b
errors = b - A * fit
residual = np.linalg.norm(errors)
Спасибо!
Jason
Редактировать
Вот ответ:
E = np.squeeze(np.asarray(errors))
Z = np.array(zs)
r2 = 1 - (E.var() / Z.var())