首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:在单个数据上的线性回归(超过1)。作为表的结果

R:在单个数据上的线性回归(超过1)。作为表的结果
EN

Stack Overflow用户
提问于 2020-03-23 09:18:03
回答 1查看 39关注 0票数 1

我的数据集类似于:

代码语言:javascript
复制
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:年发生火灾的每个plot
  2. FID:ID的每个plot
  3. Date:日期的NDVI
  4. NDVI:NDVI值

的测量

我想做的是执行两个线性回归,一个用于FID=1,另一个用于FID=2,比较它们的回收率。不过,我必须将回收率仅适用于与火灾发生后(由DATE_FIRE确定的)日期对应的NDVI值。对于FID=1,我应该只使用第3行、第4行和第5行,因为第1行和第2行对应于火灾前的测量值。

此外,我希望把我的结果作为表格;类似于:

代码语言:javascript
复制
> 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相比较的年份

代码语言:javascript
复制
data$DATE_FIRE <- year(data$DATE_FIRE)

然后:

代码语言:javascript
复制
data_d <- data %>%
  group_by(FID) %>%
  filter(Date > DATE_FIRE) %>%
  do(tidy(lm(NDVI ~ Date,data)))

分组类型可以工作,但不能使用过滤器。欢迎任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 09:32:41

涉及dplyrtidyrlubridatepurrrbroom的一种选择可以是:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60810694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档