Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为大值创建R中的米尔斯比率_R_Math_Distribution_Normal Distribution - Fatal编程技术网

为大值创建R中的米尔斯比率

为大值创建R中的米尔斯比率,r,math,distribution,normal-distribution,R,Math,Distribution,Normal Distribution,我用R来创建一个函数,其中一个函数使用Mills Ratio(参见)。这不是一个复杂的公式,一开始我只是这样编程: mill <- function(x) { return((1 - pnorm(x)) / dnorm(x)) } mill=9),此函数返回零。更戏剧性的是,大约在x>=37时,它开始返回NaN,这真的把我的东西搞砸了 在本文之后,现在我将函数更改为: mill <- function(x) { if (x >= 9) { return(1 /

我用R来创建一个函数,其中一个函数使用Mills Ratio(参见)。这不是一个复杂的公式,一开始我只是这样编程:

mill <- function(x) {
  return((1 - pnorm(x)) / dnorm(x))
}
mill=9),此函数返回零。更戏剧性的是,大约在x>=37时,它开始返回NaN,这真的把我的东西搞砸了

在本文之后,现在我将函数更改为:

mill <- function(x) {
  if (x >= 9) {
    return(1 / x)
  } else {
    return((1 - pnorm(x)) / dnorm(x))
  }
}
mill=9){
返回(1/x)
}否则{
返回((1-pnorm(x))/dnorm(x))
}
}
这似乎奏效了。我用这个函数来计算一个向量,但是当我用模拟来寻找同一个向量时,我得到的答案或多或少都是一样的,只是总是有点偏离

我认为这与我的Mills Ratio实现有关,因为函数的其余部分只是指数,R应该不会有问题


我想问你们是否有办法解决这个问题:要么更好地实现这个函数,要么给我另一种方法来找到Mills比率(也许通过某种形式的集成,但我不会遇到同样的问题吗?)。非常感谢您提供的任何帮助

我将对您原来的
mill
功能进行两次更改

  • 1-pnorm(x)
    更改为
    pnorm(lower.tail=FALSE)
  • 使用
    log
    ,必要时取指数
  • 所以这给了

    new_mill = function(x) 
        pnorm(x, lower.tail=FALSE, log.p=TRUE) - dnorm(x, log=TRUE)
    
    所以

    使用绘图作为健全性检查

    x = seq(0, 10, 0.001)
    plot(x, exp(new_mill(x)), type="l")
    lines(x, mill(x), col=2)
    
    给予


    这完全解决了我的问题,我现在可以安全地计算x=500000000的函数。我现在明白了为什么他们在这些发行版中添加了log选项,这正是针对这些小值的,不是吗?非常感谢你!
    x = seq(0, 10, 0.001)
    plot(x, exp(new_mill(x)), type="l")
    lines(x, mill(x), col=2)