没有“1”或无限值,我仍然得到: 'vmmin' 中的初始值不是有限的
No "1" or infinite values and I still get: initial value in 'vmmin' is not finite
我正在尝试查找 Beta 分布的参数。
我的数值向量的范围 (myVector
) 是从 1 到 1.4。
写作
fitdistr(myVector, "beta", start=list(shape1=1/2, shape2=1/2))
总是returns
Error in stats::optim(x = c(1.11751038937534, 1.18870025337922, 1.02241252436603, : initial value in 'vmmin' is not finite
所以我创建了 myVector_2
,没有任何值等于 1,但是
fitdistr(myVector_2, "beta", start=list(shape1=1/2, shape2=1/2))
还是returns
Error in stats::optim(x = c(1.15007774000921, 1.01353198754175, 1.00201948705843, : initial value in 'vmmin' is not finite
所以,我尝试检查这些值是否有限,但是
is.finite(myVector_2)
returns全部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 ...
我搜索了几个小时,但 none 的建议解决方案似乎有效。
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 <- .0001; x3 <- (x2-rng[1]+eps)/(diff(rng)+2*eps)
之类的东西应该可以使其在 (0,1) 范围内。
我正在尝试查找 Beta 分布的参数。
我的数值向量的范围 (myVector
) 是从 1 到 1.4。
写作
fitdistr(myVector, "beta", start=list(shape1=1/2, shape2=1/2))
总是returns
Error in stats::optim(x = c(1.11751038937534, 1.18870025337922, 1.02241252436603, : initial value in 'vmmin' is not finite
所以我创建了 myVector_2
,没有任何值等于 1,但是
fitdistr(myVector_2, "beta", start=list(shape1=1/2, shape2=1/2))
还是returns
Error in stats::optim(x = c(1.15007774000921, 1.01353198754175, 1.00201948705843, : initial value in 'vmmin' is not finite
所以,我尝试检查这些值是否有限,但是
is.finite(myVector_2)
returns全部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 ...
我搜索了几个小时,但 none 的建议解决方案似乎有效。
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 <- .0001; x3 <- (x2-rng[1]+eps)/(diff(rng)+2*eps)
之类的东西应该可以使其在 (0,1) 范围内。