【问题标题】:R : Linear regressions (more than 1) on a single dataframe. Results as tableR:单个数据帧上的线性回归(超过 1 个)。结果表
【发布时间】:2020-03-23 09:18:03
【问题描述】:

我的数据集类似于:

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 值上升。

  1. DATE_FIRE: 每个地块发生火灾的年份
  2. FID:每个地块的ID
  3. Date:NDVI测量日期
  4. NDVI:NDVI值

我想做的是执行2个线性回归,一个用于FID=1,另一个用于FID=2,以比较它们的恢复率。不过,我已将恢复率应用于与火灾发生后日期(由 DATE_FIRE 确定)相对应的 NDVI 值。在 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)))

分组类型有效,但过滤器无效。欢迎任何帮助!

【问题讨论】:

    标签: r linear-regression


    【解决方案1】:

    涉及dplyrtidyrlubridatepurrrbroom 的选项可能是:

    data %>%
     group_by(DATE_FIRE, FID) %>%
     filter(Date > year(DATE_FIRE)) %>%
     nest() %>%
     mutate(model = map(data, ~ tidy(lm(NDVI ~ Date, data = .))),
            r2 = map_dbl(data, ~ summary(lm(NDVI ~ Date, data = .))$r.squared)) %>%
     unnest(model)
    
      DATE_FIRE  FID             data term        estimate std.error statistic  p.value    r2
      <date>     <fct> <list<df[,2]>> <chr>          <dbl>     <dbl>     <dbl>    <dbl> <dbl>
    1 1989-07-31 1            [3 × 2] (Intercept) -199.     5.85e-11  -3.40e12 1.87e-13 1    
    2 1989-07-31 1            [3 × 2] Date           0.1    2.94e-14   3.41e12 1.87e-13 1    
    3 1989-08-31 2            [3 × 2] (Intercept) -348.     2.87e+ 1  -1.21e 1 5.24e- 2 0.993
    4 1989-08-31 2            [3 × 2] Date           0.175  1.44e- 2   1.21e 1 5.24e- 2 0.993
    

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2018-04-19
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多