R中正态分布函数的反函数/逆函数

16

在R中绘制正态分布曲线,我们可以使用:

(x = seq(-4,4, length=100))
y = dnorm(x)
plot(x, y)

enter image description here

如果 dnorm 函数根据 x 计算 y,那么 R 是否有一种函数可以根据 y 计算 x?如果没有,最好的方法是什么?


你读过 pnorm 吗? - Jilber Urbina
也许我漏掉了什么,但是 pnorm(y) 并没有给出 x,因此 plot(pnorm(y), y) 并不能给出正态分布(实际上是一条直线)。 - geotheory
1
plot(pnorm(y), y) 显然不是一条直线。但是 plot(ppoints(y), y) 是直线。 - Hong Ooi
3
问题在于密度函数的反函数不是一个函数,因为它不是一对一的,但下面mrip的回答提供了尽可能接近您所要求的内容。 - Sam Dickson
并非所有的函数都是可逆的(参见https://en.wikipedia.org/wiki/Inverse_function#Inverses_and_derivatives),这是一个例子(它既不严格递增也不严格递减)。我认为@gung的答案在这里更有用。 - Juan
是的,这正是我想要的。谢谢大家。@hong-ooi - 我的意思是 plot(pnorm(y), y),其中 y = dnorm(seq(-4,4, length=100)) 是直的。对于相同的 y 向量,plot(ppoints(y), y) 实际上是正常的! - geotheory
3个回答

25
< p > dnorm() 是给你一个 概率密度函数。如果你在上面积分,那么你就会得到一个累积分布函数(在R中是由pnorm()给出的)。CDF的反函数由qnorm()给出;这就是统计学中这些事物被概念化的标准方式。


感谢您的澄清,gung。我不是统计学家,所以我的术语可能不太精确。 - geotheory

7

我不确定密度函数的反函数是否内置在其中 -- 它没有累积分布函数的反函数那么常用。我想不出太多需要使用反密度函数的情况。当然,这并不意味着没有任何情况需要使用它,因此如果您确定这是您需要的函数,您可以执行以下操作:

dnorminv<-function(y) sqrt(-2*log(sqrt(2*pi)*y))

plot(x, y)
points(dnorminv(y),y,pch=3)

enter image description here


谢谢mrip。我自己尝试过反转正态分布函数,但没有成功。 - geotheory
2
我无法内置,因为这个密度函数没有可能的反函数(参见wikipedia)。 - Juan
@Juan 嗯,正的反函数可以作为部分函数内置。CDF的反函数是内置的,从技术上讲它也不是一个函数,因为它只在[0,1]上定义。 - mrip
关于[0,1],你说得没错。它是一个函数,但不是一个真正的函数(我认为这是标准术语)。我猜更好的例子是函数“x ^ 2”,它在技术上不可逆,但“sqrt”函数是反函数的正分支。 - mrip
实际上,您的意思是这个函数仅适用于区间 [0,1/sqrt(2*pi)] 中的输入?因为似乎是这种情况。 - geotheory
显示剩余4条评论

3

标准正态分布概率密度函数的反函数导数如下:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接