2015-06-25 101 views
0

我有一個人口年齡分佈。在R中生成具體分佈的人口數據

舉例來說,你能想象這樣的事情:

時代< 24:15%

時代25-49:40%

年齡50-60:20%

年齡> 60:25%

我沒有數據中每個階層/年齡組的平均值和標準偏差。我試圖生成1000個人的樣本人羣,其中生成的數據與上面顯示的年齡分佈相匹配。

+0

我想你會想出你的實驗數據的分佈,以便能夠用該分佈生成隨機數據。看看'ecdf'基本的R函數來確定一個CDF。 – masfenix

+0

也許一種方法是爲每個年齡段生成4個隨機分佈,然後將它們綁定在一個數據集中。 – SabDeM

回答

2

讓我們把這個數據更友好的格式:

set.seed(144) # For reproducibility 
rows <- sample(nrow(dat), 1000, replace=TRUE, prob=dat$prop) 
table(rows) 
# rows 
# 1 2 3 4 
# 139 425 198 238 

要品嚐你需要實際年齡:

(dat <- data.frame(min=c(0, 25, 50, 60), max=c(25, 50, 60, 100), prop=c(0.15, 0.40, 0.20, 0.25))) 
# min max prop 
# 1 0 25 0.15 
# 2 25 50 0.40 
# 3 50 60 0.20 
# 4 60 100 0.25 

我們可以使用樣本函數輕鬆品嚐1000行的表定義每行代表的年齡分佈。一個簡單的人會均勻分佈的年齡:

age <- round(dat$min[rows] + runif(1000) * (dat$max[rows] - dat$min[rows])) 
table(age) 
# age 
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
# 2 5 5 3 7 7 9 6 7 6 1 7 7 5 5 6 2 4 6 7 4 11 8 2 3 10 11 13 
# 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 
# 19 16 20 16 18 21 16 19 14 20 15 13 18 15 24 20 16 16 29 16 11 12 18 17 17 26 27 21 
# 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 
# 17 26 11 13 20 3 8 9 6 4 3 3 5 4 3 3 5 8 3 13 5 6 4 7 9 9 6 4 
# 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
# 5 5 9 9 5 6 8 9 5 4 6 5 9 6 8 4 1 

當然,如果在每個範圍均勻採樣歷來是在應用程序不恰當,那麼你就需要選擇一些其他的功能,以從水桶獲得青睞。