我在Stata遇到了问题。我有一个带有抽样权重和分层的调查数据集。通过首先设置调查设计(抽样权重和分层)然后使用前缀svy:total,可以非常容易地计算人口总数。但遗憾的是,由于忽略了调查设计,因此无法使用直方图绘制密度函数。有没有办法用调查数据轻松绘制人口总数的密度和分布函数?
答案 0 :(得分:0)
直方图, kdensity 和 cumul 命令都采用频率权重,必须为整数。采样权重的问题在于它们可以是非整数的。但是,您可以创建频率权重,该频率权重将是概率权重的倍数,并且精确度与任何所需精度一致。 (诀窍是由于Austin Nichols。)这将允许您使用上述命令。 唯一不可用的选项是直方图的频率选项。其他函数是均值,因此对原始权重的乘法不变。< / p>
在这个例子中,我使用了nhanes2b数据集。事实证明,所有权重都是整数,因此不需要转换技巧。
webuse nhanes2b, clear
/* Create frequency weight which
agrees with original weight to any degree of accuracy */
local k = 2
/* Match sampling weights to k = 2 decimal places:
e.g. sampling weight = 3.212 -> fwt =321 */
gen fwt = round(10^(`k')*finalwgt,1)
/* 1. Histogram */
histogram height [fw = fwt], percent width(10)
/* 2. Probability Density */
kdensity height [fw = fwt], bwidth(2)
/* 3. CDF */
cumul height [fw = fwt], gen(cum)
sort height cum
scatter cum height, c(J) ms(i)
编辑:带频率选项的直方图:
这使用未记录的命令twoway__histogram_gen
(http://www.stata-journal.com/sjpdf.html?articlenum=gr0014)。
twoway__histogram_gen height [fw = fwt], ///
freq width(10) gen(h x, replace)
replace h = round( h/10^`k')/10^6
format h %5.0f
twoway bar h x, ///
bstyle(histogram) barwidth(10) ///
ytitle("Frequency (Millions)")