【问题标题】:Error in optim(par = Tm1, fn = .logLgam, x = x) : object 'Tm1' not found优化错误(par = Tm1,fn = .logLgam,x = x):找不到对象“Tm1”
【发布时间】:2021-06-08 12:37:31
【问题描述】:

我正在尝试在 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)

它会抛出这个错误:

优化错误(par = Tm1,fn = .logLgam,x = x):找不到对象“Tm1”

我在这个平台上搜索过主题,我找到了this,但这并没有解决我的问题。

【问题讨论】:

  • 向我们展示所有代码。
  • 拜托,这就是我的代码工作的全部内容。就像他们在网站上给出的例子一样。

标签: r statistics


【解决方案1】:

这看起来像是包中的一个错误,但这与您的数据很奇怪的事实有关。这个函数据说是拟合水文极端观测的分布:你给它一个从 10 到 110 的整数序列。

事实证明,在计算某些可能分布的拟合(P3GEV,我认为)时,该函数在内部计算数据的 偏度,并具有测试如果偏度为正 负,该怎么办。它没有考虑偏度正好为 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")) 让他们知道。

【讨论】:

  • 非常感谢您的编辑和回复。你的回答对我有用,我有很多解释。但是我看到了一些奇怪的东西。我的数据长度是 101,当我把它减少到 100 时,它工作得很好。我不知道为什么,但它奏效了。
  • 因为您创建的数据集并非完全对称/未倾斜。
  • 如果这解决了您的问题,我们鼓励您点击复选标记接受它
猜你喜欢
  • 2013-11-18
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2018-06-28
  • 1970-01-01
相关资源
最近更新 更多