如何在R中得到逆CDF(内核)?

如何在R中得到逆CDF(内核)?,r,R,R中是否有函数可以计算特定alpha(0,1)的逆核(我考虑的是正态)CDF。 我已经找到了分位数,但我不确定它是如何工作的 感谢我们可以积分得到cdf,我们可以使用根查找算法来反转cdf。首先,我们要对密度的输出进行插值 set.seed(10000) x <- rnorm(1000, 10, 13) pdf <- density(x) # Interpolate the density f <- approxfun(pdf$x, pdf$y, yleft=0, yrigh

R中是否有函数可以计算特定alpha(0,1)的逆核(我考虑的是正态)CDF。 我已经找到了分位数,但我不确定它是如何工作的


感谢

我们可以积分得到cdf,我们可以使用根查找算法来反转cdf。首先,我们要对密度的输出进行插值

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
}
set.seed(10000)

另一种方法是使用对数样条密度估计,而不是核密度估计。看看“logspline”包。通过对数样条密度估计,可以得到CDF(
plogspline
)和逆CDF(
qlogspline
)函数。

?qnorm
你在追求什么?你的意思是想要正态分布的分位数函数,
qnorm
@最近的邮件:啪!qnorm对核估计有效吗?我不知道我的数据的确切分布情况。假设我从N(0,1)模拟100个rv。我需要找到F^-1(alpha),其中F是内核CDF。好像我以前见过这样的问题。做过任何搜索吗?您在这里使用的CDF,是内核CDF吗?对于非常小的alpha值,如0.0001,它没有给出invcdf。是的,对于cdf(最小(x))和cdf(最大(x))之间的alpha值,需要修改此代码。我是R中的新手,它非常复杂。谢谢你的帮助。你能告诉我为什么我们需要插值密度吗?积分需要一个函数作为输入。密度的输出不是一个函数,所以我们需要使用approxfun从中生成一个函数。
med <- invcdf(.5)
cdf(med)
#[1] 0.5000007