【问题标题】:Optimize a function several times R code优化一个函数几次R代码
【发布时间】:2014-03-24 23:19:10
【问题描述】:

我有一个功能。由此我可以很容易地估计参数。

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 &lt;- rnorm(5,28,1.2),它每次都会给出一些不同的参数估计。我想使用循环来执行此操作,我该如何进行?

【问题讨论】:

  • 在整个代码块上使用replicate,而不仅仅是优化部分。

标签: r mathematical-optimization


【解决方案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)
}

【讨论】:

    【解决方案2】:

    你可以试试:

    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 的一次运行的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2022-08-11
      • 2020-02-07
      • 2014-03-16
      • 2013-05-20
      • 1970-01-01
      • 2014-05-24
      相关资源
      最近更新 更多