【问题标题】:How to perform mann kendall trend test on multiple levels如何在多个级别上执行 mann kendall 趋势测试
【发布时间】:2019-12-29 02:50:07
【问题描述】:

我正在处理气象站降水数据。每个站都有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

【问题讨论】:

  • 也许是MannKendall(prcp)$p.value。你从哪个库获得MannKendall
  • 是的!谢谢,这行得通。答案如下。

标签: r group-by summarize


【解决方案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)

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2014-07-30
    相关资源
    最近更新 更多