我在 3D 空间中有一组数据点,我想量化地确定是否可以忽略数据的 y 分量。我计算了 z = ax + b 的普通最小二乘和 z = ax + b*y + c 的普通最小二乘。我得到了我的 2D 图的 R^2 值和我的 3D 图的残差(误差平方和)。如何从 3D 图的残差值变为 R^2 值,与我的 2D 图的 R^2 值进行比较是否可以接受?
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)
谢谢!
杰森
编辑
这是答案:
E = np.squeeze(np.asarray(errors))
Z = np.array(zs)
r2 = 1 - (E.var() / Z.var())