【问题标题】:Numpy Implementation of Residual Student for Time Series时间序列剩余学生的 Numpy 实现
【发布时间】: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


    【解决方案1】:

    表达式:

    data-data.mean()
    

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

    y - y_hat
    

    其中y 是从您的数据中观察到的因变量,并且

    y_hat = np.dot(H,y)
    

    是拟合值。

    【讨论】:

    • 您好,感谢您的回答。我尝试使用 y - np.dot(H, y) 来计算残差,但我无法达到预期的结果。我正在尝试复制论文中的结果:Improved time-variant fuzzy time series forecast。残差的 y - y.mean() 的定义来自博士论文,理论上可以从我引用的论文中得到结果。我尽一切努力尝试复制结果,但有些地方我做错了。
    • 嗯。那篇论文中有两个例子。你成功地让另一个例子工作了吗?如果是这样,可能有一个错误。不管怎样,也许你可以给作者发电子邮件,询问他们更多信息。
    • 另一个例子也不起作用。我会尝试给作者发电子邮件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2017-01-18
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多