草莓科研服务网——中国专业社科交流平台

 找回密码
 
建议用户用微信快捷登录

快捷登录

查看: 1010|回复: 2

一行代码计算变量移动平均数

[复制链接]
发表于 2022-8-4 08:32:41 | 显示全部楼层 |阅读模式
在时间序列或面板数据中,为了平滑曲线,或者出于其他研究目的,我们往往需要在模型中引入变量过去几期的均值。由此,也就引发了一个问题,我们该怎么计算变量的移动平均数呢?

一般来讲,我们可以通过 `foreach` 循环和 `n[]` 来实现,但这对于大部分 Stata 小白而言,未免要求过高。此时,`mvsumm` 命令就闪亮登场了。

这个命令由波士顿大学的 Baum 教授编写,可以很方便的计算时间序列数据 (面板数据也是广义上的时间序列) 的数字特征。

我们以数据集 `grunfeld.dta` 为例,对该命令进行讲解。

我们首先使用 `webuse` 调入该数据。

  1. webuse grunfeld, clear
复制代码
计算变量 `invest` 的滞后三阶的移动平均数。`stat` 是指要计算的统计量,`win` 是滞后阶数,`gen` 是生成一个新变量,`end` 是指,如果滞后阶数是奇数时,将滞后结果放于最后一阶 (例如说计算滞后三阶,则将结果放于第三阶;若不加 `end`,结果会放于第二阶)

  1. *- 滞后三阶移动平均
  2. mvsumm invest, stat(mean) win(3) gen(inv3yavg)

  3. mvsumm invest, stat(mean) win(3) gen(inv3yavgend) end
复制代码
下面是具体计算结果,`inv3yavg` 是未加入 `end` 时的结果,可以发现,均值位于第二阶;`inv3yav~d` 是放入 `end` 的结果,此时均值位于第三阶。我们一般都是放入第三阶。
  1.      +-------------------------------------------------+
  2.      | company   year   invest    inv3yavg   inv3yav~d |
  3.      |-------------------------------------------------|
  4.   1. |       1   1935    317.6           .           . |
  5.   2. |       1   1936    391.8   373.33333           . |
  6.   3. |       1   1937    410.6   353.36667   373.33333 |
  7.      +-------------------------------------------------+
复制代码
我们也可以使用 `mvsumm` 计算变量滞后阶数的标准差。

例如我们想计算 `invest` 滞后五阶的标准差,输入如下命令即可。

  1. *- 滞后五阶的标准差
  2. mvsumm invest, stat(sd) win(5) gen(inv5ysd) end
复制代码
那么,如果我们还需要计算中位数呢?也很简单,你只需要把 `stat` 中的 `sd` 换成 `median` 即可。
  1. *- 滞后五阶的中位数
  2. mvsumm mvalue, stat(median) win(5) gen(meddmval) end
复制代码
实际上,`mvsumm` 有着非常强大的功能,除了最为常见的均值、标准差和中位数之外,还可以计算协方差、峰度、偏度、最大值,最小值、分位数等,大家只需要将 `stat` 中的参数替换一下即可。以下是作者给出的详细功能。
  1.     one of           statistic
  2.     ------           ---------         
  3.     n N count        number of non-missing observations
  4.     sum              sum
  5.     sum_w            sum of weight
  6.     mean             mean
  7.     sd SD            standard deviation
  8.     Var var          variance
  9.     se SE semean     standard error of the mean
  10.     skew skewness    skewness
  11.     kurt kurtosis    kurtosis
  12.     min              minimum
  13.     max              maximum
  14.     p1               1st percentile
  15.     p5               5th percentile
  16.     p10              10th percentile
  17.     p25              25th percentile
  18.     p50 med median   50th percentile (median)
  19.     p75              75th percentile
  20.     p90              90th percentile
  21.     p95              95th percentile
  22.     p99              99th percentile
  23.     iqr IQR          interquartile range (p75 - p25)
  24.     range            range (max - min)
复制代码






发表于 2022-8-11 01:01:05 | 显示全部楼层
感谢楼主分享资料!
回复

使用道具 举报

发表于 2022-8-12 21:36:37 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

回帖奖励

[详情]

  • * 每天自己主题被回复3次可获得额外5论坛币奖励。
  • * 每天回复他人主题5次可获得额外8论坛币的奖励。
  • * 奖励每天都可领取,一定要多参与论坛讨论哦。
  • * 同一主题的重复回复不计。
  • 草莓科研服务网——中国专业社科交流平台 ( 津ICP备2023000499号 )|网站地图

    GMT+8, 2025-5-10 18:52 , Processed in 0.131470 second(s), 52 queries .

    Copyright © caomeikeyan

    快速回复 返回顶部 返回列表