【问题标题】:Stata: density/distribution functions with survey dataStata:具有调查数据的密度/分布函数
【发布时间】:2015-11-14 07:28:23
【问题描述】:

我在 Stata 中遇到问题。我有一个带有抽样权重和分层的调查数据集。通过首先设置调查设计(抽样权重和分层)然后使用前缀 svy:total,可以很容易地计算人口总数。但不幸的是,无法使用直方图绘制密度函数,因为它忽略了调查设计。有没有什么方法可以用调查数据轻松绘制人口总数的密度和分布函数?

【问题讨论】:

  • 在 R 中,survey 包具有 ?svyplot 功能
  • 如果数据不是来自调查样本,请向我们展示您用来解决问题的 Stata 代码。
  • 例如:hist height。很简单。 hist 只能选择使用频率权重(只能使用整数),不能选择权重。
  • 谢谢。我猜您已将高度或其他变量分为几类;使用 svy total 来获取类别总计,并希望获得这些的直方图。这是正确的吗?如果通过“密度”,您的意思是“概率密度函数”,那么非调查Stata命令是kdensity。如果“分布函数”是指“累积分布函数”,则非调查命令为cumul。您是否也在尝试模拟这些命令?

标签: histogram distribution stata survey


【解决方案1】:

histogramkdensitycumul 命令都采用频率权重,必须是整数。抽样权重的问题在于它们可能是非整数的。但是,您可以创建频率权重,它将是概率权重的倍数,并且在精度上与任何所需的精度一致。 (诀窍归功于 Austin Nichols。)这将允许您使用上述命令。 唯一不可用的选项是 histogramfrequency 选项。 其他函数是均值,因此对于原始权重的乘法是不变的。

在本例中,我使用 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)")

【讨论】:

  • 谢谢。您对我的变量进行分类然后加权是绝对正确的。但有一个方面我不清楚。您是什么意思:“唯一不可用的选项将是直方图的频率选项”,因为您使用频率权重来创建直方图?
  • "frequency" 将显示加权的观察次数。这些将被用于创建频率权重的 10 的倍数所抵消:例如,当 k = 2 时,5,000 的概率加权计数将显示为 500,000。
  • 是的,值将是倍数,但值之间的关系将是相同的。我找到了 Heeringa、West 和 Berglund (2010) 提出的另一种解决方案,即简单地使用采样权重的整数部分:gen int_weight=int(weight)。尽管如此,我还是不完全理解为什么 Stata 不提供带有 pweights 的直方图......
  • 实际上,Heeringa 的解决方案会向下取整,这可能会导致权重较小时不准确。更好的是:gen fwt = round(weight),它四舍五入到最接近的整数,但这正是 Austin 对k =0 的解决方案。为了完整起见,我编辑了我的答案,以显示如何使用正确的标签来获得 histogram, freq 的乘法权重。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多