我正在使用survey
软件包处理美国社区调查微观数据,并希望计算一些基本的收入不平等统计数据。我已经设置了以下内容作为我的设计:
testsurv <- svrepdesign(data=test, repweights = test[,8:87], weights = test$HHWT,
combined.weights=TRUE, type = "Fay", rho = 0.5,scale=4/80,
rscales = rep(1, 80), mse=TRUE)
据此,我想按年份计算基尼系数,以及按年份计算的收入分位数比率。使用svyby
和svyquantile
:可以直接生成分位数和相关错误
quants <- svyby(~INCOME, ~YEAR, testsurvey, svyquantile,
quantiles=c(0.9, 0.75, 0.5, 0.25, 0.1), keep.var=TRUE)
这就引出了我的第一个问题:如果我对每个分位数都有基于权重的重复误差,我如何计算收入分位数比率的标准误差(例如90/10)?我尝试使用svyratio
,但这是针对整个变量的比率,而不是针对变量中的选定观察。
第二个问题:有没有一种方法可以使用reldist
中的现有函数(如gini
)来计算survey
中的基尼系数(具有基于复制的误差)?我尝试使用withReplicates
,但效果不佳,可能是因为gini
将其参数排序为变量,然后是权重,但withReplicates
的指令指定了相反的顺序。我尝试了两种方法,但都不起作用。例如,其中HHWT是样本权重:
> withReplicates(testsurv, gini(~HHWT, ~INCOME))
这会产生以下错误消息:
Error in sum(weights) : invalid 'type' (language) of argument
In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'language'
使用R传送包。这在CRAN上还不可用,但你可以用快速安装
devtools::install_github("djalmapessoa/convey")
对于第90个与第10个的比率,使用?svyqsr
函数并将alpha=
设置为0.1
,因为它默认为第80个和第20个
对于基尼系数,使用?svygini
函数
只要你有acs的重复加权调查设计,这两个都应该是直接的计算。请确保在svrepdesign
调用后立即使用convey_prep
函数!