我正在尝试从英国人口预测中随机抽取样本并将其存储在矩阵中。
目前,我正在使用以下代码
# Read in Data
Year = data.frame(2010, 2011, 2012, 2013, 2014)
Mean_ONS_Population_Growth = data.frame(0.0076, 0.0158, 0.0240, 0.0323, 0.0404)
SD_ONS_Population_Growth = data.frame(0.0003, 0.0015, 0.0029, 0.0045, 0.006193468)
MC_RUNS = 1000 # Specify number of runs
Projected_Population_Growth = array(0,dim=c(49,MC_RUNS,5)) # Specify number of runs
Projected_Population_Growth = rnorm(MC_RUNS,mean=Mean_ONS_Population_Growth,sd=SD_ONS_Population_Growth)
但是我收到了这个错误:
Error in rnorm(MC_RUNS, mean = Mean_ONS_Population_Growth, sd = SD_ONS_Population_Growth) :
invalid arguments
理想情况下,我想要一个1000列和5行的矩阵 - 每行代表一年,每列代表随机选择的蒙特卡罗样本。
感谢您的帮助。
答案 0 :(得分:1)
R中的函数rnorm
只能处理单变量分布。我不知道任何基础包,包括多变量分布的函数,但你可以查看cran。我个人更喜欢包mvtnorm。该软件包中包含的函数rmvnorm
基本上是rnorm
的多变量版本。虽然如果你想拥有独立的单变量分布,你可以这样做sapply
:
sapply(1:length(Mean_ONS_Population_Growth),
function(iMC) {
rnorm(MC_RUNS,
mean=as.numeric(Mean_ONS_Population_Growth[iMC]),
sd=as.numeric(SD_ONS_Population_Growth[iMC]))
}
)
您的代码遇到的一个问题是,rnorm
仅将数字作为参数。
class(Mean_ONS_Population_Growth[1])
[1] "data.frame"
H个, d
答案 1 :(得分:1)
mapply(rnorm,mean=Mean_ONS_Population_Growth,sd=SD_ONS_Population_Growth,MoreArgs=list(n=MC_RUNS))