Мой набор данных похож на:
data <- tibble( "DATE_FIRE"= c("1989-07-31", "1989-07-31", "1989-07-31", "1989-07-31","1989-07-31","1989-08-31", "1989-08-31", "1989-08-31", "1989-08-31","1989-08-31"),
"FID" = c(1,1,1,1,1,2,2,2,2,2),
"Date" = c(1988, 1989, 1990, 1991, 1992, 1988, 1989, 1990, 1991, 1992),
"NDVI" = c( 0.9, 0.8, 0.1, 0.2, 0.3, 0.8, 0.85, 0.15, 0.30, 0.50))
data$DATE_FIRE <- as.Date(data$DATE_FIRE, format= "%Y-%m-%d")
data$FID <- as.factor(data$FID)
> data
# A tibble: 10 x 4
DATE_FIRE FID Date NDVI
<date> <fct> <dbl> <dbl>
1 1989-07-31 1 1988 0.9
2 1989-07-31 1 1989 0.8
3 1989-07-31 1 1990 0.1
4 1989-07-31 1 1991 0.2
5 1989-07-31 1 1992 0.3
6 1989-08-31 2 1988 0.8
7 1989-08-31 2 1989 0.85
8 1989-08-31 2 1990 0.15
9 1989-08-31 2 1991 0.3
10 1989-08-31 2 1992 0.5
Он касается лесного пожара и его восстановления по значениям NDVI. По мере восстановления леса значение NDVI возрастает.
DATE_FIRE
: год, когда произошел пожар для каждого участка FID
: идентификатор каждого участка Date
: дата измерения NDVI NDVI
: значение NDVI
Я хотел бы выполнить 2 линейные регрессии, одну для FID=1
и другую для FID=2
, чтобы сравните их скорость восстановления. Однако я должен применить коэффициент восстановления ТОЛЬКО к NDVI
значениям, соответствующим датам после пожара (определяемого DATE_FIRE
). В случае FID = 1 я должен взять только строки 3, 4 и 5, поскольку строки 1 и 2 соответствуют измерениям до пожара.
Кроме того, я хотел бы иметь свои результаты в виде таблицы; что-то вроде:
> desired_output
# A tibble: 2 x 4
FID beta r2 p
<dbl> <dbl> <dbl> <dbl>
1 1 0.1 1 0
2 2 0.175 0.99 0.01
ЧТО Я ПОПРОБОВАЛ ТАК ДАЛЕЕ:
Установите DATE_FIRE
в годах, чтобы быть сопоставимыми с Date
:
data$DATE_FIRE <- year(data$DATE_FIRE)
Тогда:
data_d <- data %>%
group_by(FID) %>%
filter(Date > DATE_FIRE) %>%
do(tidy(lm(NDVI ~ Date,data)))
Группировка работает, но не фильтр. Любая помощь будет приветствоваться!