2011-07-04 9 views
-1

私のループ機能を修正するのを手伝ってもらえますか?ループを最適化してR:ループコードを調整するのを手伝ってください

私は、al_jを推定するのに最適です。 au_j; sigma_j; 0〜20,21〜40,41〜60のデータ点を見て、b_jを計算します。

最終結果は、21〜40、20への推定値の各々の4列と0のそれぞれの4行を有していなければならない41

60に私のコードは次のとおり

n=20 
runs=4 
out=matrix(0,nrow=runs) 

llik = function(x) 
{ 
    al_j=x[1]; au_j=x[2]; sigma_j=x[3]; b_j=x[4] 
    sum(na.rm=T, 
     ifelse(a$R_j< 0, -log(1/(2*pi*(sigma_j^2)))- 
         (1/(2*(sigma_j^2))*(a$R_j+al_j-b_j*a$R_m))^2, 
     ifelse(a$R_j>0 , -log(1/(2*pi*(sigma_j^2)))- 
         (1/(2*(sigma_j^2))*(a$R_j+au_j-b_j*a$R_m))^2, 
         -log(pnorm(au_j,mean=b_j*a$R_m,sd=sqrt(sigma_j^2))- 
         pnorm(au_j,mean=b_j*a$R_m,sd=sqrt(sigma_j^2))))) 

    ) 

} 

start.par = c(0, 0, 0.01, 1) 
out1 = optim(llik, par=start.par, method="Nelder-Mead") 


for (i in 1: runs) 
{ 
index_start=20*(i-1)+1 
index_end= 20*i 
out[i]=out1[index_start:index_end] 
} 
out 

マイデータ:

R_j   R_m 
-0.0625  0.002320654 
0    -0.004642807 
0.033333333 0.005936332 
0.032258065 0.001060848 
0    0.007114057 
0.015625  0.005581558 
0    0.002974794 
0.015384615 0.004215271 
0.060606061 0.005073116 
0.028571429 -0.006001279 
0   -0.002789594 
0.013888889 0.00770633 
0    0.000371663 
0.02739726 -0.004224228 
-0.04   0.008362539 
0   -0.010951605 
0    0.004682924 
0.013888889 0.011839993 
-0.01369863 0.004210383 
-0.027777778 -0.04658949 
0    0.00987272 
-0.057142857 -0.062203157 
-0.03030303 -0.119177639 
0.09375  0.077054642 
0   -0.022763619 
-0.057142857 0.050408775 
0    0.024706076 
-0.03030303 0.004043701 
0.0625  0.004951088 
0   -0.005968731 
0   -0.038292548 
0    0.013381097 
0.014705882 0.006424728 
-0.014492754 -0.020115626 
0    -0.004837891 
-0.029411765 -0.022054654 
0.03030303 0.008936428 
0.044117647 8.16925E-05 
0    -0.004827246 
-0.042253521 0.004653096 
-0.014705882 -0.004222151 
0.029850746 0.000107267 
-0.028985507 -0.001783206 
0.029850746 -0.006372981 
0.014492754 0.005492374 
-0.028571429 -0.009005846 
0    0.001031683 
0.044117647 0.002800551 
+0

はこの宿題ですか? –

+0

これを一般化して、より大きなRコミュニティに関連させることができますか? – Chase

+0

私は、Rで最適化を使って変数を推定するコードを作成しました。ループを実行するコードを(私が最後に試みたように)欲しいですが、 – rder

答えて

0

私は試してみて、あなたのコードを実行すると、私はエラーメッセージ「a見つからない」llikが呼び出されたときに取得します。 llikに必要なすべての変数が関数に渡されるか、関数内で作成されるように、コードをリファクタリングする必要があります。

また、out[i]=out1[index_start:index_end]という行は、値の範囲を1つの場所に割り当てるため、不審なものです。

+0

はデータの場所です。コードは以下のようになります。a = read.table( "E:/data.txt"、header = T)> aのattach(a)はR_jとR_mがある場所です。ありがとうエドワード – rder

関連する問題