计算滚动中值绝对偏差

时间:2019-10-22 19:53:53

标签: stata

我正在尝试使用x的观察结果为每个id组计算变量20的滚动中位数绝对偏差(MAD)。

示例数据:

clear
set obs 100

generate id = _n
expand 100

generate x = rnormal()
bysort id: generate time = _n

我已经使用社区贡献命令rangestat计算出滚动观测的中位数:

rangestat (median)  x, by(id) interval(time -20 0)  // this works

然后,我尝试将 community-contributed 命令tsegenegen的函数mad()一起使用来计算滚动中位数绝对偏差:

xtset id time
tsegen mad_x = mad(L(0/20).x) // this does not work

但是,最后一条命令导致以下错误:

x__000001__000002__000003__000004__000005__000006__000007__000008__000009__00000A__00000B__00000C__00000D__00000E__00000F__00000G__00
> 000H__00000I__00000J__00000K invalid name
r(198);

如何将“使用20个观测值”的要求传递给mad()

交叉发布于Statalist

1 个答案:

答案 0 :(得分:1)

我的首选解决方案已发布在Statalist here上。

另一种解决方案是添加滞后变量并手动计算MAD:

xtset id time

rangestat (median) x (count) x, by(id) interval(time -20 -1)

/* Add lagged values */

forvalues i = 1 / 20 {
    generate double L`i'x = abs(L`i'.x - x_median)
}

/* Compute median of those /*

egen mad = rowmedian(L*x)