我一直在使用代码来总结图形中的一些线性回归结果(均附有代码和图形)。我采用了从这里引用各种来源的代码。
现在,我想为Mann-Kendall测试结果制作完全相同的图形。并代替我图表的“斜率”部分,我要插入“ Sen斜率估计”的结果。所以我想从两个不同的测试结果显示在此图中。
我认为问题出在“ geom(label)”的“ Paste”部分。因为我必须确定要粘贴在图形中的特定数字结果,所以我不知道该怎么做。
如果有人可以解决此问题。我将不胜感激。
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))
}
答案 0 :(得分:1)
几年前,我曾经使用过Mann-Kendall / Sens。我使用的软件包是wql。
您可以对数据result <- mannKen(data$Precipitation)
运行mannKen函数。完成此操作后,可以使用result $sen.slope
和result$p.value
访问Sens Slope和p值。
要绘制趋势线,我通常选择一个点来固定该线-例如我的时间序列的中值浓度与时间序列的中点。在上面的图中,这为我提供了(middleYear,中位数)-(1978,中位数降水)的参考点。
然后我使用sens斜率,时间序列的起点(在上面的示例中为1941),数据的终点(在示例中为2019)和一些线性代数来计算直线的起点(如果从参考点向后延伸感觉坡度,则在1941年会发生降水;如果从参考点向后延伸感觉坡度,则会在1941年发生降水。
我很想知道是否还有其他软件包可以简化此过程。