R中的蒙特卡罗样本矩阵

时间:2014-04-23 13:54:15

标签: r montecarlo

我正在尝试从英国人口预​​测中随机抽取样本并将其存储在矩阵中。

目前,我正在使用以下代码

# 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行的矩阵 - 每行代表一年,每列代表随机选择的蒙特卡罗样本。

感谢您的帮助。

2 个答案:

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