首页 > 解决方案 > 平滑曲线的导数

问题描述

观点 多伊
1 0.6917529 49
2 0.6917501 49
3 0.6917529 49
4 0.6917501 49
5 0.2857624 59
6 0.2857624 59
7 0.1809273 109
8 0.1808737 109
9 0.1809273 109
10 0.1808737 109
11 0.3589439 119
12 0.3588334 119
13 0.3589439 119
14 0.3588334 119
15 0.3589439 119
16 0.3588334 119
17 0.3362660 119
18 0.3365558 119
19 0.7751922 139
20 0.7751910 139
21 0.7751922 139
22 0.7751910 139
23 0.8126297 149
24 0.8126118 149
25 0.8126297 149
26 0.8126118 149
27 0.8251105 159
28 0.8251142 159
29 0.8251105 159
30 0.8251142 159
31 0.8403495 189
32 0.8403497 189
33 0.8403495 189
34 0.8403497 189
35 0.7746058 196
36 0.7746463 196
37 0.7746058 196
38 0.7746463 196
39 0.6160177 226
40 0.6160177 226
41 0.5651071 239
42 0.5651133 239
43 0.5651071 239
44 0.5651133 239
45 0.3736361 249
46 0.3736361 249
47 0.3366151 256
48 0.3365827 256
49 0.3366151 256
50 0.3365827 256

使用上述数据,我试图将 GAM 平滑曲线应用于点列,并在同一图上绘制平滑曲线的导数。我尝试了以下

ggplot(df, aes(doy)) +
    geom_line(aes(y=point),col='blue') +
    geom_smooth(aes(y=point),method = "gam", formula = y ~s(x,bs='cr'), size = 1, se = F, colour = "blue")
}

这让我只有平滑曲线,然后我尝试使用以下方法获取平滑曲线的值:

library(mgcv)
mod = gam(point~s(n=doy,bs='cr'),data=df)
df$fitted = fitted(mod)

但是我在获取和绘制导数时遇到了问题:

derivatives(mod)

# And
fderiv(mod)


# Lastly
first_diff = function(x,y){
  vec=vector(length=length(x))
  vec[1]=0
  for (i in 2:length(x)){
    vec[i]=(y[i]-y[i-1])/(x[i]-x[i-1])
  }
  return(vec)
}

我无法得出曲线的导数(点与一年中的一天的变化率)

标签: rggplot2smoothingderivativegam

解决方案


推荐阅读