我正在使用R中的ks包来估算使用距离和深度信息的2d空间利用率。我想要做的是使用95%轮廓输出来获得最大的垂直和水平距离。基本上,我希望能够得到95%轮廓的尺寸或尺寸。
这是一段代码,作为一个例子,
require(ks)
dist<-c(1650,1300,3713,3718)
depth<-c(22,19.5,20.5,8.60)
dd<-data.frame(cbind(dist,depth))
## auto bandwidth selection
H.pi2<-Hpi(dd,binned=TRUE)*1
ddhat<-kde(dd,H=H.pi2)
plot(ddhat,cont=c(95),lwd=1.5,display="filled.contour2",col=c(NA,"palegreen"),
xlab="",ylab="",las=1,ann=F,bty="l",xaxs="i",yaxs="i",
xlim=c(0,max(dd[,1]+dd[,1]*0.4)),ylim=c(60,-3))
有关如何执行此操作的任何信息都将非常有用。提前谢谢,
答案 0 :(得分:1)
从'kde'对象创建95%轮廓多边形:
library(raster)
im.kde <- image2Grid (list(x = ddhat$eval.points[[1]], y = ddhat$eval.points[[2]], z = ddhat$estimate))
kr <- raster(im.kde)
在构建多边形之前,可能需要将此栅格重新采样到更高的分辨率,并在创建多边形对象之前包含以下两行:
new.rast <- raster(extent(im.kde),res = c(50,50))
kr <- resample(kr, new.rast)
bin.kr <- kr
bin.kr[bin.kr < contourLevels(k, prob = 0.05)]<-NA
bin.kr[bin.kr > 0]<-1
k.poly<-rasterToPolygons(bin.kr,dissolve=T)
请注意,结果与Hawthorne Beier的GME函数“kde”相似但不完全相同。他确实使用ks中的kde函数,但必须对输出多边形做一些稍微不同的事情。
答案 1 :(得分:0)
目前我正在寻找“任何信息”奖,而不是尝试最终答案。在这种情况下,ks:::plot.kde
函数会调度到ks:::plotkde.2d
。它通过副作用发挥其魔力,我无法使这些函数返回可在代码中检查的值。您需要破解plotkde.2d函数以返回用于绘制轮廓线的值。您可以通过以下方式可视化ddhat $ estimate中的内容:
persp(ddhat$estimate)
似乎contourLevels检查estimate
- 矩阵,并找到大于指定总密度百分比的值。
> contourLevels(ddhat, 0.95)
95%
1.891981e-05
然后根据哪个值超过该水平绘制轮廓。 (我还没有找到那样做的代码。)