# Extend my code to run several data at once. Classic List Threaded 4 messages Open this post in threaded view
|

## Extend my code to run several data at once.

 Hi I have a code that calculate maximisation using optimx and it is working just fine. I want to extend the code to run several colomns of R_j where j runs from 1 to 200. If I am to run the code in its current state, it means I will have to run it 200 times manually. May you help me adjust it to accomodate several rows of R_j and print the 200 results. ***Please do not get intimidated by the maths in the code.*** my code ###### afull=read.table("D:/hope.txt",header=T) library(optimx) llik = function(x)    {     al_j=x; au_j=x; sigma_j=x;  b_j=x     sum(na.rm=T,         ifelse(a\$R_j< 0, log(1 / ( sqrt(2*pi) * sigma_j) )-                            (1/( 2*sigma_j^2 ) ) * (  (a\$R_j+al_j-b_j*a\$R_m)^2 ) ,          ifelse(a\$R_j>0 , log(1 / ( sqrt(2*pi) * sigma_j) )-                            (1/( 2*sigma_j^2 ) ) * (  (a\$R_j+al_j-b_j*a\$R_m)^2 ) ,                                 log(ifelse (( pnorm (au_j, mean=b_j * a\$R_m, sd= sqrt(sigma_j^2))-                            pnorm(al_j, mean=b_j * a\$R_m, sd=sqrt (sigma_j^2)) ) > 0,                                         (pnorm (au_j,mean=b_j * a\$R_m, sd= sqrt(sigma_j^2))-                            pnorm(al_j, mean=b_j * a\$R_m, sd= sqrt(sigma_j^2) )),                                         1) ) ) )       )    } start.par = c(-0.01,0.01,0.1,1) #looping now runs=133/20+1 out <- matrix(NA, nrow = runs, ncol = 4, dimnames = list(paste("Qtr:", 1:runs , sep = ''), c("al_j", "au_j", "sigma_j", "b_j")))   ## Estimate parameters based on rows 0-20, 21-40, 41-60 of afull for (i in 1:runs) {                 index_start=20*(i-1)+1                 index_end= 20*i   a=afull[index_start:index_end,]                 out[i, ] <- optimx(llik,par = start.par,method = "Nelder-Mead", control=list(maximize=TRUE) )[][]                 } ## Yields > out                al_j        au_j     sigma_j        b_j Qtr:1  0.0012402032 0.001082986 0.012889809 1.14095125 Qtr:2  0.0011302178 0.582718275 0.009376083 0.06615565 Qtr:3  0.0013349347 0.417495301 0.013286103 0.60548903 Qtr:4 -0.0016659441 0.162250321 0.015088915 0.67395511 Qtr:5  0.0043159984 0.004315976 0.013153039 1.17341907 Qtr:6  0.0027333033 0.527280348 0.018423347 0.53905153 Qtr:7 -0.0009214064 0.749695104 0.008730072 0.02108032 >
Open this post in threaded view
|

## Re: Extend my code to run several data at once.

 If you just want to apply the function over successive columns of a data frame use apply(name.of.data.frame, 2 , llik) Daniel EdBo wrote Hi I have a code that calculate maximisation using optimx and it is working just fine. I want to extend the code to run several colomns of R_j where j runs from 1 to 200. If I am to run the code in its current state, it means I will have to run it 200 times manually. May you help me adjust it to accomodate several rows of R_j and print the 200 results. ***Please do not get intimidated by the maths in the code.*** my code ###### afull=read.table("D:/hope.txt",header=T) library(optimx) llik = function(x)    {     al_j=x; au_j=x; sigma_j=x;  b_j=x     sum(na.rm=T,         ifelse(a\$R_j< 0, log(1 / ( sqrt(2*pi) * sigma_j) )-                            (1/( 2*sigma_j^2 ) ) * (  (a\$R_j+al_j-b_j*a\$R_m)^2 ) ,          ifelse(a\$R_j>0 , log(1 / ( sqrt(2*pi) * sigma_j) )-                            (1/( 2*sigma_j^2 ) ) * (  (a\$R_j+al_j-b_j*a\$R_m)^2 ) ,                                 log(ifelse (( pnorm (au_j, mean=b_j * a\$R_m, sd= sqrt(sigma_j^2))-                            pnorm(al_j, mean=b_j * a\$R_m, sd=sqrt (sigma_j^2)) ) > 0,                                         (pnorm (au_j,mean=b_j * a\$R_m, sd= sqrt(sigma_j^2))-                            pnorm(al_j, mean=b_j * a\$R_m, sd= sqrt(sigma_j^2) )),                                         1) ) ) )       )    } start.par = c(-0.01,0.01,0.1,1) #looping now runs=133/20+1 out <- matrix(NA, nrow = runs, ncol = 4, dimnames = list(paste("Qtr:", 1:runs , sep = ''), c("al_j", "au_j", "sigma_j", "b_j")))   ## Estimate parameters based on rows 0-20, 21-40, 41-60 of afull for (i in 1:runs) {                 index_start=20*(i-1)+1                 index_end= 20*i   a=afull[index_start:index_end,]                 out[i, ] <- optimx(llik,par = start.par,method = "Nelder-Mead", control=list(maximize=TRUE) )[][]                 } ## Yields > out                al_j        au_j     sigma_j        b_j Qtr:1  0.0012402032 0.001082986 0.012889809 1.14095125 Qtr:2  0.0011302178 0.582718275 0.009376083 0.06615565 Qtr:3  0.0013349347 0.417495301 0.013286103 0.60548903 Qtr:4 -0.0016659441 0.162250321 0.015088915 0.67395511 Qtr:5  0.0043159984 0.004315976 0.013153039 1.17341907 Qtr:6  0.0027333033 0.527280348 0.018423347 0.53905153 Qtr:7 -0.0009214064 0.749695104 0.008730072 0.02108032 >