【问题标题】:Simulate data from lognormal in R在 R 中模拟来自对数正态的数据
【发布时间】:2012-12-12 11:20:53
【问题描述】:

假设我想从对数正态分布中模拟 10 次观察并重复 100 次。我写了一些 R 代码,但由于某种原因它不起作用。代码如下:

for(i in 1:100) 
 {

x = rlnorm(10, meanlog = 0, sdlog = 1)

 }

有什么想法吗?

【问题讨论】:

  • 您在循环的每次迭代中都覆盖了x。你可能想看看replicate(100, rlnorm(10, meanlog = 0, sdlog = 1))
  • 或更简单地说,x <- matrix(rlnorm(1000, m = 0, s = 1), nrow = 100)。然后用rowMeans(x)得到样本均值向量,用apply(m, 1, sd)得到标准差向量。如果你想让它们绑定在一起,DF <- data.frame(mean = rowMeans(x), sd = apply(m, 1, sd)).

标签: r simulation


【解决方案1】:

这可以工作:

lapply(1:100, function(i) rlnorm(10, meanlog = 0, sdlog = 1))

编辑
要计算平均值和标准差,请使用:

lapply(1:100, function(i) {
    x <- rlnorm(10, meanlog = 0, sdlog = 1)
    c(mean=mean(x), sd=sd(x))
})

或者以矩阵格式返回(使用do.call):

do.call(rbind, lapply(1:100, function(i) {
    x <- rlnorm(10, meanlog = 0, sdlog = 1)
    c(mean=mean(x), sd=sd(x))
}))

为了使您的原始代码正常工作(参见 DWin 的说明),请使用:

x <- list()
for(i in 1:100) {
    x[[i]] <- rlnorm(10, meanlog = 0, sdlog = 1)
}

【讨论】:

  • 如何计算每 10 个观测值的平均值和标准差?谢谢!
  • 查看我的编辑。请注意,您也可以在第一次创建时使用 lapply,并在创建 100 个模拟后为其提供 function(x) c(mean=mean(x), sd=sd(x))
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多