【发布时间】:2018-09-25 06:49:45
【问题描述】:
我正在尝试编写一个 python 函数来计算数据集的学生化残差。我试图遵循传统的方程式:
R_student(i) = e(i)/(std(i)*sqrt(1-hi))
其中e(i)表示第i个数据的残差,std(i)表示没有第i个观测的标准差估计值,h(i)是矩阵中第i个对角元素H
X =
| 1 x1|
| 1 x2|
| 1 x3|
| .......|
| 1 xn|
H = X*(X^T * X)^-1 * X^T,
其中X^T是矩阵X的转置
但是结果是完全错误的。我不知道我做错了什么。我有以下输入/输出数据:
数据 = [26658, 29216, 30035, 30846, 29171, 21068, 28416, 25651, 22122, 26423、22467、23274]
我知道答案一定是[-1.3053, 0.1031, 0.6535, 1.2399, 0.7552, -2.6869, 0.9257, 0.0968, -1.0527, 0.8846, 0.4535, 0.1101]
到目前为止我写的代码:
z = np.ones((len(data), 2))
z[:,1] = data
H = np.dot(np.dot(z, inv(np.dot(z.T, z))), z.T)
deviations = [data[np.arange(len(data))!=i].std() for i in range(len(data))]
et = np.dot(data, H)
S = (deviations * np.sqrt(1 - np.diagonal(H)))
rst = (data-data.mean()) / S
rst = np.array(rst)
【问题讨论】:
标签: python numpy statistics outliers