【问题标题】:Calculating standard deviation in with svyfgt (R)用 svyfgt (R) 计算标准差
【发布时间】:2022-01-02 01:07:09
【问题描述】:

我正在使用 R 中的 t 检验来测试在使用 FGT 贫困衡量指标(我使用传送包中的 svyfgt 函数。我通过为每个调查设计创建向量来运行 t 检验,其中包括均值、标准差和样本量,因此,我需要获得 svyfgt 均值的标准差。

在调查包中,有一个 svysd 函数,用于在应用复杂调查设计时计算标准差。这个值与简单地将SE乘以sqrt(n)得到的值有很大的不同,如下图:

library(survey)

wel <- c(68008.19, 128504.61,  21347.69,
             33272.95,  61828.96,  32764.44,
             92545.62,  58431.89,  95596.82,
             117734.27)
rmul <- c(16, 16, 16, 16, 16, 16, 16,
              20, 20, 20)
splin <- c(23149.64, 23149.64, 23149.64, 23149.64, 23149.64,
            21322.23, 21322.23, 21322.23, 21322.23, 21322.23)

survey.data <- data.frame(wel, rmul, splin)

survey_weighted <- svydesign(data = survey.data,
                             ids = ~wel, 
                             weights = ~rmul, 
                             nest = TRUE)

svymean(~wel, survey_weighted)

svysd(~wel, survey_weighted)
11498*sqrt(10)

在传送包中,没有等效的“svyfgtsd”函数,简单地将 SE 乘以 sqrt(n) 似乎会产生错误的答案(基于之前显示的 svysd 和该表达式之间的结果差异)。因此,我不确定如何获得 FGT_0_weighted 的标准偏差。是否有我不知道的功能,或者可能对我有帮助的统计概念?

library(convey)

fgtsurvey_weighted <- convey_prep(survey_weighted) 

FGT_0_weighted <- svyfgt(~wel, 
                         fgtsurvey_weighted,  
                         g=0, 
                         abs_thresh = survey.data$splin)
FGT_0_weighted

作为参考,我将像这样在 t-tests 中使用 sd 值(忽略 sd 值):

FGT_0_unweighted_vector <- c(rnorm(9710, mean = 0.28919, sd = sd_FGT_0))
FGT_0_cluster_vector <- c(rnorm(9710, mean = 0.33259, sd = sd_FGT_0_cluster))
t.test(FGT_0_cluster_vector, FGT_0_unweighted_vector, var.equal = FALSE)

【问题讨论】:

    标签: r survey standard-deviation standard-error


    【解决方案1】:

    当贫困线为绝对值时,FGT 是二元变量(贫困/非贫困)的平均值;即比例。二元变量的标准差sqrt( p*(1-p) )

    但是,您可能正在寻找标准误差(FGT 估计的抽样误差的度量),只需执行SE( FGT_0_weighted )。这就是 t 检验中使用的内容。

    考虑分层和聚类会改变标准误差估计,而加权也会影响平均值(以及所有点估计,如 FGT)。使用 t 检验检验均值估计值的变化对于比较加权和未加权估计值是否有意义。

    在复杂采样下使用sqrt(n) 会产生误导。通常的n 是所谓的名义样本量,但有效样本量通常小于那个(因为是集群抽样)。

    与您要做的事情相关的一个概念是设计效果,但尚未针对svyfgt 实现(尽管对于绝对阈值,您仍然可以使用svymean 获得它)。

    【讨论】:

    • 感谢您的详尽回答,您有关此主题的书一直是我当前项目中必不可少的参考。标准误差很容易在传达中检索,但是我的印象是,在使用 rnorm()(而不仅仅是引用数据)进行 t 检验时,我需要插入标准差(和 n,我现在知道是名义上的),例如:c(rnorm(n, mean = ?, sd = ?))。是否有使用 SE 的统计理由?作为参考,我在此页面上学习了如何以这种方式进行 t-test:datascienceplus.com/t-tests
    • 原来您使用的是标准误差:sd/sqrt(n) 是带放回的简单随机抽样下均值的标准误差。还有一点:svyfgt 取单一值作为绝对贫困线;那行不通。但这会:svymean(~I( wel &lt; splin ), survey_weighted )
    • 这很有见地,但我想澄清两点:(1)我认为使用S.E.*sqrt(n) 不起作用,因为“名义n”和“有效n”之间的差异。 [对于加权采样,svysd() 的结果不等于SE*sqrt(n)]。那么我应该如何在未加权和加权 FGT 之间建立 t 检验? (2) 您在评论中提供的svymean() 代码的结果等于每个svyfgt() 结果,尽管贫困阈值在各行之间不是恒定的。您说 svyfgt 不起作用是有原因的,还是我误解了?
    • @nate 您可能误解了datascienceplus.com/t-tests 中模拟示例的构造对于实际测试方法。要测试两个样本 ab 之间的差异,您可以使用t.test(a, b, ...) 或直接从平均值和标准误差计算 t 值。 Datascienceplus 使用虚构的标准差来构建具有rnorm 的虚构样本。要测试真实数据,您无需创建模拟样本,而是可以使用原始数据。
    • 通过使用相同的样本更改svydesign,您并没有更改样本设计:您正在更改估计量。样本设计是如何从有限总体中选择样本的方法。如果您将 SRS 估计器用于聚类样本,则您“错误地指定”了样本设计:您(通常)会得到错误的结果。这篇文章可能会有所帮助:onlinelibrary.wiley.com/doi/10.1111/j.1475-4991.1998.tb00254.x
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2017-11-04
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多