|
在时间序列或面板数据中,为了平滑曲线,或者出于其他研究目的,我们往往需要在模型中引入变量过去几期的均值。由此,也就引发了一个问题,我们该怎么计算变量的移动平均数呢?
一般来讲,我们可以通过 `foreach` 循环和 `n[]` 来实现,但这对于大部分 Stata 小白而言,未免要求过高。此时,`mvsumm` 命令就闪亮登场了。
这个命令由波士顿大学的 Baum 教授编写,可以很方便的计算时间序列数据 (面板数据也是广义上的时间序列) 的数字特征。
我们以数据集 `grunfeld.dta` 为例,对该命令进行讲解。
我们首先使用 `webuse` 调入该数据。
计算变量 `invest` 的滞后三阶的移动平均数。`stat` 是指要计算的统计量,`win` 是滞后阶数,`gen` 是生成一个新变量,`end` 是指,如果滞后阶数是奇数时,将滞后结果放于最后一阶 (例如说计算滞后三阶,则将结果放于第三阶;若不加 `end`,结果会放于第二阶)
- *- 滞后三阶移动平均
- mvsumm invest, stat(mean) win(3) gen(inv3yavg)
- mvsumm invest, stat(mean) win(3) gen(inv3yavgend) end
复制代码 下面是具体计算结果,`inv3yavg` 是未加入 `end` 时的结果,可以发现,均值位于第二阶;`inv3yav~d` 是放入 `end` 的结果,此时均值位于第三阶。我们一般都是放入第三阶。
- +-------------------------------------------------+
- | company year invest inv3yavg inv3yav~d |
- |-------------------------------------------------|
- 1. | 1 1935 317.6 . . |
- 2. | 1 1936 391.8 373.33333 . |
- 3. | 1 1937 410.6 353.36667 373.33333 |
- +-------------------------------------------------+
复制代码 我们也可以使用 `mvsumm` 计算变量滞后阶数的标准差。
例如我们想计算 `invest` 滞后五阶的标准差,输入如下命令即可。
- *- 滞后五阶的标准差
- mvsumm invest, stat(sd) win(5) gen(inv5ysd) end
复制代码 那么,如果我们还需要计算中位数呢?也很简单,你只需要把 `stat` 中的 `sd` 换成 `median` 即可。
- *- 滞后五阶的中位数
- mvsumm mvalue, stat(median) win(5) gen(meddmval) end
复制代码 实际上,`mvsumm` 有着非常强大的功能,除了最为常见的均值、标准差和中位数之外,还可以计算协方差、峰度、偏度、最大值,最小值、分位数等,大家只需要将 `stat` 中的参数替换一下即可。以下是作者给出的详细功能。
- one of statistic
- ------ ---------
- n N count number of non-missing observations
- sum sum
- sum_w sum of weight
- mean mean
- sd SD standard deviation
- Var var variance
- se SE semean standard error of the mean
- skew skewness skewness
- kurt kurtosis kurtosis
- min minimum
- max maximum
- p1 1st percentile
- p5 5th percentile
- p10 10th percentile
- p25 25th percentile
- p50 med median 50th percentile (median)
- p75 75th percentile
- p90 90th percentile
- p95 95th percentile
- p99 99th percentile
- iqr IQR interquartile range (p75 - p25)
- range range (max - min)
复制代码
|

|