Hello
I have a problem using the package survey:
I'm trying to calculate the prevalence of a disease in animals sampled using
a 2 stages sampling system:
first level: farm randomly chosen within 551 farms
second level: animals randomly chosen in the farms
My data base has this aspect:
num esp Quarters Totcat Totshp Totgt Tbtpos fpc1 Totanim Id_An
115 2045 G 01-Q1 1 1 12 0 551 14
115
116 2045 G 01-Q1 1 1 12 0 551 14
116
117 2045 G 01-Q1 1 1 12 0 551 14
117
118 2045 G 01-Q1 1 1 12 0 551 14
118
where "num" is the farm ID and where Id_An is the animal ID
R accept to design my sampling with the function svydesign
> clustot<-svydesign(id=~num+Id_An, fpc=~fpc1+Totanim, data=tab1)
> summary(clustot)
2 - level Cluster Sampling design
With (419, 11593) clusters.
svydesign(id = ~num + Id_An, fpc = ~fpc1 + Totanim, data = tab1)
Probabilities:
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.1086 0.3802 0.4986 0.4952 0.6145 0.7476
Population size (PSUs): 551
Data variables:
[1] "num" "esp" "Quarters"
"Totcat" "Totshp" "Totgt"
"Tbtpos" "fpc1" "Totanim" "Id_An"
but when I try to get some stat on it I obtain this error message
svymean(~Tbtpos,clustot,na.rm = TRUE)
Erreur dans switch(lonely.psu, certainty = scale * crossprod(x), remove = scale
* :
Stratum (1.629) has only one PSU at stage 2> svytotal(~Tbtpos, clustot)
Erreur dans switch(lonely.psu, certainty = scale * crossprod(x), remove = scale
* :
Stratum (1.629) has only one PSU at stage 2
and with options(error=recover) I obtain
svymean(~Tbtpos,clustot,na.rm = TRUE)
Erreur dans switch(lonely.psu, certainty = scale * crossprod(x), remove = scale
* :
Stratum (1.629) has only one PSU at stage 2
Enter a frame number, or 0 to exit
1: svymean(~Tbtpos, clustot, na.rm = TRUE)
2: svymean.survey.design2(~Tbtpos, clustot, na.rm = TRUE)
3: svyrecvar(x * pweights/psum, design$cluster, design$strata, design$fpc,
postStrata = design$postStrata)
4: multistage(x, clusters, stratas, fpcs$sampsize, fpcs$popsize, lonely.psu =
getOption("survey.lonely.psu"), one.stage = one.stage, stage = 1, cal
= cal)
5: by(1:n, list(as.numeric(clusters[, 1])), function(index) {
6: by.default(1:n, list(as.numeric(clusters[, 1])), function(index) {
7: by(as.data.frame(data), INDICES, FUN, ...)
8: by.data.frame(as.data.frame(data), INDICES, FUN, ...)
9: eval(substitute(tapply(1:nd, IND, FUNx)), data)
10: eval(expr, envir, enclos)
11: tapply(1:11593, list(c(2045, 2046, 2070, 2070, 2070, 2071, 2230, 2280, 2304,
2045, 2045, 2045, 2045, 2045, 2045, 2046, 2046, 2046, 2046, 2046, 2046, 20
12: lapply(split(X, group), FUN, ...)
13: FUN(X[[23]], ...)
14: FUN(data[x, ], ...)
15: multistage(x[index, , drop = FALSE], clusters[index, -1, drop = FALSE],
stratas[index, -1, drop = FALSE], nPSUs[index, -1, drop = FALSE], fpcs[index, -
16: onestage(x, stratas[, 1], clusters[, 1], nPSUs[, 1], fpcs[, 1], lonely.psu =
lonely.psu, stage = stage, cal = cal)
17: tapply(1:NROW(x), list(factor(strata)), function(index) {
18: lapply(split(X, group), FUN, ...)
19: FUN(X[[1]], ...)
20: onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1],
fpc[index][1], lonely.psu = lonely.psu, stratum = strata[index][1], stage =
stage,
21: switch(lonely.psu, certainty = scale * crossprod(x), remove = scale *
crossprod(x), adjust = scale * crossprod(x), average = NA * crossprod(x), fail =
I don't understand the error message and I don't know how to ask R to
give me the stratum which has a problem or the problematic stage either ...???
Thanks in advance
AHOUSSOU Sylvie
Vétérinaire Epidémiologiste
CIRAD Domaine Duclos
97 170 Petit-Bourg
tel : 05 90 25 59 47
[[alternative HTML version deleted]]