为大值创建R中的米尔斯比率
我用R来创建一个函数,其中一个函数使用Mills Ratio(参见)。这不是一个复杂的公式,一开始我只是这样编程:为大值创建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 /
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)