좋아, 나는이 답변을 광범위하게 개정했다. 데이터를 비닝하고 각 빈의 수를 비교하는 것보다 2d 커널 밀도 추정치를 맞추고 비교하는 원래의 대답에 묻힌 제안이 훨씬 더 좋습니다. Tarn Duong의 ks 패키지 에는 R 처럼 kde.test () 함수 가 있습니다.
자세한 내용과 조정할 수있는 인수는 kde.test 문서를 확인하십시오. 그러나 기본적으로 그것은 당신이 원하는 것을 거의 정확하게 수행합니다. 이 값이 반환하는 p 값은 귀무 가설 하에서 동일한 분포에서 생성되었다는 두가 지 데이터 세트를 생성 할 확률입니다. 따라서 p- 값이 높을수록 A와 B 사이의 적합도는 더 좋아집니다. 아래의 예에서 B1과 A는 다르지만 B2와 A는 똑같습니다 (생성 방법). .
# generate some data that at least looks a bit similar
generate <- function(n, displ=1, perturb=1){
BV <- rnorm(n, 1*displ, 0.4*perturb)
UB <- -2*displ + BV + exp(rnorm(n,0,.3*perturb))
data.frame(BV, UB)
}
set.seed(100)
A <- generate(300)
B1 <- generate(500, 0.9, 1.2)
B2 <- generate(100, 1, 1)
AandB <- rbind(A,B1, B2)
AandB$type <- rep(c("A", "B1", "B2"), c(300,500,100))
# plot
p <- ggplot(AandB, aes(x=BV, y=UB)) + facet_grid(~type) +
geom_smooth() + scale_y_reverse() + theme_grey(9)
win.graph(7,3)
p +geom_point(size=.7)
> library(ks)
> kde.test(x1=as.matrix(A), x2=as.matrix(B1))$pvalue
[1] 2.213532e-05
> kde.test(x1=as.matrix(A), x2=as.matrix(B2))$pvalue
[1] 0.5769637
저의 제 원래의 대답은, 지금은 아무 의미가없는 다른 곳에서도 연결되어 있기 때문입니다.
첫째, 이것에 대해 다른 방법이있을 수 있습니다.
Justel 등 은 Kolmogorov-Smirnov의 적합도에 대한 다변량 확장을 제시했는데, 이는 귀하의 경우에 사용될 수 있다고 생각되며 각 모델링 된 데이터 세트가 원본에 얼마나 잘 맞는지 테스트합니다. 나는 이것의 구현을 찾을 수 없었지만 (예를 들어 R에서) 어려워 보이지 않을 수도 있습니다.
다른 방법으로 , 원본 데이터와 각 모델링 된 데이터 세트 모두에 copula 를 적용한 다음 해당 모델을 비교하여이를 수행 할 수 있습니다. R 및 기타 장소 에서이 접근법의 구현이 있지만 특히 익숙하지는 않으므로 시도하지 않았습니다.
그러나 귀하의 질문을 직접 해결하기 위해서는 귀하가 취한 접근법이 합리적입니다. 몇 가지 요점은 다음과 같습니다.
데이터 세트가 보이는 것보다 크지 않으면 100 x 100 그리드가 너무 많은 구간이라고 생각합니다. 직관적으로, 다양한 데이터 집합을 결론 짓는 것이 빈의 정밀도 때문에 비유 사적이라고 생각할 수 있습니다. 데이터 밀도가 높을 때에도 적은 수의 포인트를 가진 빈이 많이 있음을 의미합니다. 그러나 결국 이것은 판단의 문제입니다. 비닝에 대한 다양한 접근 방식으로 결과를 확실히 확인할 것입니다.
비닝을 마치고 데이터를 사실상 2 개의 열과 빈 수 (여기서는 10,000)와 같은 행 수를 갖는 비상 계산 테이블로 변환하면 두 열을 비교하는 표준 문제가 있습니다. 카운트. 카이 제곱 테스트 또는 일종의 Poisson 모델에 적합하지만 0 카운트가 많기 때문에 어색함이 있습니다. 이러한 모델 중 하나는 일반적으로 예상 카운트 수의 역으로 가중치를 적용하여 차이의 제곱합을 최소화하여 적합합니다. 이것이 0에 가까워지면 문제가 발생할 수 있습니다.
편집-이 답변의 나머지 부분은 더 이상 적절한 접근법이라고 생각하지 않습니다.
엔지× 2
엔지× 2엔지 는 전체 출력 함 수입니다. 테이블의 행 수로 인해 전체 계산이 실용적이지는 않지만 Monte Carlo 시뮬레이션을 사용하여 p- 값을 정확하게 추정 할 수 있습니다 (Fer 's 테스트의 R 구현은이를 테이블에 대한 옵션으로 제공함). 2 x 2보다 크고 다른 패키지도 마찬가지입니다. 이 p- 값은 모델 중 하나의 두 번째 데이터 집합이 원본을 통해 저장소를 통해 동일한 분포를 가질 확률입니다. 따라서 p- 값이 높을수록 적합도가 좋아집니다.
나는 약간의 데이터를 시뮬레이션하여 당신과 약간 비슷해 보 였으며이 접근법이 "A"와 동일한 프로세스에서 생성 된 "B"데이터 세트와 약간 다른 데이터를 식별하는 데 매우 효과적이라는 것을 알았습니다. 육안보다 확실히 더 효과적입니다.
- 이 방법을 사용하면 의 변수 독립성을 테스트 할 수 있습니다엔지× 2 비상 테이블, 그것은의 포인트 수가 음이 해당하지만 (B 형태와 상이하다는 문제가되지 않는 것이다원래 제안한대로 절대 차이 또는 제곱 차이의 합만 사용하는 경우 문제). 그러나 각 버전의 B는 서로 다른 수의 포인트를 갖습니다. 기본적으로 B 데이터 세트가 클수록 p- 값이 낮아지는 경향이 있습니다. 이 문제에 대한 몇 가지 가능한 해결책을 생각할 수 있습니다. 1. 크기보다 큰 모든 B 세트에서 해당 크기의 무작위 샘플을 가져 와서 모든 B 세트의 데이터를 동일한 크기 (B 세트 중 가장 작은 크기)로 줄일 수 있습니다. 2. 먼저 2 차원 커널 밀도 추정치를 각 B 세트에 맞추고 동일한 크기 인 추정치로부터 데이터를 시뮬레이션 할 수 있습니다. 3. 어떤 종류의 시뮬레이션을 사용하여 p- 값과 크기의 관계를 계산하고이를 "수정"하는 데 사용할 수 있습니다. 위의 절차에서 얻은 p- 값은 비슷합니다. 아마도 다른 대안들도있을 것입니다. 어떤 작업을 수행 할 것인지는 B 데이터 생성 방법, 크기가 어떻게 다른지 등에 따라 다릅니다.
희망이 도움이됩니다.