如何解决 R 中的简单优化问题
How to solve simple optimization problem in R
我有三个方程,我想求解一个参数,使它们之间的差异最小化。
DifferenceA: 100/(1+d)^50 - 75/(1+d)^25
DifferenceB: 100/(1+d)^50 - 50/(1+d)^15
DifferenceC: 75/(1+d)^25 - 50/(1+d)^15
我想求解参数 d*,使上述差异中的残差平方和最小化,最好使用 R,其中:
我没有在 R 中做过优化,想知道在 R 中使用什么包以及如何设置来解决像这样的简单最小化问题?
谢谢。
由于这是一个单输入 objective 函数,您可以使用 optimize()
(optim()
用于 R^n → R,即参数向量):
fA <- function(d) 100/(1+d)^50 - 75/(1+d)^25
fB <- function(d) 100/(1+d)^50 - 50/(1+d)^15
fC <- function(d) 75/(1+d)^25 - 50/(1+d)^15
fn <- function(d) {
vals <- c(fA(d), fB(d), fC(d))
sum(vals^2)
}
optimize(fn, interval = c(-200, 2e5))
然而,一张快速图表(或一些我懒得做的数学分析)显示所有这些差异都随着 d → ∞
减少到零——所以答案将是无限的,或者在数值上等于您尝试的间隔的上限(或差异梯度变得如此之小以至于 R 放弃的任何地方)。
curve(fA, from = 1e-5, to = 1e6, log="x")
curve(fB, add = TRUE, col = 2)
curve(fC, add = TRUE, col = 4)
curve(fA(x)^2, from = 1e-5, to = 1e6, log="xy")
curve(fB(x)^2, add = TRUE, col = 2)
curve(fC(x)^2, add = TRUE, col = 4)
我有三个方程,我想求解一个参数,使它们之间的差异最小化。
DifferenceA: 100/(1+d)^50 - 75/(1+d)^25
DifferenceB: 100/(1+d)^50 - 50/(1+d)^15
DifferenceC: 75/(1+d)^25 - 50/(1+d)^15
我想求解参数 d*,使上述差异中的残差平方和最小化,最好使用 R,其中:
我没有在 R 中做过优化,想知道在 R 中使用什么包以及如何设置来解决像这样的简单最小化问题? 谢谢。
由于这是一个单输入 objective 函数,您可以使用 optimize()
(optim()
用于 R^n → R,即参数向量):
fA <- function(d) 100/(1+d)^50 - 75/(1+d)^25
fB <- function(d) 100/(1+d)^50 - 50/(1+d)^15
fC <- function(d) 75/(1+d)^25 - 50/(1+d)^15
fn <- function(d) {
vals <- c(fA(d), fB(d), fC(d))
sum(vals^2)
}
optimize(fn, interval = c(-200, 2e5))
然而,一张快速图表(或一些我懒得做的数学分析)显示所有这些差异都随着 d → ∞
减少到零——所以答案将是无限的,或者在数值上等于您尝试的间隔的上限(或差异梯度变得如此之小以至于 R 放弃的任何地方)。
curve(fA, from = 1e-5, to = 1e6, log="x")
curve(fB, add = TRUE, col = 2)
curve(fC, add = TRUE, col = 4)
curve(fA(x)^2, from = 1e-5, to = 1e6, log="xy")
curve(fB(x)^2, add = TRUE, col = 2)
curve(fC(x)^2, add = TRUE, col = 4)