2013-01-21 81 views
4

我正在处理数据文件,里面的观察值是随机值。在这种情况下,我不知道x的分布(我的观察)。我使用函数密度来估计密度,因为我必须应用核函数估计。未知累积函数的反函数

T=density(datafile[,1],bw=sj,kernel="epanechnikov") 

之后,我必须整合这一点,因为我正在寻找分位数(类似于VaR,95%)。 为此,我有两个选择:

ecdf() 
quantile() 

现在我有95位数的值,但是这是由内核估计的数据。

是否有一个函数可以用来了解原始数据的分位数95的值?

我此话,这是一个分布未知的,为了这个,我想想象一个非参数方法,牛顿一样,一个是在SAS solve()

回答

5

您可以使用quantile()这一点。下面是一个使用随机数据的例子:

> data<-runif(1000) 

> q<-quantile(data, .95) 
> q 
     95% 
0.9450324 

这里,数据在0和1之间均匀分布,所以第95百分位接近于0.95。

要执行逆变换:

> ecdf(data)(q) 
[1] 0.95 
+0

但位数会给我最后的估计数据值和我要找的原件。请记住,数据是由内核估计的。 'Estimated_data =密度(原件,BW = 8.7,内核= “epanechnikov”) 位数(Estimated_data,0.95)' 这会给我在Estimated_data累计95%的价值,而不是在“原”。 – Michelle

+0

@ user1970451:在我的例子中,'data'是指您的原始数据。 – NPE

+0

有数据反映原始数据,但分位数是通过'runif(1000)'计算出来的,而分位数0.95将接近95%,在这种情况下,谷值是0.94,但这个值对应于转换后的数据,我的问题是如果有一种方法可以找到这个的倒数,以获得0.94可能引用原始数据的值。 – Michelle