在关于Cross Validated(How to simulate censored data)的问题中,我看到optim
函数被用作一种求解器而不是优化器。这是一个例子:
optim(1, fn=function(scl){(pweibull(.88, shape=.5, scale=scl, lower.tail=F)-.15)^2})
# $par
# [1] 0.2445312
# ...
pweibull(.88, shape=.5, scale=0.2445312, lower.tail=F)
# [1] 0.1500135
我已经找到了关于
optim
here的教程,但是我仍然无法弄清楚如何使用optim
作为求解器。我有几个问题:第一个参数是什么(即传入值
1
)?传入的功能是什么?
我知道这是采用Weibull概率分布并减去0.15,但是为什么要对结果求平方呢?
最佳答案
我相信您是指我的答案。让我们来看一些要点:
OP(该问题)希望从具有指定形状和比例参数的Weibull分布中生成(伪)随机数据,并且在特定的审查时间之后,将对所有数据应用审查,并最终进行预先指定的审查率。问题是,一旦您指定了其中任何三个,第四个就必须固定。除非您非常幸运,并且您指定的值恰好完美地吻合,否则您不能同时指定所有四个。碰巧的是,OP对这四个首选值并不是很幸运–不可能同时拥有这四个值。在这一点上,您可以决定指定任意三个并求解最后一个。我提供的代码是如何执行此操作的示例。
如?optim的文档中所述,第一个参数是par
“要对其优化的参数的[i]初始值”。
非常宽松地讲,优化例程的工作方式是,在给定函数和输入值的情况下计算输出值。然后,它“环顾四周”以查看移动到其他输入值是否会带来更好的输出值。如果确实如此,它将朝该方向移动并再次开始该过程。 (当似乎没有朝任一方向移动会产生更好的输出值时,它将停止。)
关键是必须从某处开始,并且用户必须指定该值。在每种情况下,我都是从OP的首选值开始的(尽管实际上我可以在大多数地方开始)。
我传入的函数是?pweibull。它是cumulative distribution function的Weibull distribution(CDF)。它以分位数(X值)作为输入,并返回到该点为止已通过的分布比例。因为OP希望检查该分布的最极端15%,所以我指定pweibull
返回尚未通过的比例(即lower.tail=F
部分)。然后,我从结果中减去.15
。
因此,理想的输出(从我的角度来看)将为0。但是,可以通过找到使pweibull
<.15的输出的比例参数来获得小于零的值。由于optim
(实际上是大多数优化程序)都找到使输出值最小的输入值,因此可以这样做。为了避免发生这种情况,我对差异进行了平方。这意味着,当优化器“过远”并找到一个比例参数,该参数从.05
输出pweibull
且差为-.10
(即<0)时,平方将使最终输出< cc>(即> 0,或更糟)。这会将优化器推回比例参数,使+.01
输出(pweibull
-。15)^ 2 = 0。
通常,您对“优化器”和“求解器”的区分对我来说是不透明的。它们看起来像two different views of the same elephant。
这里的另一个可能的困惑是优化与回归。 Optimization只是关于找到使函数的输出最小化(最大化)的输入值。在regression中,我们将数据概念化为来自作为stochastic函数的数据生成过程的绘图。给定一组实现值和函数形式,我们使用优化技术来估计函数的参数,从而从嘈杂的实例中提取数据生成过程。回归的一部分将分析优化的内容,但是回归的其他方面则较少关注优化,优化本身比回归要大得多。例如,在我对另一个问题的回答中优化的功能是确定性的,并且没有“数据”被分析。
关于r - 如何将优化用作求解器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507081/