我正在从自己创建的数据集中采样。这是一个两阶段的群集样本。但是,我似乎并没有明确指出我的设计(我想要的方式)。
我已经根据我从桑给巴尔的普查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下。
答案 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
的文档应该对此进行明确说明,但之所以不明确,大概是因为在编写函数时,将字符串默认转换为原始时间的因子。