生成特定分布在R中的人口数据

生成特定分布在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

我有一个人口的年龄分布

例如,您可以想象这样的情况:

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