使用svydesgin,R调查包指定正确的模型时出错

时间:2019-01-17 15:23:44

标签: r survey

我正在从自己创建的数据集中采样。这是一个两阶段的群集样本。但是,我似乎并没有明确指出我的设计(我想要的方式)。

我已经根据我从桑给巴尔的普查EA数据中获得的信息创建了一个数据库。

数据包含2个区。第1区有32个子单元(称为Shehias),第2区有29个子单元。这61个shehias中的每一个都具有2到19个枚举区域(EA)。 EA本身包含51到129个家庭。

数据选择过程如下:包括所有(2)个地区和所有(61)个Shehias。在每个shehia中,随机选择2个EA。在每个选定的EA中,选择22/26户(取决于地区)。应该选择所有家庭成员。

因此,这是一个分为两个阶段的聚类过程。主要抽样单位(PSU)是EA,SSU是住户。两种选择都是随机的。

以下是所选数据的前六行,称为strategy_2:

    District_C Shehia_Code        EA_Code           HH_Number District_Numb District_Shehias Shehia_EAs HH_in_EA Prev_U3R3
    1          2        2_11 510201107001_1 510201107001_1_1165             1               29         19      115         0
    2          2        2_11 510201107001_1 510201107001_1_1165             1               29         19      115         0
    3          2        2_11 510201107001_1 510201107001_1_1165             1               29         19      115         0
    4          2        2_11 510201107001_1 510201107001_1_1165             1               29         19      115         0
    5          2        2_11 510201107001_1 510201107001_1_1165             1               29         19      115         0
    6          2        2_11 510201107001_1 510201107001_1_1173             1               29         19      115         1

如果我详细说明整个过程(包括实际上不是簇的东西),那么我的设计应该是:

    strategy_2_Design <- svydesign(id =  ~ District_C    + Shehia_Code      + EA_Code    + HH_Number,
                                    fpc = ~ District_Numb + District_Shehias + Shehia_EAs + HH_in_EA,
                                    data = strategy_2)

在这里,我定义了调查中的地区和地区数量,以及Shehias的地区和数量。在这两种情况下,样本pop =人口pop,因此每个阶段的权重贡献为1。第三和第四元素是实际采样单位。

此设计将给我一个正确的估计值(权重是正确的),但是该模型只有一个自由度(2个区域– 1个)。因此,当我尝试通过svyby计算Shehias的亚基的值时,它可以计算均值,但是如果我将svyciprop用作FUN,则置信区间为NA,因为自由度子集的0。

尝试将模型缩减到我真正使用的两个阶段是行不通的。即

    strategy_2_Alt_1 <- svydesign(id =  ~ EA_Code     + HH_Number,
                   fpc = ~ Shehia_EAs  + HH_in_EA,
                   data = strategy_2)

产量:

    record 1 stage 1 : popsize= 19  sampsize= 122
    Error in as.fpc(fpc, strata, ids, pps = pps) : 
    FPC implies >100% sampling in some strata

请注意,第19个PSU中的子单元(EA)数为19,所有样本的EA数为122(对于61个Shehias,每个为2,因此为122)。

一种解决方法是声称EA由Shehia分层。这将是:

    strategy_2_Alt_2 <- svydesign(id =  ~ EA_Code     + HH_Number,
                    fpc = ~ Shehia_EAs  + HH_in_EA,
                    strata = ~ Shehias_Cat + NULL,
                    data = strategy_2)

Shehias_Cat仅包含每个EA所在的Shehia的名称。这给出了具有(122,2916)个聚类的分层2级聚类采样设计。 权重与第一个设计(strategy_2_Design)中的权重相同:

    > identical(weights(strategy_2_Design),weights(strategy_2_Alt_2))
    [1] TRUE

因此,如果我使用手工权重计算平均值,我将得到相同的结果。但是,如果我尝试使用svymean进行此计算,则会收到错误消息:

    > svymean(~Prev_U3R3, strategy_2_Alt_2)
    Error in v.sub[[i]] : subscript out of bounds
    In addition: Warning message:
    In by.default(1:n, list(as.numeric(clusters[, 1])), function(index) { :
    NAs introduced by coercion

因此,我的问题是:1)这些错误来自何处; 2)如何正确定义模型?我一直在尝试以多种方式考虑这一点,但似乎并没有做到正确。

要解决此问题的数据和我的代码位于https://www.dropbox.com/sh/u1ajzxaxgue57r8/AAAkCfPC2YrwhEq6gbLsQmGQa?dl=0下。

1 个答案:

答案 0 :(得分:0)

我想你想要

strategy_2_SHORT_Design <- svydesign(id =     ~ factor(EA_Code)    + HH_Number,
                                  fpc =    ~ Shehia_EAs + HH_in_EA,
                                  strata = ~ Shehias_Cat,
                                  data = strategy_2)

该设计在EA内,由shehias定义的阶层内对家庭进行了抽样,EA的人口规模由Shehia_EAs给出,然后住户规模由HH_in_EA给出。在您的数据中,EA_Code是一个字符变量,但必须是数字或因子。

svydesign的文档应该对此进行明确说明,但之所以不明确,大概是因为在编写函数时,将字符串默认转换为原始时间的因子。