有没有在R中可以计算特定alpha(0,1)下的逆核函数(我考虑正态分布)CDF的函数?我找到了quantile,但是不确定它如何工作。
谢谢。
谢谢。
我们可以整合以获取累积分布函数(cdf),然后可以使用根查找算法来反转cdf。首先,我们需要插值density
的输出。
set.seed(10000)
x <- rnorm(1000, 10, 13)
pdf <- density(x)
# Interpolate the density
f <- approxfun(pdf$x, pdf$y, yleft=0, yright=0)
# Get the cdf by numeric integration
cdf <- function(x){
integrate(f, -Inf, x)$value
}
# Use a root finding function to invert the cdf
invcdf <- function(q){
uniroot(function(x){cdf(x) - q}, range(x))$root
}
这提供了
med <- invcdf(.5)
cdf(med)
#[1] 0.5000007
这可以进一步改进。一个问题是我不能保证累积分布函数总是小于或等于1(如果你检查大于max(x)的值的累积分布函数,你可能会得到像1.00097这样的结果)。但我现在太累了,无法修复它。这应该会提供一个不错的开端。
另一种方法是使用对数样条密度估计而不是核密度估计。可以查看“logspline”软件包。使用对数样条密度估计,您将获得CDF(plogspline
)和反函数CDF(qlogspline
)函数。
?qnorm
? - thelatemailqnorm
吗?@thelatemail:咔嚓! - Ben Bolker