如何确定标准正态损失函数L(z)

时间:2014-04-29 13:08:47

标签: r normal-distribution

我有一个标准的普通分布表,有4列。其中一行看起来像这样:

z f01(z) F01(z) L(z)
2.42 0.0213 0.9922 0.0026

我知道我可以使用qnorm(0.9922)来获取z值(2.42),但现在我需要一个函数来获取基于z值的L(z) - 值。我可以使用什么功能来实现这一目标?

编辑:我正在寻找的L(z)实际上被称为标准正常损失函数。感谢@GavinKelly的提示。

2 个答案:

答案 0 :(得分:2)

如果你在谈论标准的正常损失函数,那么:

L <- function(x)  exp(-(x^2)/2)/(sqrt(2*pi)) - x*(1-pnorm(x))
L(2.42)

似乎与您的价值一致

答案 1 :(得分:2)

如果你给出L(。)的定义,我们可以很容易地帮助你。 好的,让我们相信Gavin Kelly的答案。

在那种情况下,

L0 <- function(x) exp(-(x^2)/2)/sqrt(2*pi) - x * (1 - pnorm(x))
L <- function(x) dnorm(x) - x * pnorm(x, lower.tail=FALSE)

在数值上更好,也适用于大x,其中L0遭受取消:

 > L(10)
 [1] 7.47456e-25
 > L0(10)
 [1] 7.694599e-23

由于OP进一步要求功能,@ Ben Bolker通过根发现显示标准解决方案,

 Linv <- function(y) uniroot(function(x) L(x) - y, interval=c(-10,10))$root
如果参数的长度为1,那么

在良好的情况下有效.OTOH,如果Linv本身应该 vectorize,如果你想要它并且L(.)也适用于边界情况,那么可以做一些技巧和加速。

---&GT;关于rpubs的好的扩展答案:http://rpubs.com/maechler/16436