R中风险的交叉验证估计器

问题描述

我正在尝试使用交叉验证估算器的思想,仅给出由给出的风险的最后一列,以此给定的Data从文本中复制出图。

Image of Algorithm used

对于这个特定的例子,该估计量可以表示为

Meaning of terms

其中j(h)hat是估计的MSE,h是带宽,n是观测值的数量,x_i和x_j是有助于计算MSE的观测值的差异,K和K *均由以下两个正态分布定义和0(1 / n ^ 2)〜0,因此可以在代码中将其忽略。 我使用以下代码通过以下方式生成此估算器:

AstroData=read.table(paste0("http://www.stat.cmu.edu/%7Elarry","/all-of-nonpar/=data/galaxy.dat"),header=FALSE)
x=AstroData$V3
x_i=xsorted[1:1266]
n=length(x_i)
K=function (x_i){
  dnorm(x_i)}
Kstar=function (x_i){
  dnorm(x_i,sqrt(2))-2*dnorm(x_i)}
h=seq(0,.008,0.0005)
nh=length(h)
jh=rep(0,nh)
k=numeric(0)
for (k in 1:nh){
  sum=0
  for (j in 1:n){
    for (i in 1:n){
      sum=sum+Kstar((x_i[i]-x_i[j])/h[k])}}
  jh[k]=sum/(n^2*h[k])+2*K(0)/(n*h[k])}
plot(h,jh,type="p")

请注意,在公式中给出x_i [i]与x_i相同,并且x_i [j]与x_j相同时,我只是使用了不同的命名约定,当我能够找到错误。应用此代码时,我会遇到一些较大的图形差异。结果代码为我提供了这张图,

Wrong Result

实际上结果应该看起来像这个形状,

Expected outcome

这是对内核密度使用一种非参数方法,我正在尝试通过交叉验证而不使用任何程序包来找到最佳带宽,从上一幅图中我可以看到它应该在h = 0.002左右。 ,我无法弄清楚我的代码出了什么问题。

谢谢。

仅供参考:这可能需要一两分钟才能运行,具体取决于h值的定义方式。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)