![](/img/trans.png)
[英]Is there an R function like cor() but to get the slope and/or intercepts of a linear regression?
[英]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
是连续的,其中x
和y
每个值都以一个月的等距时间步长进行记录。 我假设x
和y
的值指的是同一月份。 基于此假设,我们可以首先消除时序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.