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?

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 

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


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 :)


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).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.