开发者

loop in optim in R: May you help me to adjust my loop code

May you help me correct my loop function.

I want optim to estimates al_j; au_j; sigma_j; b_j by looking at 0 to 20, 21 to 40, 41 to 60 data points.

The final result should 开发者_StackOverflow中文版have 4 columns of each of the estimates AND 4 rows of each of 0 to 20, 21 to 40, 41 to 60.

MY code is:

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

My data:

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


When I try and run your code I get the error message "a not found" when llik is called. You should refactor your code so that all the variables that llik needs are either passed into it or created within the function.

The line out[i]=out1[index_start:index_end] also looks dubious, since you are assigning a range of values to a single location.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜