Matlab中的滞后不平衡面板数据集

时间:2014-12-19 10:33:44

标签: matlab panel-data

我在Matlab中有一个不平衡的面板数据集,我需要滞后。使用plm包在R中使用不平衡的面板数据集非常容易。 Matlab中是否有类似的功能?这是一个玩具示例:

A = table(sort([repmat([1;2],4,1);repmat(3,3,1)]),[repmat((1994:1997).',2,1);(1995:1997).'],normrnd(100,1,11,1))

A = 

    Var1    Var2     Var3 
    ____    ____    ______

    1       1994    98.423
    1       1995    100.51
    1       1996    100.28
    1       1997    100.03
    2       1994    98.666
    2       1995    101.13
    2       1996    100.35
    2       1997    99.701
    3       1995    100.02
    3       1996    99.738
    3       1997     98.25

对于Var1的每个实例,我想延迟Var3的值一年。请注意,对于Var1 = 3,1994没有值。因此,我想要以下内容:

    Var1    Var2     Var3      Var4 
    ____    ____    ______    ______

    1       1994    98.423       NaN
    1       1995    100.51    98.423
    1       1996    100.28    100.51
    1       1997    100.03    100.28
    2       1994    98.666       NaN
    2       1995    101.13    98.666
    2       1996    100.35    101.13
    2       1997    99.701    100.35
    3       1995    100.02       NaN
    3       1996    99.738    100.02
    3       1997     98.25    99.738

在Matlab中有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我自己使用varfun找到了解决方案:

A = table(sort([repmat([1;2],4,1);repmat(3,3,1)]),[repmat((1994:1997).',2,1);(1995:1997).'],normrnd(100,1,11,1))

B = varfun(@(x)lagmatrix(x,1),A,'GroupingVariables','Var1')