对于一个范围,我想确定分布变化发生在哪里以及该值在哪里是最大值。目前,我正在对范围内的每个值使用内核最大差异测试,并在该值之前和之后取 200 个值,然后提取 mmd 统计信息最大的位置。但这在 R 中计算的计算量非常大。请注意,我使用的是 kernlab 来计算 kmmd。我想知道是否有办法更快地做到这一点?或者如果您有任何建议。任何帮助,将不胜感激。
我的代码是:
cvg<-seq(1,2000)
cvg<-cvg^3-2*cvg^2+5*cvg
myRange<-seq(400:(length(cvg)-400))
kernel<-"splinedot"
cvg[201:(length(cvg)-200)]->cvg
myRange<-seq(400:(length(cvg)-400))
lapply(myRange, function(x) mmdstats(kmmd((as.matrix(cvg[(x+1):(x+400)])), (as.matrix(cvg[(x+801):(x+1200)])), kernel=kernel)))->kmm.ls
as.data.frame(as.matrix(kmm.ls))->kmm.ls
lapply(kmm.ls, function(x) which.max(mmdstats(x)))->store.max