如何求解方程,y中的y = x ^ a,以便我们得到' a'的优化值。 这里y和x是(n×1)矩阵和' a'是未知参数。 如何在R ??
中解决这个问题答案 0 :(得分:2)
使用数值非线性最小化函数nlm()
非常容易。您定义了应该最小化的损失函数。在你的例子中,例如
f <- function(a) mean((y - x^a)^2)
这是一个简单的平方和损失函数。您必须确定y
和x^a
之间的差异,否则最小值为-Inf
。
现在您可以使用nlm()
找到最低要求:
x <- runif(1000)
y <- x^(0.8) + rnorm(1000,0,0.1)
nlm(f, p=1)
给出:
$minimum
[1] 0.01004981
$estimate
[1] 0.8033611
$gradient
[1] 6.322894e-08
$code
[1] 1
$iterations
[1] 6
所以这个估计正是你的想法。
其他可能性包括optimize()
用于一维拟合,但为此您必须指定搜索的间隔:
> optimize(f, interval =c(-100,100))
$minimum
[1] 0.8033645
$objective
[1] 0.01004981
更通用的方法是使用允许您最小化多个参数的函数optim()
:
> optim( 0, f)
$par
[1] 0.8035156
$value
[1] 0.01004981
...
请注意,这会导致警告。此功能未针对一维优化进行优化。您可以指定method = "Brent
,但是您需要设置下限和上限。
R中有很多可能来做到这一点:)