【问题标题】:No "1" or infinite values and I still get: initial value in 'vmmin' is not finite没有“1”或无限值,我仍然得到:“vmmin”中的初始值不是有限的
【发布时间】:2020-01-29 20:27:39
【问题描述】:

我正在尝试查找 Beta 分布的参数。

我的数字向量的范围 (myVector) 是从 1 到 1.4。

写作

fitdistr(myVector, "beta", start=list(shape1=1/2, shape2=1/2))

它总是返回

统计错误::optim(x = c(1.11751038937534, 1.18870025337922, 1.02241252436603, : 'vmmin' 中的初始值不是有限的

所以我创建了myVector_2,没有任何值等于 1,但是

fitdistr(myVector_2, "beta", start=list(shape1=1/2, shape2=1/2))

仍然返回

统计错误::optim(x = c(1.15007774000921, 1.01353198754175, 1.00201948705843, : 'vmmin' 中的初始值不是有限的

所以,我试图检查这些值是否是有限的,但是

is.finite(myVector_2)

返回所有TRUE

这是有序myVector_2的开头:

[1] 1.010020 1.010051 1.010068 1.010070 1.010073 1.010076 1.010082 1.010115
[9] 1.010125 1.010168 1.010201 1.010204 1.010228 1.010236 1.010244 1.010267
[17] 1.010268 1.010296 1.010297 1.010307 1.010335 1.010343 1.010353 1.010356
[25] 1.010357 1.010402 1.010403 ...

我已经搜索了几个小时,但建议的解决方案似乎都不起作用。

【问题讨论】:

    标签: r distribution beta


    【解决方案1】:

    Beta 分布的范围为 (0,1),因此您的数据必须在此范围内。如果您知道范围是 1 到 1.4(边界上没有值),您可以轻松缩放数据以将它们变为 (0,1)。

    生成数据:

    set.seed(101)
    rng <- c(1,1.4)
    x1 <- rbeta(100,shape1=1/2,shape2=1/2)
    x2 <- (x1*diff(rng)) + rng[1]
    range(x2)
    ## [1] 1.000112 1.399849
    

    现在将数据缩放回 (0,1):

    x3 <- (x2-rng[1])/diff(rng)
    range(x3)
    ## [1] 0.0002793899 0.9996217487
    

    现在适合:

    MASS::fitdistr(x3,"beta",start=list(shape1=1,shape2=1))
    

    工作正常,尽管有警告。

    如果您的数据在 [1,1.4] 范围内(即包括末端),那么 eps &lt;- .0001; x3 &lt;- (x2-rng[1]+eps)/(diff(rng)+2*eps) 之类的内容应该可以使其在 (0,1) 范围内。

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2011-06-07
      相关资源
      最近更新 更多