0

我有以下向量:

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
4

1 回答 1

0

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

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

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

从数学上讲,如果您看到 log(0.01947609) 是负数 (-3.938568),在文档中指定它会在 sd < 0 的情况下给出 NaN,并返回 我在参考下方给出的 NaN。

从以下文档?rnorm

除 n 以外的数值参数被循环到结果的长度。仅使用逻辑参数的第一个元素。

对于 sd = 0,这给出了当 sd 减小到 0 时的极限,即 mu 处的点质量。sd < 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
于 2017-05-09T02:43:29.150 回答