优化错误(par = Tm1,fn = .logLgam,x = x):找不到对象 'Tm1'
Error in optim(par = Tm1, fn = .logLgam, x = x) : object 'Tm1' not found
我正在尝试 运行 R 中 nsRFA
库的 MSClaio2008
函数。根据文档,我已经成功 运行 网上给出的示例地点。但是,当我使用 MSClaio2008
函数将自己的数据集创建为 运行 时,如下所示:
library(nsRFA)
data <- c(91,84,42,30,66,95,65,12,27,61,31,101,48,52,53,55,80,23,87,46,50,33,75,88,54,17,57,39,10,89,59,24,11,43,13,93,105,28,104,18,103,62,22,58,15,34,74,51,97,44,99,76,14,16,109,92,110,40,78,83,60,49,96,36,32,81,68,20,56,25,63,47,37,29,100,71,106,41,90,70,85,38,19,108,73,102,26,82,98,45,77,35,94,79,86,72,107,21,67,69,64)
MSC <- MSClaio2008(data)
它抛出这个错误:
Error in optim(par = Tm1, fn = .logLgam, x = x) : object 'Tm1' not found
我在这个平台上搜索过话题,我找到了this但是没有解决我的问题
这个貌似是包的bug,不过跟你的数据怪怪的有关。这个函数应该是拟合分布以观察水文极端事件:你给它一个从 10 到 110 的整数序列。
事实证明,在计算某些可能分布(P3
和 GEV
,我认为)的拟合时,该函数在内部计算 偏度 的数据,并测试如果偏度为正 或 负该怎么做。它没有考虑偏度恰好为 0 的可能性!
里面 nsRFA:::ML_estimation
:
skx <- sum((x - mean(x))^3)/(length(x) * sd(x)^3)
if (skx > 0) {
Tm1 <- min(x) - 1
...
} else if (skx < 0) {
Tm1 <- max(x) + 1
...
}
如果偏度恰好为零,则不会设置变量 Tm1
,并且依赖于 Tm1
的下一步会中断。
如果您以某种方式扰乱数据,使偏度不完全为零,这应该可行,例如MSClaio2008(c(8,data))
或 MSClaio2008(data+rnorm(length(data), sd=0.001))
...
这是一个奇怪的案例,但值得联系维护者 (maintainer("nsRFA")
) 让他们知道。
我正在尝试 运行 R 中 nsRFA
库的 MSClaio2008
函数。根据文档,我已经成功 运行 网上给出的示例地点。但是,当我使用 MSClaio2008
函数将自己的数据集创建为 运行 时,如下所示:
library(nsRFA)
data <- c(91,84,42,30,66,95,65,12,27,61,31,101,48,52,53,55,80,23,87,46,50,33,75,88,54,17,57,39,10,89,59,24,11,43,13,93,105,28,104,18,103,62,22,58,15,34,74,51,97,44,99,76,14,16,109,92,110,40,78,83,60,49,96,36,32,81,68,20,56,25,63,47,37,29,100,71,106,41,90,70,85,38,19,108,73,102,26,82,98,45,77,35,94,79,86,72,107,21,67,69,64)
MSC <- MSClaio2008(data)
它抛出这个错误:
Error in optim(par = Tm1, fn = .logLgam, x = x) : object 'Tm1' not found
我在这个平台上搜索过话题,我找到了this但是没有解决我的问题
这个貌似是包的bug,不过跟你的数据怪怪的有关。这个函数应该是拟合分布以观察水文极端事件:你给它一个从 10 到 110 的整数序列。
事实证明,在计算某些可能分布(P3
和 GEV
,我认为)的拟合时,该函数在内部计算 偏度 的数据,并测试如果偏度为正 或 负该怎么做。它没有考虑偏度恰好为 0 的可能性!
里面 nsRFA:::ML_estimation
:
skx <- sum((x - mean(x))^3)/(length(x) * sd(x)^3)
if (skx > 0) {
Tm1 <- min(x) - 1
...
} else if (skx < 0) {
Tm1 <- max(x) + 1
...
}
如果偏度恰好为零,则不会设置变量 Tm1
,并且依赖于 Tm1
的下一步会中断。
如果您以某种方式扰乱数据,使偏度不完全为零,这应该可行,例如MSClaio2008(c(8,data))
或 MSClaio2008(data+rnorm(length(data), sd=0.001))
...
这是一个奇怪的案例,但值得联系维护者 (maintainer("nsRFA")
) 让他们知道。