繁体   English   中英

R中线性函数的斜率导数

[英]Derivative of a slope in a linear function in R

在推导线性函数的斜率(y = a + bx)时,它说明了x和y之间的变化率。 但是,如果我想知道函数相对于x的变化率的变化速度(本质上是二阶导数),该怎么做呢?

x = rbind(-0.13612333, -0.02364000,  0.08234000,  0.09092667,  0.02164000,
          -0.07784667, -0.10057333, -0.11222000, -0.07394333, -0.05615667)
y = rbind(0.013591, -0.045430, -0.013332, 0.010612, -0.013214,
         -0.05521, -0.022531, -0.013262, 0.087841, -0.0201230)
beta = cov(x, y) / var(x)
beta = -0.0218445

函数y= a + bx的二阶导数仅为0。如果您怀疑存在非零的二阶导数,则需要以不同的公式开始(例如, y = a + b*x^2对于二阶导数为y'' = 2b

如果要查看y值相对于x的变化方式以及这些变化相对于x的变化方式,请查看:

> diff(y)
           [,1]
 [1,] -0.059021
 [2,]  0.032098
 [3,]  0.023944
 [4,] -0.023826
 [5,] -0.041996
 [6,]  0.032679
 [7,]  0.009269
 [8,]  0.101103
 [9,] -0.107964
> diff(diff(y))
          [,1]
[1,]  0.091119
[2,] -0.008154
[3,] -0.047770
[4,] -0.018170
[5,]  0.074675
[6,] -0.023410
[7,]  0.091834
[8,] -0.209067

假设y值等距分布,则获得二阶导数的经典近似值

c(NA, y[seq_along(y) - 1]) - 2 * y + y[seq_along(y) + 1]
#[1]  NA  0.091119 -0.008154 -0.047770 -0.018170  0.074675 -0.023410  0.091834 -0.209067   NA

由于我们没有关于单位以及后续值之间的距离的信息,因此以任意单位给出结果。

可在此处找到用于计算一阶和二阶导数的有限差分近似的通用公式。

编辑/附录

这是另一种有用的可能性。 可以将整个数据集拟合为二次函数并确定拟合的二阶导数,而不是尝试计算二阶导数的局部值。

正如OP在评论中所阐明的,数据在时间t是连续的,其中xy每个值都以一个月的等距时间步长进行记录。 我假设xy的值指的是同一月份。 基于此假设,我们可以首先消除时序x(t)y(t)的参数t并考虑函数相关性y(x)

y1 <- y[order(x)]  # reorder the data in ascending values of x
x1 <- x[order(x)]  # do the same for x
fit <- lm(y1 ~ poly(x1, 2, raw=TRUE)) # fit a second-order polynomial

这样产生:

> fit$coefficients
#         (Intercept) poly(x1, 2, raw = TRUE)1 poly(x1, 2, raw = TRUE)2 
#         -0.01834248               0.03744701               1.76134780 

最后一个系数是拟合函数的二阶导数。 拟合结果可以用

plot(y1 ~ x1)
lines(fitted(fit) ~ x1, col=4)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM