2017-12-04 3 views
2

나는 주어진 함수 (f (x)라고 부르 자)를 가지고 그것을 정규화하기 위해 Monte Carlo 방법을 사용했다. 나는 확률 밀도 함수를 계산했고 누적 분포 함수를 통합했다.R - 주어진 함수를 사용한 역 누적 분포 방법

f = function(x) ... 

plot(f,xlim = c(0, 5), ylim = c(0, 1),main="f(x)") 

mc.integral = function(f, n.iter = 1000, interval){ 
    x = runif(n.iter, interval[1], interval[2]) 
    y = f(x) 
    mean(y)*(interval[2] - interval[1]) 
} 

MC = mc.integral(f, interval = c(0, 8)) 
print(MC) 

densityFunction <- function(x){ 
    return ((f(x)/MC)) 
} 

distributionFunction <- function(x){ 
    return (integrate(densityFunction,0,x)$value) 
} 

vd <- Vectorize(distributionFunction) 
plot(vd,xlim = c(0, 8), ylim = c(0, 1),ylab = "y",main="E(f(x))") 

지금 내 옆에있는 작업은 역이 샘플을 생성하고 콜 모고 로프 - 스 미르 노프 테스트로 테스트하는 방법/역 누적 분포 방법을 변환 사용하는 것입니다,하지만 난 R.

에 어떻게해야할지 모르겠

제발 좀 도와 줄 수 있어요?

답변

1

음이 this thread 우리가 어떻게 역변환 방식 변환을 이용하여 샘플을 생성하기 위해 보여

sample <- list() 
for(i in 1:10){ 
    set.seed(i) 
    sample[[i]] <- vd(runif(1000)) 
} 

이후, 루프 ks.test 10 개 가지 무작위 샘플을 생성하기 때문에,

sample <- vd(runif(1000)) 

> head(sample) 
[1] 0.28737403 0.59295499 0.30814305 0.27998306 0.07601228 0.52753327 

으로 수행 될 수있다 목록 위에 :

lapply(sample, function(x) ks.test(x, pnorm)) 

wil 각 샘플에 대한 테스트의 출력 대 정규성을 제공합니다. 표준 편차에 대한 대부분의 테스트는 큰 차이가있는 큰 샘플 (참조 here)에서 중요한 경향이 있으므로 샘플의 크기를 현명하게 선택하십시오.

+0

고맙습니다. 저도 그 문제를 해결할 수 있다고 생각합니다. 그러나 정규 누적 분포는 CDF 나 PDF가 필요 없기 때문에 역 누적 분포 방법을 사용해야한다고 생각합니다. 이 경우 귀하의 단계에서 수정은 무엇입니까? – kr0tchy

+1

R에서 함수를 역변환하는 방법에 대한 설명은 [here] (https://stackoverflow.com/questions/10081479/solving-for-the-inverse-of-a-function-in-r)를 참조하십시오. 당신은 그것으로 그것을 해결할 수 있습니다. – LAP

+0

고맙습니다. – kr0tchy

관련 문제