簡體   English   中英

R :單個數據幀上的線性回歸(大於 1)。 結果如表

[英]R : Linear regressions (more than 1) on a single dataframe. Results as table

我的數據集類似於:

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 ,以比較它們的恢復率。 我有,不過,回收率申請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)))

分組類型有效,但過濾器無效。 歡迎任何幫助!

涉及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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM