나는 시뮬레이션 연구를하고 있고 다음의 R 코드를 썼다. 두 개의 for
루프를 사용하지 않고이 코드를 작성하거나 더 효율적으로 (빠르게 실행) 만드시겠습니까?이 R 코드 (for 루프)를보다 효율적으로 만드는 방법은 무엇입니까?
S = 10000
n = 100
v = c(5,10,50,100)
beta0.mle = matrix(NA,S,length(v)) #creating 4 S by n NA matrix
beta1.mle = matrix(NA,S,length(v))
beta0.lse = matrix(NA,S,length(v))
beta1.lse = matrix(NA,S,length(v))
for (j in 1:length(v)){
for (i in 1:S){
set.seed(i)
beta0 = 50
beta1 = 10
x = rnorm(n)
e.t = rt(n,v[j])
y.t = e.t + beta0 + beta1*x
func1 = function(betas){
beta0 = betas[1]
beta1 = betas[2]
sum = sum(log(1+1/v[j]*(y.t-beta0-beta1*x)^2))
return((v[j]+1)/2*sum)
}
beta0.mle[i,j] = nlm(func1,c(1,1),iterlim = 1000)$estimate[1]
beta1.mle[i,j] = nlm(func1,c(1,1),iterlim = 1000)$estimate[2]
beta0.lse[i,j] = lm(y.t~x)$coef[1]
beta1.lse[i,j] = lm(y.t~x)$coef[2]
}
}
nlm
기능을 위해 사용되는 제 2 내부 루프 for
함수 func1
(t 오류가 분산 될 때 찾을 MLE). R에서 parallel
패키지를 사용하고 싶었지만 유용한 기능을 찾지 못했습니다.
달성하고자하는 것에 대한 설명을 제공 할 수 있습니까? 즉 루프 **가 수행해야하는 작업과 출력을 기대하는 작업은 무엇입니까? – SymbolixAU
루프 내에서 func1을 정의하는 이유는 무엇입니까? j, x를 매개 변수로 전달하지 마십시오. – dww
'lineprof'가 가장 느린 단계를 찾는 데 도움이 될 수 있습니다. – mt1022