我估计密度的cdf,长度为0.03,间隔为10k。虽然我的cdf非常流畅,但我对cdf的反转却根本不顺利。这里,长度1的间隔也用10k点评估。
请参阅:Estimated CDF& Estimated Inverse CDF
对于反向CDF,我使用:
x = seq(from = 0, to = 1, length = 10000)
F_hat_inv_given_x = function(y){
uniroot(function(x){
F_hat_given_x(x)-y
},interval=c(0.065, 0.095))$root
}
F_hat_inv_given_x = Vectorize(F_hat_inv_given_x)
将F_hat_given_x定义为:
F_hat_given_x = function(y) {
integrate(f = f_hat_given_x, min(y_data), y)$value
}
F_hat_given_x <- Vectorize(F_hat_given_x)
其中f_hat_given_x是我的密度:
f_hat_given_x = function(y){
tapply(y, x = x_sample, FUN = f_hat, INDEX = 1:length(y))
}
这是给定样本的条件密度f(y | X = x)X = x_sample:
f_hat = function(x, y){
(sum(K(abs(x-x_data)/H_n) * (K(abs(y-y_data)/h_n)))) / (h_n * sum(K(abs(x-x_data)/H_n)))
}
K是高斯核,h_n,H_n是通过npcdensbw计算的带宽,x_data和y_data是我给定的数据,我在其上评估条件密度f_hat(x,y)
任何想法为什么反函数不像单调那样单调递增应该?造成这种不准确的原因是什么?