จะสร้างข้อมูลเด็ดขาดแบบสุ่มได้อย่างไร?


15

สมมติว่าฉันมีตัวแปรเด็ดขาดซึ่งสามารถรับค่า A, B, C และ D ฉันจะสร้างจุดข้อมูลและการควบคุม 10,000 จุดสำหรับแต่ละความถี่ได้อย่างไร ตัวอย่างเช่น:

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

ความคิดใดที่ฉันสามารถทำได้

คำตอบ:


35

คุณต้องการให้สัดส่วนในตัวอย่างตรงตามสัดส่วนที่ระบุหรือไม่ หรือเพื่อแสดงแนวคิดของการสุ่มตัวอย่างจากประชากรขนาดใหญ่มากที่มีสัดส่วนเหล่านั้น (ดังนั้นสัดส่วนตัวอย่างจะใกล้เคียงกัน แต่ไม่แน่นอน)

หากคุณต้องการสัดส่วนที่แน่นอนคุณสามารถทำตามคำแนะนำของแบรนดอนและใช้sampleฟังก์ชันR เพื่อสุ่มลำดับของเวกเตอร์ที่มีสัดส่วนที่แน่นอน

หากคุณต้องการตัวอย่างจากประชากร แต่ไม่ จำกัด สัดส่วนให้แน่นอนคุณยังสามารถใช้sampleฟังก์ชันใน R กับprobอาร์กิวเมนต์ดังนี้:

> 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

ใช้ R (http://cran.r-project.org/) สิ่งที่ฉันทำที่นี่คือการสร้างรายการสุ่มที่มีสัดส่วนที่คุณระบุ

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

/ ฉันรออย่างอดทนสำหรับการถกเถียงกันว่านี่คือการสุ่มอย่างแท้จริง


5
คุณสามารถย่อ / ขยายบรรทัดแรกของคุณให้สั้นลงx <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )และคุณไม่จำเป็นต้องระบุ 10,000 ในการโทรหาตัวอย่างซึ่งจะเป็นค่าเริ่มต้น (แม้ว่าจะไม่ได้ระบุชัดเจนก็ตาม)
เกร็กสโนว์

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

ฉันไม่สงสัยเลยว่านี่เป็นการสุ่มอย่างแท้จริง ฉันหมายถึงเท่าที่runif()เป็นแบบสุ่ม :)


4
หากความถี่ที่ต้องการนั้นมีความน่าจะเป็นจริง ๆ จะเป็นการง่ายกว่าที่จะใช้การprobโต้แย้งสำหรับsample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
caracal

ใช่มันน่ารักกว่ามาก ฉันเป็นเพียงกำลังดุร้าย
StasK

ฉัน upvoted จริงนี้เพราะมันแสดงวิธีการ sample(,prob=)ทำงาน (อย่างน้อยในโปแลนด์มันเรียกว่ารูเล็ตอัลกอริทึม)

2

หากคุณเป็นผู้ใช้ SAS เวอร์ชันล่าสุดให้ความสามารถคล้ายกันในการดึงสิ่งที่เรียกว่าการกระจาย "ตาราง" ซึ่งเป็นสิ่งที่คุณกำลังมองหาซึ่งเป็นส่วนหนึ่งของฟังก์ชั่น Rand () ดูhttp://support.sas.com/documentation/cdl/th/lrdict/64316/HTML/default/viewer.htm#a001466748.htm

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.