English · PDF 379
不必过于担心其工作原理的细节。这里的直觉才是重要的。如果你有一个函数来定义模型与数据集之间的距离,并且有一个算法可以通过修改模型参数来最小化该距离,你就能找到最佳模型。这种方法的美妙之处在于,它适用于任何你能写出方程式的模型族。
对于这个模型,我们还可以使用另一种方法,因为它是更广泛的模型族的一个特例:线性模型。线性模型的一般形式为 optim() )。所以这个简单的模型等价于一个一般的线性模型,其中 $y = a_1 + a_2 * x_1 + a_3 * x_2 + \dots + a_n * x_n$ ( $n = 1$ 为 2, $n$ 为 $x_1$ 有一个专门用于拟合线性模型的工具,叫做 $x$ . $R$ 有一种特殊的方式来指定模型族:公式。公式看起来像 lm(). lm() , $y \sim x$ 会将其转换为一个类似 lm() 的函数。我们可以拟合模型并查看输出: $y = a_1 + a_2 * x$
sim1_mod <- lm(y ~ x, data = sim1)
coef(sim1_mod)
#> (Intercept) x
#> 4.22 2.05
这些值与我们在 optim()! 在幕后, lm() 并不使用 optim() ,而是利用了线性模型的数学结构。通过几何、微积分和线性代数之间的一些联系, lm() 使用一种精密的算法,一步就能找到最接近的模型。这种方法速度更快,并且保证存在全局最小值。
sim1a <- tibble(
x = rep(1:10, each = 3),
y = x * 1.5 + 6 + rt(length(x), df = 2)
)