时间序列残余学生的Numpy实施

时间:2018-04-15 12:29:39

标签: python numpy statistics outliers

我试图编写一个python函数来计算数据集的学生化残差。我试图遵循传统的等式:

R_student(i)= e(i)/(std(i)* sqrt(1-hi))

其中e(i)表示第i个数据的残差,std(i)表示没有第i个观测值的标准差的估计值,h(i)是矩阵中的第i个对角线元素ħ

X =

| 1 x1 |

| 1 x2 |

| 1 x3 |

| ....... |

| 1 xn |

H = X *(X ^ T * X)^ - 1 * X ^ T,

其中X ^ T是矩阵X的转置

但结果完全错了。我不知道自己做错了什么。我有以下输入/输出数据:

data = [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)

1 个答案:

答案 0 :(得分:0)

表达式:

data-data.mean()

不是残差in this context的正确定义。从矩阵H开始,您拟合了y=b0 + b1*x形式的线性模型。残差的正确含义是:

y - y_hat

其中y是来自数据和

的因变量的观察结果
y_hat = np.dot(H,y)

是拟合值。