2016-07-06 3 views
0

이중 루프를 만드는 방법을 알고 싶습니다. 내 코드에서 1000 샘플 (각 샘플 크기 : 25)에 다중 회귀를 수행합니다. 그런 다음, nullhypothesis를 사용하여 1000 개의 각 샘플에 대해 t 테스트 값을 만듭니다. sample = 'real'beta3 값의 beta3 값 . 나는 몬테카를로 시뮬레이션 (베타 3 = 회귀 계수의 세 번째 값)에서 '실제'베타 3 가치를 안다. 그러나 코드는 지금까지 작동합니다. 이제 샘플 크기 50, 100, 250, 500 및 1000 (각 샘플 크기는 1000 번)에 대해 동일한 절차를 수행하려고합니다. 루프로이 목표를 어떻게 실현할 수 있습니까? 네가 나를 도울 수 있다면 나는 기뻐할 것이다! 여기 내 코드를 볼 수 있습니다 :이중 루프를 만드는 방법은 무엇입니까?

n <- 25 
B <- 1000 
beta3 <- 1.01901 #'real' beta3 value 

t.test.values <- rep(NA, B) 
for(rep in 1:B){ 

##data generation 
    d1 <- runif(25, 0, 1) 
    d2 <- rnorm(25, 0, 1) 
    d3 <- rchisq(25, 1, ncp=0) 
    x1 <- (1 + d1) 
    x2 <- (3 * d1 + 0.6 * d2) 
    x3 <- (2 * d1 + 0.6 * d3) 
    exi <- rchisq(25, 5, ncp = 0) 
    y <- beta0 + beta1*x1 + beta2*x2 + beta3*x3 + exi 

## estimation 
    lmobj  <- lm(y ~ x1 + x2 + x3)   

## extraction 
    betaestim <- coefficients(lmobj)[2:4] 
    betavar <- vcov(lmobj)[2:4, 2:4] 

## t-test 
    t.test.values[rep] <- (betaestim[3] - beta3)/sqrt((betavar)[9]) 

    } 
+2

_Four months_ 06JUL16에 원래 질문을 게시하고 @bouncyball의 답변을 수락 한 후 17NOV16에서 Q를 대량 변경했습니다. 변경 사항을 취소하고 새 질문을 제출하십시오. – Uwe

답변

0

결과를 저장하는 데 data.frame을 사용할 수 있습니다. 또한 beta0, beta1 또는 beta2에 대한 값을 포함하지 않았으므로 그냥 자리 표시 자 값을 사용했습니다. 만큼 당신이 반복을 추적하기 위해 뭔가를 사용할 때 (내가 여기 iter을 사용했습니다)

n <- c(50,100,250,500,1000) #how big are our sample sizes? 
B <- 1000 
beta3 <- 1.01901 #'real' beta3 value 
#other beta values (note that these were not included in your question) 
beta1 <- 2 
beta2 <- 4 
beta0 <- 6 

iter <- 1 

#initialize our results data.frame 
result_df <- data.frame(sample_size = numeric(length(n) * B), 
         t.test.values = numeric(length(n) * B) 
         ) 

for(size in n){ 

for(rep in 1:B){ 

    ##data generation 
    d1 <- runif(size, 0, 1) 
    d2 <- rnorm(size, 0, 1)  
    d3 <- rchisq(size, 1, ncp=0)  
    x1 <- (1 + d1)  
    x2 <- (3 * d1 + 0.6 * d2)  
    x3 <- (2 * d1 + 0.6 * d3)  
    exi <- rchisq(size, 5, ncp = 0)  
    y <- beta0 + beta1*x1 + beta2*x2 + beta3*x3 + exi 

    ## estimation 
    lmobj  <- lm(y ~ x1 + x2 + x3)   

    ## extraction 
    betaestim <- coefficients(lmobj)[2:4] 
    betavar <- vcov(lmobj)[2:4, 2:4] 

    ## store our values 
    result_df[iter, 1] <- size 

    result_df[iter, 2] <- (betaestim[3] - beta3)/sqrt((betavar)[9]) 

    iter = iter + 1 #iterate 

    } 
} 

, 이중 for 루프도 나쁘지 않다. data.frame을 올바른 크기로 초기화하십시오. 더 많은 시뮬레이션을 수행하려는 경우 replicate 함수와 *apply 함수 클래스를 살펴 보는 것이 도움이 될 수 있습니다.

관련 문제