【问题标题】:How to estimate Residuals of Autoregressive Model AR(2)with missing data for dataframe in R如何估计 R 中数据帧缺失数据的自回归模型 AR(2) 的残差
【发布时间】:2016-01-08 18:12:42
【问题描述】:

我想估计/获取 AR(2) 模型的残差。作为残差=实际值-拟合值。我有一个巨大的数据框,有 4000 列(每列公司),时间序列。现在我想运行一个 AR(2) 模型并从中获取残差。这些列是每个公司的流动性度量。现在我需要转换为每个公司计算的流动性度量,以通过具有 2 个滞后的自动回归模型进行转换,因此,第一个自动相关性被删除。使用概述的 AR(2) 过程转换每个公司的流动性度量在下面的方程中,并使用残差进行后续分析。

其中,Ct i 是股票 i 在 t 月的流动性度量,x 是自回归过程中包含的滞后数,ut i 是股票 i 在 t 月的流动性残差。 我提供了我的一小部分数据如下。

 DATE         A     B   C       D   E   F
31/12/1999  79.5    NA  NA      6   NA  NA
03/01/2000  79.5    NA  NA      6   NA  NA
04/01/2000  79.5    NA  325     6   961 3081.9
05/01/2000  79.5    NA  322.5   6   945 2524.7
06/01/2000  79.5    NA  327.5   6   952 3272.3
07/01/2000  79.5    NA  327.5   6   941 2102.9
10/01/2000  79.5    7   327.5   6   946 2901.5
11/01/2000  79.5    7   327.5   6   888 9442.5
12/01/2000  79.5    7   331.5   6   870 7865.8
13/01/2000  79.5    7   334     6   853 7742.1

我从 stats 包中找到了如下代码。您能否帮助指定此代码,以便它为每一列(日期除外)运行并在滞后 2 时处理缺失值。

ar(x, aic = TRUE, order.max = NULL,
   method = c("yule-walker", "burg", "ols", "mle", "yw"),
   na.action, series, ...)

【问题讨论】:

    标签: r loops dataframe multiple-columns quantmod


    【解决方案1】:

    假设您的数据称为df,您可以为每一列添加 AR(2) 模型的残差,如下所示:

    df <- data.frame(df, apply(df[-1], 2, function(x) arima(x, order = c(2,0,0))$res))
    df
           Date   Company1   Company2   Company1.1    Company2.1
    1  Jan-2000 0.05365700 0.01821019 -0.036876374  0.0006985845
    2  Feb-2000 0.07201239 0.01680506 -0.001093970 -0.0005063298
    3  Mar-2000 0.08740745 0.01924687 -0.003796628  0.0017217050
    4  Apr-2000 0.10866274 0.01792439  0.010745400  0.0007815183
    5  May-2000 0.14189171 0.01848372  0.032286719  0.0014418422
    6  Jun-2000 0.15228030 0.01472494  0.023719800 -0.0024127538
    7  Jul-2000 0.10231285 0.01634404 -0.025709302 -0.0016760248
    8  Aug-2000 0.10838209 0.01919361  0.019162611  0.0009089139
    9  Sep-2000 0.08358543 0.01624093 -0.022191184 -0.0010003877
    10 Oct-2000 0.10907866 0.01768522  0.022780332  0.0001924767
    

    修改后的代码:

    df <- data.frame(df, apply(df[-1], 2, function(x) arima(x[!is.na(x)], order = c(2,0,0), method = "ML")$res))
    

    【讨论】:

    • 这会产生新的数据框吗?
    • 你想在数据框中包含什么?拟合值?
    • 我想在我的研究中使用每列(公司)的 AR(2) 的残差进行后续分析。
    • 如果这是一个蹩脚的问题,请原谅我。但如果是 AR (2),那么 Jan 和 Feb 不应该缺席吗?
    • 我认为第一个拟合值/残差是使用卡尔曼滤波器递归估计的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2018-12-07
    • 2017-10-03
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多