gpt4 book ai didi

r - 在 R 中的泰勒图中添加偏差

转载 作者:行者123 更新时间:2023-12-02 21:33:10 28 4
gpt4 key购买 nike

我正在使用 plotrix 包中的 taylor.diagram 函数,例如

obs = runif(100,1,100)
mod1 = runif(100,1,100)
mod2 = runif(100,1,100)
mod3 = runif(100,1,100)
taylor.diagram(obs,mod1)
taylor.diagram(obs,mod2,add=TRUE)
taylor.diagram(obs,mod3,add=TRUE)

enter image description here

在传统的泰勒图中没有偏差,但在他的论文中(Taylor, 2001, K.E. Summarizing multiple aspects of model performance in a single diagram Taylor JGR, 106, 7183-7192)Taylor 说

“虽然该图表旨在传达有关居中模式差异的信息,但也可以指示总体均值的差异(即偏差)。这可以通过附加到每个标绘点在图表上完成与由点和引用点定义的直线成直角绘制的线段。如果附加线段的长度等于偏差,则从引用点到线段末端的距离将等于总(非中心)RMS 误差”

我承认我不知道从哪里开始尝试做这件事。有没有人成功地将此信息添加到绘图中?

最佳答案

如果我理解正确,偏差是模型向量和观察向量之间的均值差异。然后,问题是,(a)找到观测点和模型点之间的线,(b)找到垂直于这条线的线,(c ) 沿着垂直线找到一个点,距离模型点的距离等于偏差。

一个可能的解决方案是:

taylor.bias <- function(ref, model, normalize = FALSE){
R <- cor(model, ref, use = "pairwise")
sd.f <- sd(model)
sd.r <- sd(ref)
m.f <- mean(model)
m.r <- mean(ref)

## normalize if requested
if (normalize) {
m.f <- m.f/sd.r
m.r <- m.r/sd.r
sd.f <- sd.f/sd.r
sd.r <- 1
}

## calculate bias
bias <- m.f - m.r

## coordinates for model and observations
dd <- rbind(mp = c(sd.f * R, sd.f * sin(acos(R))), rp = c(sd.r, 0))

## find equation of line passing through pts
v1 <- solve(cbind(1, dd[,1])) %*% dd[,2]

## find perpendicular line
v2 <- c(dd[1,2] + dd[1,1]/v1[2], -1/v1[2])

## find point defined by bias
nm <- dd[1,] - c(0, v2[1])
nm <- nm / sqrt(sum(nm^2))
bp <- dd[1,] + bias*nm

## plot lines
arrows(x0 = dd[1,1], x1 = bp[1], y0 = dd[1,2], y1 = bp[2], col = "red", length = 0.05, lwd = 1.5)
lines(rbind(dd[2,], bp), col = "red", lty = 3)
lines(dd, col = "red", lty = 3)
}

然后,

library(plotrix)
obs = runif(100,1,100)
mod1 = runif(100,1,100)
taylor.diagram(obs,mod1)
taylor.bias(obs,mod1)

其中红色矢量的长度表示偏差,连接矢量尖端和引用点的虚线长度是 RMS 误差。红色矢量的方向表示偏差的符号——在下图中,负偏差。

enter image description here

关于r - 在 R 中的泰勒图中添加偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com