R中的地层采样

时间:2012-12-23 19:21:07

标签: r sampling

抱歉,我是这个节目的新手。我有一些问题,因为标题意味着,因为R给我以下错误,在阶层5中没有足够的obervations。我必须对坎帕尼亚(意大利)的五个省进行分层抽样,我有这样的数据:

dati1$Rip <- matrix(dati1$A3.factor, nrow=N, ncol=1)
dati1$A3.factor <- factor(dati1$A3, labels=c("Av","Bn","Ce","Na","Sa"))
dati1$A3.factor
[1] Sa Bn Sa Sa Sa Sa Sa Sa Sa Sa Sa Sa Av Sa Sa Bn Bn Bn Sa Bn Bn Bn Bn Bn Bn
[26] Bn Sa Bn Sa Bn Sa Bn Bn Na Av Bn Bn Av Sa Bn Bn Bn Sa Bn Bn Sa Sa Bn Bn Bn
[51] Av Bn Bn Bn Bn Sa Bn Sa Bn Bn Bn Sa Sa Na Sa Av Sa Bn Bn Bn Sa Sa Bn Sa Sa
[76] Sa Sa Na Bn Bn Bn Av Av Bn Bn Bn Bn Bn Bn Bn Bn Na Bn Bn Sa Bn Ce Na Ce Sa
Levels: Av Bn Ce Na Sa

问题在于,当我做

    library(sampling)
    N <- dim(dati1)[1]
    N
    a <- 0.05
    z_a <- qnorm(1-a/2)  
    error <- 0.20
    Vo <- error^2/z_a^2
    Vo  
    n <- ((Vo/p*(1-p)) + (1/N))^(-1)
    n <- round(n)
    n
    ripartizione <- factor(dati1$A3, labels=c("Av","Bn","Ce","Na","Sa"))
    Nh <- table(ripartizione)
    Nh
    f <- (n/N)*Nh 
    f
    nh <-round(f)
    nh

所以nh是

    Av Bn Ce Na Sa 
    3 25  1  2 17 

来自N:

    Av Bn Ce Na Sa 
    7 51  2  5 35 

为什么当我发出命令时:

        sample.strata <- strata(dati1,c("Rip"), size=c(3,25,1,2,17), "srswor", TRUE)
        sample.strata

R说

        error in strata(dati1, c("Rip"), size = c(3, 25, 1, 2, 17), "srswor",  : 
          not enough obervations in the stratum 5

我该怎么办?

1 个答案:

答案 0 :(得分:4)

help(strata)页面告诉您对data.frame进行排序。所以这成功了:

sample.strata <- strata(dati1[order(dati1$Rip),],c("Rip"), 
                               size=c(3,25,1,2,17), "srswor", TRUE)

将它作为一个矩阵当然会将一个因素转化为它的数字基础,所以如果你希望有一个有意义的标签,那么你就可以通过矩阵格式“射击自己”。

> table(sample.strata$Stratum)

 1  2  3  4  5 
 3 25  1  2 17