2013-09-21 2 views
0

사용자 정의 함수로 얻은 추정치에서 부트 스트랩 신뢰 구간을 얻는 방법을 찾아야합니다. 이제, 문제는 제가 행을 무작위로 추출한 다음 필요한 양을 계산하는 하나의 큰 행렬을 가지고 있다는 것입니다.사용자 정의 부트 스트랩 신뢰 구간 R

여기 (희망) 재현성 예를이다

유사 랜덤 데이터 생성 :

mat1 <- matrix(rnorm(300, 80, 20), nrow = 100) 

함수 (R은 상관 행렬 인) 원하는 수량 계산하기 :

IIvar <- function(R) { 
d <- eigen(R)$values 
p <- length(d) 
sum((d-1)^2)/(p*(p-1))} 

내 함수 (여기서, omat는 mat1 행으로 구성된 작은 행렬이고, freq는 omat의 행 수이며, numR은 복제 수입니다).

ciint <- function(omat, mat1, freq, numR) { 
II <- IIvar(cor(omat)) 
n <- dim(mat1)[1] 
b <- numeric(numR) 
for (i in 1:numR) { b[i] <- IIvar(cor(mat1[sample(c(1:n),freq),]))} 
hist(b) 
abline(v = II, lty = 5, lwd = 3) 
return(b) } 

얻어진 벡터 B

는 OMAT (모집단의 구성원에 의해 선택된 행 행렬)로부터 IIvar와 비교 될 수 MAT1에서 (주파수에 의해 결정될 수) 무작위로 선택된 행의 행렬에서 얻은 모든 값을 가진다.

mat1에는 5 개의 모집단 (행별로 그룹화)이 있으며, 모두에 대해 IIvar를 개별적으로 계산하고 얻은 값에 대한 신뢰 구간을 생성해야합니다. 내가 값의 분포, 그리고 "진짜"IIvar 값의 위치를 ​​얻을이

ciint(omat, mat1, 61, 1000) 

처럼 내 ciint 기능을 실행할 수 있지만 때

I이 95 개 % 간격을 생성하는 방법을 몰라 포인트.

답변

1

생성 된 b 값의 95 %가 포함 된 간격 만 있으면됩니다. 베이지안 추정에서 가장 높은 사후 밀도를 얻을 수 있습니다. 예를 들어 함수 emp.hpd (TeachingDemos)과 같이 많은 패키지가 계산됩니다.

require(TeachingDemos) 

를 추가하고

emp.hpd(b) 

ciint에서 마지막 줄 (return(b))를 변경하지 않습니다 (return()를 사용 할 필요가 있습니다.)

+0

위대한 조언, 그것은 내가 필요한 것입니다. 그동안 나는이 [웹 사이트] (http://codealamode.blogspot.com/2013/08/bootstrap-confidence-interval-methods.html)에서 R 코드와 함께 다른 부트 스트랩 CI를 나열했습니다. 당신이 제안한 비슷한 것을하는 또 다른 패키지를 알고 있습니까? –

0

을 나는 당신이 달성하기 위해 노력하고있다 정확하게 확실하지 않다 귀하의 기능,하지만 만약 당신이 boot 패키지에서 boot 함수를 봐 boostrapping 할 싶어. 사용자 정의 함수를 boot에 전달할 수 있으며 부트 스트랩 샘플을 가져 와서 사용자 정의 함수에 전달한 다음 결과를 대조합니다. 또한 결과로부터 신뢰 구간에 대한 여러 옵션을 제공합니다.

+1

부트 패키지는 훌륭하지만 구문이 다소 혼란 스럽습니다. 더 큰 행렬에서 무작위로 부분 집합을 선택하고 필요한 것을 계산할 수 없었습니다. –

관련 문제