问题描述
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 中有哪些包以及如何设置解决这样一个简单的最小化问题? 谢谢。
解决方法
由于这是一个单输入目标函数,您可以使用 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,col = 4)
curve(fA(x)^2,log="xy")
curve(fB(x)^2,col = 2)
curve(fC(x)^2,col = 4)