如何基于对数正态参数构造向量

时间:2017-05-09 02:14:50

标签: r broom

我有以下矢量:

foo <- c(1.376, 1.132, 0.828, 0.88, 1.124, 0.955, 1.292, 0.995, 1.207, 
1.076, 1.085, 1.061, 0.918, 1.097, 1.505, 1.141, 1.001, 0.927, 
1.339, 1.07, 1.332, 0.951, 0.969, 0.904, 0.89, 0.942, 1.141, 
0.798, 0.856, 0.819, 1.055, 1.262, 0.919, 1.024, 1.034, 1.088, 
1.183, 1.214, 1.159, 0.952, 0.912, 0.812, 0.985, 1.097, 0.948, 
1.168, 1.052, 0.922, 1.06, 0.741, 0.797, 0.952, 1.024, 1.858, 
1.073, 1.107, 0.853, 0.931, 0.732, 1.218, 1.09, 1.177, 0.931, 
1.105, 1.115, 1.221, 0.948, 1.146, 1.201, 1.16, 0.542, 1.067, 
1.056, 1.013, 0.986, 0.971, 1.125, 1.127, 0.971, 1.167, 1.148, 
1.074, 1.089, 1.001, 0.715, 0.945, 1.319, 1.15, 0.861, 0.733, 
0.783, 0.704, 1.176, 0.766, 1.466, 0.88, 0.873, 1.906, 1.584, 
1.076)

我可以得到以下参数:

> broom::tidy(MASS::fitdistr(foo,"lognormal"))
     term   estimate  std.error
1 meanlog 0.03062806 0.01947609
2   sdlog 0.19476092 0.01377168

我的问题是如何使用上述参数创建与bar长度相同的新向量(我们称之为foo)?

我试过这个(很可能是错误的):

> rnorm(foo,mean=log(0.03062806), sd=log(0.19476092 ))
  [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
 [39] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
 [77] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

1 个答案:

答案 0 :(得分:0)

我认为你需要做这样的事情:

rnorm(foo,mean=0.03062806,sd=0.01947609)

问题是你在rnorm的参数中使用log函数。

数学上如果您看到日志(0.01947609)是负数量(-3.938568),在文档中指定它将为sd&lt; 0并将返回NaN 我在下面给出了参考资料。

来自?rnorm的文档:

  

除了n之外的数字参数被循环到长度   结果。只使用逻辑参数的第一个元素。

  

对于sd = 0,这给出了限制,因为sd减小到0,点质量为   亩。 sd&lt; 0是错误并返回NaN。

输出命令的示例:

> rnorm(foo,mean=0.03062806,sd=0.01947609)
  [1]  0.032124378  0.042014230  0.045366499 -0.001474950
  [5]  0.061332938  0.008669682  0.019695857  0.042559250
  [9]  0.041862975 -0.010617882  0.067133856  0.016494814