gpt4 book ai didi

r - 平滑曲线上的最大曲线变化率

转载 作者:行者123 更新时间:2023-12-05 01:24:03 30 4
gpt4 key购买 nike

我有一个时间序列数据集,我正在尝试计算最大变化率以估计 NDVI 数据的绿化日期。我的数据如下:

    date       NDVI
1 2021-01-01 0.307
2 2021-01-17 0.291
3 2021-02-02 0.287
4 2021-02-18 0.247
5 2021-03-06 0.286
6 2021-03-22 0.268
7 2021-04-07 0.299
8 2021-04-23 0.295
9 2021-05-09 0.349
10 2021-05-25 0.402
11 2021-06-10 0.359
12 2021-06-26 0.432
13 2021-07-12 0.564
14 2021-07-28 0.654
15 2021-08-13 0.699
16 2021-08-29 0.614
17 2021-09-14 0.588
18 2021-09-30 0.553
19 2021-10-16 0.450
20 2021-11-01 0.377
21 2021-11-17 0.341
22 2021-12-03 0.331
23 2021-12-19 0.323

#I plot my dataset and fit a curve

p1 <- ggplot(data,aes(x = date, y = NDVI)) + stat_smooth(method = "lm", formula = y ~ ns(x,3), color="blue") + geom_point()

p1

enter image description here

我现在希望能够计算曲线变化的最大速率,以确定植被何时开始变绿(我根据该图猜测是在 5 月的某个时候)。

感谢您的帮助。

最佳答案

此模型的最大增长率出现在 2021 年 6 月 11 日晚上 9:13。获得此结果的一种简单方法是在 ggplot 之外创建模型:

library(splines)

mod <- lm(NDVI ~ ns(date, 3), data = data)

现在用它来预测一年中每一天的 NDVI:

dates <- seq(as.Date("2021-01-01"), as.Date("2021-12-31"), by = "day")

predictions <- predict(mod, newdata = list(date = dates))

最大变化率发生在连续几天的预测之间的最大差异处:

dates[which.max(diff(predictions))]
# [1] "2021-06-11"

如果您需要精确到小时和分钟(根据数据点的数量这是不合理的),您可以这样做:

data$date <- as.POSIXct(data$date)
mod <- lm(NDVI ~ ns(date, 3), data = data)

dates <- seq(as.POSIXct("2021-01-01"), as.POSIXct("2021-12-31"), by = "min")

predictions <- predict(mod, newdata = list(date = dates))

dates[which.max(diff(predictions))]
#> [1] "2021-06-11 21:13:00 GMT"

关于r - 平滑曲线上的最大曲线变化率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71712185/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com