R 二项分布中概率计算时的NaN值
我想计算以下函数的积分R 二项分布中概率计算时的NaN值,r,R,我想计算以下函数的积分 riskFunction <- function(theta, n, r, s) { risk <- 0 for (j in 1:n) { risk <- risk + abs(theta - r * j - s) * dbinom(j, n, theta) } return(risk) } 出现50多个错误:在
riskFunction <- function(theta, n, r, s)
{
risk <- 0
for (j in 1:n)
{
risk <- risk + abs(theta - r * j - s) * dbinom(j, n, theta)
}
return(risk)
}
出现50多个错误:在dbinom(j,100,θ)中:NaN产生了
我不知道可能出了什么问题。如果有任何提示或提示,我将不胜感激。当
dbinom(x,size,prob,log=FALSE)
具有prob
外部[0,1]
时会出现警告。在您的例子中,theta=-0.01
之所以发生,是因为循环没有按预期运行
二进制运算符:
的优先级高于二进制运算符-
。因此,例如1:5-1
被评估为(1:5)-1
,而不是1:(5-1)
。你想要
trapeizodalMethod <- function(a, b, m, n, r, s)
{
intValue <- 0
h <- (b - a)/m
for (i in 0:(m-1)) {
# ^^^^^
intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
}
return(intValue)
}
trapeizodalMethod当dbinom(x,size,prob,log=FALSE)
具有prob
外部[0,1]
时出现警告。在您的例子中,theta=-0.01
之所以发生,是因为循环没有按预期运行
二进制运算符:
的优先级高于二进制运算符-
。因此,例如1:5-1
被评估为(1:5)-1
,而不是1:(5-1)
。你想要
trapeizodalMethod <- function(a, b, m, n, r, s)
{
intValue <- 0
h <- (b - a)/m
for (i in 0:(m-1)) {
# ^^^^^
intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
}
return(intValue)
}
trapeizodalMethod您的代码不完整:您没有向我们显示您传递给trapeizodalMethod
的参数。但是在任何情况下,risk函数
代码看起来都是错误的:它计算了大量j
值的risk
,但只保存最后一个值,没有任何返回值。@user2554330很抱歉,我修复了这些错误。但是它们只是打字错误。您的代码不完整:您没有向我们显示您传递给trapeizodalMethod
的参数。但是在任何情况下,risk函数
代码看起来都是错误的:它计算了大量j
值的risk
,但只保存最后一个值,没有任何返回值。@user2554330很抱歉,我修复了这些错误。然而,它们只是打字错误。
trapeizodalMethod <- function(a, b, m, n, r, s)
{
intValue <- 0
h <- (b - a)/m
for (i in 0:(m-1)) {
# ^^^^^
intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
}
return(intValue)
}