【问题标题】:NA / NaN / Inf on call to an external function (arg 5)NA / NaN / Inf 调用外部函数 (arg 5)
【发布时间】:2021-04-28 07:40:31
【问题描述】:

我有以下问题,我正在生成随机值,当我运行语法时,我收到以下错误“NA / NaN / Inf in a call to an external function (arg 5)”但是当有基础中的文本(至少我读过),在这种情况下它不应该发生。

需要注意的是,Ars 命令指定了变量 x 的范围,即在区间 0

library(ars)

f<-function(x){ 
               125*log(.5+(.25*x))+34*log(x)+38*log(1-x) +72*log(.25)
}


fprima<-function(x){ 
                    (125/(.2+.25*x))+(34/x)-(38/(1-x)) 
                    }


theta<-ars(n=10000,f,fprima,lb=TRUE,ub=TRUE,xlb=0,xub=1)


theta

【问题讨论】:

  • 您的x 出现在分母中。你确保这些分母不会变成0吗?您的x 以对数形式出现。你确定对数的参数可以变成
  • 例如,如果x=0 指定了某种起始值,那么34/x 立即是Inf
  • @Roland 变量 x 如果有界
  • 但是您说“模拟值仅为零”。 x 中的“模拟值”是什么?如果是这样,@Roland 已经确定了问题所在。 ars 是否计算 x 的范围?如果是这样,那可能是一个问题,因为如果x 是“全零”,那么它的范围也是如此。我们需要清晰,而我们目前还没有。
  • @Limey Hi, x, x 函数的模拟值在 0 和 1 之间 (0

标签: r simulation


【解决方案1】:

message(x) 添加到f 以查看它传递的x 值。在您的原始代码中,您指定了一个起始值x = 0,并且无论指定的边界如何,它都会传递给f。如果您使用默认起始值​​(如代码的当前迭代),则相同。

如果你指定了一个合理的起始值,代码就会运行:

theta<-ars(n=10000,f,fprima,lb=TRUE,ub=TRUE,xlb=0,xub=1, m = 1, x = 0.5)

但是,您随后会收到以下内部错误:

Error in sobroutine sample_...
ifault= 5 

根据文档,这意味着“检测到非凹面”。

您的fprima 函数似乎不正确。根据文档,它应该是d/du log(f(u,...))。基于D(quote(125*log(.5+(.25*x))+34*log(x)+38*log(1-x) +72*log(.25)), "x"),我已经更正了这一点:

fprima<-function(x){ 
  125 * (0.25/(0.5 + (0.25 * x))) + 34 * (1/x) - 38 * (1/(1 - x))
}

这样,代码运行良好。

【讨论】:

  • 非常感谢!你是对的问题是我的一阶导数,我认为它表达了同样的东西,但似乎我错了。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多