如何在多个级别上执行曼恩·肯德尔趋势测试

时间:2019-08-23 19:31:34

标签: r group-by summarize

我正在处理气象站的降水量数据。每个站都有60年的降水数据,有30个站。我想在每个站点上进行一次Mann Kendall趋势测试,以查看是否有明显的降水趋势。

我已经尝试group_bysummarise来计算60年来每个站点的Mann Kendall。

这是一个小示例,其中ID是气象站,而prcp是降水。

ID<-c(1,1,1,1,1,2,2,2,2,2)
prcp<-c(2,0,1,4,5,0,2,3,5,6)
df<-cbind(ID,prcp)

mk<-df %>%
  as.data.frame() %>% 
  group_by(ID) %>%
  summarise(prcpmk=MannKendall(prcp))

每次执行此操作都会收到以下错误:Column prcpmk must be length 1 (a summary value), not 5

部分问题是MannKendall函数返回5个值。尝试使用group_by时如何只指定p值?

我想要的是一个仅具有p值的df:

  ID prcpmk
[1,]  1   0.20
[2,]  2   0.03

1 个答案:

答案 0 :(得分:1)

感谢@ A.Suliman,您是对的。

这似乎可行:

ID<-c(1,1,1,1,1,2,2,2,2,2)
prcp<-c(2,0,1,4,5,0,2,3,5,6)
df<-cbind(ID,prcp)

mk<-df %>%
  as.data.frame() %>% 
  group_by(ID) %>%
  summarise(prcpmk=MannKendall(prcp)$sl)

在MannKendall()之后添加$sl将指定p值。另外,您可以指定tau,Kendall分数(S),S的方差分母(D)(varS)