【问题标题】:Using ggplot to Summarize Mann Kendall test results in a graph使用 ggplot 在图表中总结 Mann Kendall 测试结果
【发布时间】:2019-05-18 19:53:03
【问题描述】:

我一直在使用代码在图表中总结一些线性回归结果(代码和图表均已附上)。我采用了参考这里的各种来源的代码。

现在我想为 Mann-Kendall 测试结果制作完全相同的图表。代替我图表的“斜率”部分,我想插入“森斜率估计”的结果。因此,我希望在此图中显示两个不同测试的结果。

我认为问题出在“geom(label)”的“粘贴”部分。因为我必须确定要粘贴到我的图表中的特定数字结果,我不知道该怎么做。

如果任何机构有解决此问题的方法。我将不胜感激。

ggplotRegressionxpl <- function (fit) {
 require(ggplot2)
ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + 
geom_point() + geom_line() + geom_label(aes(2000, 33, hjust = 0, vjust = 0, label = paste("R^2 = ",signif(summary(fit)$adj.r.squared, 3),"\n",
                                                                                          "Slope =",signif(fit$coef[[2]], 3),"\n",
                                                                                          "p-value =",signif(summary(fit)$coef[2,4], 3)))) +
stat_smooth(method = "lm", col = "red") + xlab("Year") + ylab("Total Precipitation") +
 labs(title = "Pullman (1941–2018)") + scale_y_continuous(limits = c(0, 40)) +
theme(plot.title = element_text(hjust = 0.5))



}

【问题讨论】:

标签: r ggplot2 summary


【解决方案1】:

几年前我使用过 Mann-Kendall / Sens。我使用的包是wql

您可以对您的数据 result &lt;- mannKen(data$Precipitation) 运行 mannKen 函数。完成后,您可以使用 result $sen.sloperesult$p.value 访问 Sens Slope 和 p 值。

要绘制趋势线,我通常会选择一个点来固定该线 - 例如我的时间序列中的中位数浓度加上时间序列的中点。这给了我上图中 (middleYear, median) - (1978, medianPrecipitation) 的参考点。

然后我使用 sens 斜率、时间序列的起点(在您的示例中为 1941)、数据的终点(在您的示例中为 2019)和一些线性代数来计算线的起点( 1941 年的降水量,如果从参考点向后延伸 sens 坡度)和线的终点(如果从参考点向前延伸 sens 坡度,则为 2019 年的降水量)。

我很想知道是否有任何其他软件包可以简化此过程。

【讨论】:

  • 感谢您的回答。你的想法仍然有助于我制作测试图表。但我更感兴趣的是直接在框内的图表中显示我的 mann kendall 测试结果的测试统计数据。就像我在上图中为回归所做的那样。
  • 不客气。正如我所说,我使用了 wql 包。使用例如从结果中提取统计数据很容易。 result$sen.slope 访问斜率统计。正如@tung 在上面的评论中指出的那样,没有数据很难更具体。
  • 我现在意识到用我的数据可视化我的问题会更容易。但我不确定我是否可以编辑问题以包含数据。我目前正在使用一个名为“Trend”和“Kendall”的包来执行我想要的两个测试。我想知道,当我在您提到的包中使用 result$sen.slope 时,我是否能够直接在图表中输出结果,还是仅将结果显示为输出?
  • 是的,您应该可以通过更新 geom_label 代码来添加它。类似于:geom_label(aes(2000, 33, hjust = 0, vjust = 0, label = paste("R^2 = ",signif(summary(fit)$adj.r.squared, 3),"\n" , "斜率 =",signif(fit$coef[[2]], 3),"\n", "p-value =",signif(summary(fit)$coef[2,4], 3), " \n", "Sens Slope =",result$sen.slope)))
  • 非常感谢您的帮助。这很有帮助
猜你喜欢
  • 2018-04-02
  • 2019-08-24
  • 2019-12-29
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多