Wie werden zufällige kategoriale Daten generiert?

14

Angenommen, ich habe eine kategoriale Variable, die die Werte A, B, C und D annehmen kann. Wie kann ich 10000 zufällige Datenpunkte generieren und deren Häufigkeit steuern? Beispielsweise:

A = 10% B = 20% C = 65% D = 5%

Irgendwelche Ideen, wie ich das machen kann?

user333
quelle

Antworten:

34

Möchten Sie, dass die Proportionen in der Stichprobe genau den angegebenen Proportionen entsprechen? oder um die Idee der Stichprobe aus einer sehr großen Population mit diesen Anteilen darzustellen (so dass die Stichprobenanteile nahe beieinander liegen, aber nicht genau sind)?

Wenn Sie die genauen Proportionen wünschen, können Sie Brandons Vorschlag folgen und die R- sampleFunktion verwenden, um die Reihenfolge eines Vektors mit den genauen Proportionen zufällig zu bestimmen.

Wenn Sie eine Stichprobe aus der Grundgesamtheit erstellen möchten, aber die Proportionen nicht genau einschränken möchten, können Sie die sampleFunktion in R weiterhin mit dem folgenden probArgument verwenden:

> x <- sample( LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
> prop.table(table(x))
x
     A      B      C      D 
0.0965 0.1972 0.6544 0.0519 
Greg Snow
quelle
6

Verwenden von R (http://cran.r-project.org/). Ich erstelle hier nur eine zufällige Liste mit den von Ihnen angegebenen Proportionen.

x <- c(rep("A",0.1*10000),rep("B",0.2*10000),rep("C",0.65*10000),rep("D",0.05*10000))
# cheating    
x <- sample(x, 10000) 


prop.table(summary(as.factor(x)))

/ me Wartet geduldig auf Streit darüber, wie zufällig dies ist

Brandon Bertelsen
quelle
5
Sie können Ihre erste Zeile auf kürzen / vereinfachen x <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )und müssen nicht 10000 im Aufruf zum Abtasten angeben. Dies wäre die Standardeinstellung (aus Gründen der Übersichtlichkeit schadet es jedoch nicht, sie anzugeben).
Greg Snow
3
    n <- 10000
    blah <- character(n)
    u <- runif(n)
    blah[u<=0.1] <- "A"
    blah[u>0.1 & u<=0.3] <- "B"
    blah[u>0.3 & u<=0.95] <- "C"
    blah[u>0.95] <- "D"
    table(blah)
    prop.table(summary(as.factor(blah)))

Ich habe keinen Zweifel, dass dies wirklich zufällig ist. Ich meine, soweit das runif()zufällig ist :)

StasK
quelle
4
Wenn die gewünschten Frequenzen wirklich Wahrscheinlichkeiten sind, wäre es einfacher, das probArgument zu verwenden für sample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
Caracal
Ja, das ist viel niedlicher. Meins ist nur eine rohe Kraft.
StasK
Ich habe dies tatsächlich positiv bewertet, weil es zeigt, wie das sample(,prob=)funktioniert (zumindest auf Polnisch heißt es Roulette-Algorithmus).