可视化优化路径,直到R中收敛

时间:2019-06-27 19:48:17

标签: r optimization

我正在使用“ optim”包来最大化对数似然函数。并且我想形象化优化路径,直到与动画融合,例如此图:

https://florarblog.files.wordpress.com/2018/08/optimization_path2.gif?w=740&h=507&zoom=2)

这是对数似然函数和优化:

  x = runif(500)
  x = model.matrix( ~ x)
  y = rbinom(500,1,0.5)
  theta= c(-0.1,2)

  logll <- function(theta)
    {
    p <- exp(x%*%theta) 
    p[p >=1] <- 1- 1e-5 ; p[p<=0] <- 1e-5 
    LL <- sum(y*log(p) + (1-y)*log(1 - p))
    return(-LL)
    }

  optim(theta,logll)

  l.grid <- 200
  grid.b <- as.matrix(expand.grid(b0=seq(-3,0.5,length.out=l.grid), b1=seq(-6,6,length.out=l.grid)))
  grid.f <-apply(grid.b,1,logll)
  grid.b <- as.data.frame(grid.b)
  contourplot(grid.f~b0+b1,data=grid.b,cuts=15)

预先感谢您的帮助

1 个答案:

答案 0 :(得分:3)

我们需要一次运行优化程序,所以我们每个时间步都有解决方案。然后使用gganimate进行动画几乎是微不足道的。

grid.b$f <- grid.f

op <- sapply(
  seq_len(optim(theta,logll)$counts['function']), 
  function(i) { 
    set.seed(1234)
    optim(theta, logll, control = list(maxit = i))$par
  }
)
op_df <- data.frame(b0 = op[1,], b1 = op[2,])
op_df$step <- 1:nrow(op_df)

p <- ggplot(grid.b, aes(b0, b1)) + 
  geom_raster(aes(fill = f)) +
  geom_contour(aes(z = f), col = 'grey40') +
  geom_path(data = op_df, col = 'white') +
  geom_point(data = op_df, col = 'white') +
  scale_fill_viridis_c() +
  coord_cartesian(expand = FALSE)


library(gganimate)
a <- p + transition_reveal(step)

anim_save(
  '~/Desktop/anim.gif', a, height = 400, width = 400, 
  nframes = nrow(op_df), fps = 30, duration = nrow(op_df) / 30
)

enter image description here

一帧是一步。您可以平滑过渡,但是离散的特性可以提供信息。