2014-03-24 126 views
0

我有一個功能。從這我可以很容易地估計參數。多次優化功能R代碼

sex <- c("F","M","F","M","F") 
age <- rnorm(5,28,1.2) 
dat <- data.frame(sex,age) 
myfun <- function(par, x1,x2){ 

    -sum(log(exp(par[1]*x1+par[2]*x2))) 
} 
myf <- optim(myfun, par=c(0.1,0.4), x1=dat$age,x2=as.numeric(dat$sex))$par 

我想優化此功能10次。如果我使用replicate(10,myf)那麼它會給出相同的值10次。但我想它會給出一些不同的參數估計每次由於age <- rnorm(5,28,1.2)。我想用循環來做這件事,我該怎麼做?

+0

在整個代碼塊上使用'replicate',而不僅僅是優化部分。 –

回答

1

我不確定你需要什麼,但會爲你工作嗎?

myfun <- function(par, x1,x2){ 

    -sum(log(exp(par[1]*x1+par[2]*x2))) 
} 

sex <- c("F","M","F","M","F") 

for (i in 1:10){ 
age <- rnorm(5,28,1.2) 
dat <- data.frame(sex,age) 
print(optim(myfun, par=c(0.1,0.4), x1=dat$age,x2=as.numeric(dat$sex))$par) 
} 
1

你可以試試:

myf <- sapply(
    split(dat, 1:nrow(dat)), 
    function(dat.row) optim(myfun, par=c(0.1,0.4), x1=dat.row$age,x2=as.numeric(dat.row$sex))$par 
) 

產地:

   1   2   3   4   5 
[1,] 23.861664 24.517216 26.823635 24.913725 24.573490 
[2,] 4.806402 4.911159 5.459353 4.943076 5.214703 

每列是一個optim運行的結果。