有没有办法计算在R中具有smooth.spline曲线(或类似)的特定点的曲率? 曲线是从一组x,y点计算的。
提前谢谢。
答案 0 :(得分:7)
这个实际上非常简单如果你知道predict()
创建的对象有smooth.spline()
方法,并且此方法有一个参数deriv
它允许您预测给定的导数(在您的情况下需要二阶导数)而不是样条上的点。
cars.spl <- with(cars, smooth.spline(speed, dist, df = 3))
with(cars, predict(cars.spl, x = speed, deriv = 2))
给出了:
$x
[1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
$y
[1] -6.492030e-05 -6.492030e-05 3.889944e-02 3.889944e-02 5.460044e-02
[6] 7.142609e-02 6.944645e-02 6.944645e-02 6.944645e-02 9.273343e-02
[11] 9.273343e-02 1.034153e-01 1.034153e-01 1.034153e-01 1.034153e-01
[16] 5.057841e-02 5.057841e-02 5.057841e-02 5.057841e-02 1.920888e-02
[21] 1.920888e-02 1.920888e-02 1.920888e-02 1.111307e-01 1.111307e-01
[26] 1.111307e-01 1.616749e-01 1.616749e-01 1.801385e-01 1.801385e-01
[31] 1.801385e-01 1.550027e-01 1.550027e-01 1.550027e-01 1.550027e-01
[36] 2.409237e-01 2.409237e-01 2.409237e-01 2.897166e-01 2.897166e-01
[41] 2.897166e-01 2.897166e-01 2.897166e-01 1.752232e-01 1.095682e-01
[46] -1.855994e-03 -1.855994e-03 -1.855994e-03 -1.855994e-03 4.478382e-05
其中$y
是拟合样条曲线的二阶导数,根据用于拟合样条曲线的数据中的观察speed
值进行评估。当然,您可以插入您想要的任何值,例如在speed
范围内等间距的100个值。例如:
newspeed <- with(cars, seq(min(speed), max(speed), length = 100))
curvature <- predict(cars.spl, x = newspeed, deriv = 2)
plot(curvature, type = "l")