生成特定分布在R中的人口数据
我有一个人口的年龄分布 例如,您可以想象这样的情况: 60岁:25%生成特定分布在R中的人口数据,r,distribution,random-sample,population,R,Distribution,Random Sample,Population,我有一个人口的年龄分布 例如,您可以想象这样的情况: 60岁:25% 我没有数据中每个阶层/年龄组的平均值和标准差。我正在尝试生成一个1000人的样本群体,其中生成的数据与上面所示的年龄分布相匹配。让我们以一种更友好的格式来表达这些数据: (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
我没有数据中每个阶层/年龄组的平均值和标准差。我正在尝试生成一个1000人的样本群体,其中生成的数据与上面所示的年龄分布相匹配。让我们以一种更友好的格式来表达这些数据:
(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
(dat这并不能完全满足您的要求,但确实有助于切断电源。希望能有所帮助
install.packages("truncnorm")
library(truncnorm)
set.seed(123)
pop <- 1000
ages <- rtruncnorm(n=pop, a=0, b=100, mean=40, sd=25) # ---> You can set your own mean and sd
summary(ages)
install.packages(“truncnorm”)
图书馆(truncnorm)
种子集(123)
pop我想你应该计算出你的实验数据的分布,以便能够用这种分布生成随机数据。看看ecdf
base R函数来确定CDF。也许一种方法是为每个年龄段生成4个随机分布,然后将它们绑定在一个数据集中。
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
install.packages("truncnorm")
library(truncnorm)
set.seed(123)
pop <- 1000
ages <- rtruncnorm(n=pop, a=0, b=100, mean=40, sd=25) # ---> You can set your own mean and sd
summary(ages)