使用forvalues的移动平均线 - Stata

时间:2017-03-09 11:40:23

标签: stata moving-average

我正在努力解决Cameron和Trivedi" Microeconometrics使用Stata"的问题。这个问题涉及一个横截面数据集,其中包含两个关键变量,年收入记录(lnearns)和年工作时数(小时)。

我正在努力解决问题的第2部分,但我会为上下文输入整个内容。

数据按x排序后的y的移动平均值是y在x上的非参数回归的简单情况。

  1. 按小时对数据进行排序。
  2. 使用第i个观察值yma_i = 1/25(从j = -12到j = 12的y_i + j之和)创建中心的15周期移动平均值。这是使用命令forvalues最简单的方法。
  3. 使用twoway connected graph命令将此移动平均值绘制为小时数。
  4. 我不确定用于横截面数据移动平均值的命令。我也不明白一期数据的移动平均数是多少。

    任何帮助都会很棒,请说明是否需要更多信息。 谢谢!

    Edit1:

    应该可以从这里下载数据集https://www.dropbox.com/s/5d8qg5i8xdozv3j/mus02psid92m.dta?dl=0。它是来自收入动态小组研究的1992年个人水平数据的一小部分摘录 - 用于教科书。

    仍然习惯了语法,但这是我的尝试

    sort hours
    gen yma=0 
    1. forvalues i = 1/4290 {
    2. quietly replace yma = yma + (1/25)(lnearns[`i'-12] to lnearns[`i'+12]) 
    3. }
    

2 个答案:

答案 0 :(得分:1)

还有其他方法可以做到这一点,但我为每个滞后和线索创建了一个变量,然后取所有这些变量的总和,然后将原始值除以25,如下所示:

sort hours

// generate variables for the 12 leads and lags
forvalues i = 1/12 {
    gen lnearns_plus`i'  = lnearns[_n+`i']
    gen lnearns_minus`i' = lnearns[_n-`i']
}

// get the sum of the lnearns variables
egen yma = rowtotal(lnearns_* lnearns)

// get the number of nonmissing lnearns variables
egen count = rownonmiss(lnearns_* lnearns)

// get the average
replace yma = yma/count

// clean up
drop lnearns_* count

这为您提供了您正在寻找的变量(移动平均线),并且不会简单地除以25,因为您有许多缺失的观测值。

关于你所展示的问题,我的解释是它会显示每小时变量的当地平均值。如果您在x上的y和小时上绘制图表,那么由于存在大量变化,您会看到一些看起来很疯狂的东西,但如果您绘制移动平均线,那么趋势就更清楚了。

答案 1 :(得分:0)

事实上,这个数据集可以通过

读入合适的目录
net from http://www.stata-press.com/data/musr
net install musr
net get musr
u mus02psid92m, clear

这种平滑方法存在问题,因为sort hours在平滑响应的值方面没有唯一的结果。但是rangestat(SSC)可以实现具有类似精神的实现。

sort hours
gen counter = _n
rangestat (mean) mean=lnearns (count) n=lnearns, interval(counter -12 12)

还有许多其他方法可以顺利进行。一个是

gen binhours = round(hours, 50)
egen binmean = mean(lnearns), by(binhours)
scatter lnearns hours, ms(Oh) mc(gs8) || scatter binmean binhours , ms(+) mc(red)

更好的方法是使用lpoly