跳转至内容

R 编程/优化

来自 Wikibooks,开放世界中的开放书籍

数值方法

[编辑 | 编辑源代码]

一维问题

[编辑 | 编辑源代码]

一维问题

> func <- function(x){
+ 	return ( (x-2)^2 )
+ 	}
> (func(-2))
[1] 16
>
> # plot your function using the 'curve function'
> curve(func,-4,8) 
>
> # Here is another way to plot the function
> # using a grid
> grid <- seq(-10,10,by=.1) 
> func(grid)
> plot(grid,func(grid))
> 
> # you can find the minimum using the optimize function
> optimize(f=func,interval=c(-10,10))
$minimum
[1] 2

$objective
[1] 0

牛顿-拉夫森方法

[编辑 | 编辑源代码]
  • nlm()提供了一个牛顿算法。
  • maxLik 包用于似然函数的最大化。此包包含牛顿-拉夫森方法。
  • newtonraphson()spuRs包中。


> func <- function(x){
+ 	out <- (x[1]-2)^2 + (x[2]-1)^2
+ 	return <- out
+ 	}> 
> optim(par=c(0,0), fn=func, gr = NULL,
+       method = c("BFGS"),
+       lower = -Inf, upper = Inf,
+       control = list(), hessian = T)
> optim(par=c(0,0), fn=func, gr = NULL,
+       method = c("L-BFGS-B"),
+       lower = -Inf, upper = Inf,
+       control = list(), hessian = T)

共轭梯度法

[编辑 | 编辑源代码]
  • optim() 使用 method="cg"

置信域方法

[编辑 | 编辑源代码]


Nelder-Mead单纯形方法

[编辑 | 编辑源代码]
> func <- function(x){
+ 	out <- (x[1]-2)^2 + (x[2]-1)^2
+ 	return <- out
+ 	}
> 
> optim(par=c(0,0), fn=func, gr = NULL,
+       method = c("Nelder-Mead"),
+       lower = -Inf, upper = Inf,
+       control = list(), hessian = T)


  • boot包包含另一种单纯形方法

模拟方法

[编辑 | 编辑源代码]

模拟退火

[编辑 | 编辑源代码]
  • 模拟退火是一种用于最大化非光滑函数的算法。它在以下方面得到了预先实现optim().
> func <- function(x){
+ 	out <- (x[1]-2)^2 + (x[2]-1)^2
+ 	return <- out
+ 	}> 
> optim(par=c(0,0), fn=func, gr = NULL,
+       method = c("SANN"),
+       lower = -Inf, upper = Inf,
+       control = list(), hessian = T)

遗传算法

[编辑 | 编辑源代码]
  • rgenoud包用于遗传算法[3]
  • gaoptim包用于遗传算法[4]
  • ga是一个通用的优化包,使用遗传算法。它提供了一套灵活的工具,用于在连续和离散情况下实现遗传算法搜索,无论是否有约束。[5]

参考文献

[编辑 | 编辑源代码]
  • Venables和Ripley,第16章。
  • Cameron和Trivedi,《微观计量经济学》,第10章。
  • Braun和Murdoch,《使用R进行统计编程的第一门课程》(一本关于使用R进行优化的非常好的参考书),第7章。


上一页:数学 索引 下一页:概率分布
华夏公益教科书