2012-12-27 111 views
0

假設我想模擬來自對數正態分佈的10個觀測值並重復這100次。我寫了一些R代碼,但由於某種原因,它不起作用。這裏是代碼:模擬來自對數正態分佈的數據R

for(i in 1:100) 
{ 

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

} 

有什麼想法?

+1

您在每次循環覆蓋'x'。你可能想看看'replicate(100,rlnorm(10,meanlog = 0,sdlog = 1))' –

+0

或者更簡單的說,'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))'。 – Dennis

回答

3

這可能工作:

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

編輯
計算平均值和SD使用:

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

而且還使原來的代碼工作(見迪文注)使用方法:

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

如何計算每10個觀察值的平均值和sd?謝謝! – user9292

+0

看我的編輯。注意你也可以在創建100次模擬之後,在第一次創建和提供函數(x)c(mean = mean(x),sd = sd(x))時使用'lapply'。 –