2 Stimmen

Stratifizierte Stichproben - nicht genügend Beobachtungen

Was ich erreichen möchte, ist eine 10%ige Stichprobe aus jeder Gruppe (die eine Kombination aus 2 Faktoren ist - Häufigkeit und Häufigkeitskategorie). Bislang habe ich über ein Paket nachgedacht Probenahme und Funktion schichten() . Das sieht vielversprechend aus, aber ich erhalte die folgende Fehlermeldung und es ist wirklich schwer, die Fehlermeldung zu verstehen und was falsch ist oder wie man das Problem umgehen kann.

Hier ist mein Code:

> d[1:10,]
        date id_email_op recency frequecy r_cat f_cat
1  29.8.2011       19393     294        1     A     G
2  29.8.2011       19394     230        4     A     D
3  29.8.2011       19395     238       12     A     B
4  29.8.2011       19396     294        1     A     G
5  29.8.2011       19397     223        9     A     C
6  29.8.2011       19398     185        7     A     C
7  29.8.2011       19399     273        2     A     F
8  29.8.2011       19400      16        4     C     D
9  29.8.2011       19401     294        1     A     G
10 29.8.2011       19402       3        5     F     C
> table(d$f_cat,d$r_cat)

         A      B      C      D      E      F
  A    176    203    289    228    335    983
  B   1044    966   1072    633    742   1398
  C   6623   3606   3020   1339   1534   2509
  D   4316   1790   1239    529    586    880
  E   8431   2798   2005    767    817   1151
  F  22140   5432   3937   1415   1361   1868
  G 100373  18316  11872   3760   3453   4778
> as.vector(table(d$f_cat,d$r_cat))
 [1]    176   1044   6623   4316   8431  22140 100373    203    966   3606   1790   2798   5432
[14]  18316    289   1072   3020   1239   2005   3937  11872    228    633   1339    529    767
[27]   1415   3760    335    742   1534    586    817   1361   3453    983   1398   2509    880
[40]   1151   1868   4778
> s <- strata(d,c("f_cat","r_cat"),size=as.vector(ceiling(0.1 * table(d$f_cat,d$r_cat))), method="srswor")
Error in strata(d, c("f_cat", "r_cat"), size = as.vector(table(d$f_cat,  : 
  not enough obervations for the stratum 6

Ich kann nicht wirklich erkennen, was Schicht 6 ist. Was ist die Bedingung, die die Funktion im Hintergrund überprüft? Ich bin mir nicht sicher, ob ich den Größenparameter richtig eingestellt habe. Und ja, ich habe die Dokumentation des Stichprobenpakets geprüft :)

Danke an alle und

1voto

Brandon Bertelsen Punkte 42189

Sie können es jederzeit selbst tun:

stratified <- NULL
for(x in 1:6) {
  tmp1 <- sample(rownames(subset(d, r_cat == "A" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "A")*0.1))
  tmp2 <- sample(rownames(subset(d, r_cat == "B" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "B")*0.1))
  tmp3 <- sample(rownames(subset(d, r_cat == "C" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "C")*0.1))
  tmp4 <- sample(rownames(subset(d, r_cat == "D" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "D")*0.1))
  tmp5 <- sample(rownames(subset(d, r_cat == "E" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "E")*0.1))
  tmp6 <- sample(rownames(subset(d, r_cat == "F" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "F")*0.1))
  tmp7 <- sample(rownames(subset(d, r_cat == "G" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "G")*0.1))
  stratified <- c(stratified,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7)
}

Und dann...

d[stratified,] wäre Ihre geschichtete Stichprobe.

0voto

Timomtt Punkte 1

Problem gelöst! Bildbeschreibung hier eingeben

Dieser Satz "Der Stichprobenrahmen ist nach Regionen innerhalb des Staates geschichtet" hat mir geholfen! Wenn Sie mehr als eine Variable für die Schichtung verwenden, müssen Sie auf die "Reihenfolge" dieser Variablen achten, wenn Sie dem Argument "size=" verschiedene Größen zuweisen. Je mehr Schichten eine Variable hat, desto höhere Priorität hat sie, daher sollte diejenige, die die meisten Schichten hat, an erster Stelle der Liste stehen, wenn Sie "table()" verwenden.

Ich habe 10 Gruppen in GENDER und 2 Gruppen in age.group, also wird das nicht funktionieren.

 nnum <- as.vector(table(d.order$GENDER,d.order$age.group))

Aber das funktioniert

    d.order <- d.cut[order(d.cut$age.group,d.cut$GENDER),]
nnum <- as.vector(table(d.order$age.group, d.order$GENDER))
    n <- round(.05*nnum)
    testData <- strata(d.order, stratanames=c("age.group","GENDER"),size=n,method="srswor")

Ich empfehle Ihnen dringend, die Reihenfolge Ihrer Variablen im gesamten Skript entsprechend zu ändern, abgesehen von der Funktion table() oder ceilling(). Das hat mein Problem gelöst, hoffentlich löst es auch Ihres. :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X