私はシミュレーションの研究をしており、次のRコードを書いています。ループを2つ使用せずにこのコードを書いたり、より効率的にする(より速く実行する)方法はありますか?この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
機能のために使用される第二for
ループ内機能func1
(エラーをt分布している場合MLE見つけるために)。 Rでparallel
パッケージを使いたかったのですが、便利な機能が見つかりませんでした。
達成しようとしていることの説明を教えてもらえますか?すなわち、ループ**が何をしているべきか、出力が何を期待しているのでしょうか? – SymbolixAU
ループ内でfunc1を定義する理由は、パラメータとしてj、xを渡すのではなく、なぜなら – dww
'lineprof'が最も遅いステップを見つけるのに役立つかもしれません。 – mt1022