내가 주위를 파고되었다하고,이 것을 발견 입력 점과 비교 한 출력 kde 래스터 범위의 증가와 H 매개 변수 간의 일관된 관계. 이것이 왜 그런지는 모르겠지만 (구현이나 사물 뒤에있는 수학으로 인해), 모든 경우에 적용될 수는 없지만 일관되게 작동하기 때문에이를 전달합니다.즉, I (이 식 아닌 코드) 것을 발견
for (i in seq(1:10)){
pts = data.frame(x=rnorm(100,300000,2500),y=rnorm(100,4000000,2500))
rangePtsX <- diff(range(pts$x))
rangePtsY <- diff(range(pts$y))
H <- Hlscv(pts)
ras <- raster(kde(pts,H))
rangeRasX <- xmax(ras) - xmin(ras)
rangeRasY <- ymax(ras) - ymin(ras)
rangeDiffX <- rangeRasX - rangePtsX
rangeDiffY <- rangeRasY - rangePtsY
print(paste("rangeDiffX/hX:",rangeDiffX/sqrt(H[1,1]),"rangeDiffY/hY:",rangeDiffY/sqrt(H[2,2])))
}
이것의 출력은 :
[1] "rangeDiffX/hX: 7.37104456534156 rangeDiffY/hY: 7.37763153209006"
[1] "rangeDiffX/hX: 7.39015683159216 rangeDiffY/hY: 7.39151926375274"
[1] "rangeDiffX/hX: 7.39492769120192 rangeDiffY/hY: 7.39414077521017"
[1] "rangeDiffX/hX: 7.39909462708713 rangeDiffY/hY: 7.39917867776494"
[1] "rangeDiffX/hX: 7.39801448966617 rangeDiffY/hY: 7.39779576937998"
[1] "rangeDiffX/hX: 7.39679742756067 rangeDiffY/hY: 7.39745249174806"
[1] "rangeDiffX/hX: 7.39405975028797 rangeDiffY/hY: 7.39368126656615"
[1] "rangeDiffX/hX: 7.3913950522465 rangeDiffY/hY: 7.38980236385133"
[1] "rangeDiffX/hX: 7.39988585440102 rangeDiffY/hY: 7.39988850314936"
[1] "rangeDiffX/hX: 7.39529001635855 rangeDiffY/hY: 7.39475036015628"
거기에서
(range(coordinates(output)) - range(coordinates(input)))/H = ~7.4 for each dimension.
다음 코드를 고려 최적의 셀 수를 계산하는 함수를 작성하는 것이 간단했습니다.
gridSize <- function(pts,H,res){
sizeX <- (diff(range(pts[,1])) + (7.4 * sqrt(H[1,1])))/res
sizeY <- (diff(range(pts[,2])) + (7.4 * sqrt(H[2,2])))/res
c(sizeX,sizeY)
}
이뿐만 아니라 다른 선택기 작동합니다
for (hMethod in c("Hlscv","Hlscv.diag","Hscv","Hpi","Hpi.diag")){
for (i in seq(1:5)){
pts <- data.frame(x=rnorm(100,300000,2500),y=rnorm(100,4000000,2500))
ras <- raster(kde(pts,eval(call(hMethod,x=pts)),gridsize=gridSize(pts,H,30)))
print(paste("xres:",xres(ras),"yres:",yres(ras)))
}
}
가 생산 :
내가 원하는 30의 값에 가까운 결과를
[1] "xres: 29.8498137761045 yres: 29.8456700392426"
[1] "xres: 29.9573491524671 yres: 29.9874090657282"
[1] "xres: 29.968525344047 yres: 29.9580897162408"
[1] "xres: 29.9498803408057 yres: 29.964382664777"
[1] "xres: 29.9711108728299 yres: 29.9773401860409"
[1] "xres: 29.9950831714231 yres: 29.9658642153949"
[1] "xres: 29.9905564968586 yres: 29.982738272666"
[1] "xres: 29.9527729769381 yres: 29.9855591986985"
[1] "xres: 29.9786535322154 yres: 29.9594421322198"
[1] "xres: 29.9461263582666 yres: 29.9587155045891"
[1] "xres: 32.1494143184879 yres: 31.9656619568261"
[1] "xres: 31.3425525696929 yres: 31.7046601198584"
[1] "xres: 31.9515186102478 yres: 31.9042586036464"
[1] "xres: 31.5043829006183 yres: 30.0677630099221"
[1] "xres: 31.1816325999623 yres: 30.782974425409"
[1] "xres: 29.4406922338173 yres: 28.70952461795"
[1] "xres: 31.0945577583419 yres: 31.2995894646556"
[1] "xres: 29.3060327529272 yres: 29.4708662690499"
[1] "xres: 29.502732054192 yres: 29.3034911939017"
[1] "xres: 30.0529058397693 yres: 29.2893540247008"
[1] "xres: 27.7898933275596 yres: 29.1928490584976"
[1] "xres: 27.7628745096943 yres: 27.5794864810828"
[1] "xres: 28.9513504972817 yres: 29.7665791290592"
[1] "xres: 28.9569389967698 yres: 29.2103688932787"
[1] "xres: 28.6005579365073 yres: 29.3701912564357"
(고유 오류의 정수 선택에있다 kde의 그리드 셀). 좀 더 정확한 해상도를 원한다면 여기에서 래스터를 다시 샘플링/분해 할 수 있습니다.
'gridsize' (s)의 매개 변수를 얻기 위해'range'를 "resolution"으로 나눠 쓰지 않겠습니까? –
어쩌면 질문에 명확하지 않을 수도 있지만 명령이 실행될 때까지 범위를 알 수있는 방법이 없습니다. – blindjesse
데이터를 취하는 함수를 만들고, 범위를 계산 한 다음, 그 함수 내부에서'kde' 함수를 호출합니다. –