2017-11-20 19 views
1

커널 밀도를 추정하여 경험적 확률 분포를 생성하는 데 사용하는 데이터 세트가 있습니다. 지금은 MASS 패키지의 R kde2d을 사용하고 있습니다. 확률 분포를 추정 한 후 x 축을 따라 2D 분포의 조각에서 표본 추출을 위해 sample을 사용합니다. 나는 here와 매우 비슷하게 sample을 사용합니다. 예제 코드이변수 기본 격자로 커널 밀도 추정기에서 시뮬레이트

library(MASS) 
set.seed(123) 
x = rnorm(100, 1, 0.1) 
set.seed(456) 
y = rnorm(100, 1, 0.5) 
den <- kde2d(x, y, n = 50, lims = c(-2, 2, -2, 2)) 
#to plot this 2d kde: 
#library(lattice) 
#persp(den) 
conditional_probabilty_density = list(x = den$y, y = den$z[40, ]) 
#to plot the slice: 
#plot(conditional_probabilty_density) 
simulated_sample = sample(conditional_probabilty_density$x, size = 10, replace = TRUE, prob = conditional_probabilty_density$y) 

den과 같을 것이다을 내 데이터가 잘 그리드 단위를 필요로 변동이 많은,이 알려진 영역이이

kde2d

것 같습니다. 다른 영역에는 기본적으로 데이터 포인트가 없으며 아무 것도 진행되지 않습니다. 나는 단지 n 파라미터 인 kde2d을 매우 높은 숫자로 설정하여 모든 곳에서 좋은 데이터를 얻을 수 있다면 좋을 것입니다. 아아, 메모리 제약으로 인해 불가능합니다.

그래서 내가 kde2d 함수를 수정하여 일정하지 않은 세밀도를 가질 수 있다고 생각한 것입니다.
Here은 kde2d 함수의 소스 코드입니다. 하나는 라인

gy <- seq.int(lims[3L], lims[4L], length.out = n[2L]) 

을 수정하고 y 축에달라고 무엇이든 단위 넣을 수 있습니다. 예를 지정된 위치에

a <- seq(-1, 0, 0.5) 
gy <- c(a, seq.int(0.1, 2, length.out = n[2L]-length(a))) 

그리고 수정 된 kde2d 반환 커널 밀도 추정하십시오. 아주 잘 작동합니다. 지금

kde2d_2

문제가, 난 더 이상 x 축을 따라 조각에서 샘플 sample을 사용할 수 있다고 가정하자. 분포의 왼쪽에있는 부분이 훨씬 더 세밀하므로 sample에 의해 샘플링 될 가능성이 더 높습니다.

필자가 필요로하는 적절한 눈금을 갖기 위해 할 수있는 일은 무엇입니까? 적절한 밀도에 따라 배포판에서 샘플링합니까? 정말 고마워.

답변

0

conditional_probabilty_densityapprox을 새 n과 함께 사용하십시오.