来自现有相关和标准Dev值的Taylor图

时间:2014-05-25 10:56:24

标签: r

是否可以根据已计算的相关性和标准偏差值创建泰勒图?

我正在做模型评估,我已经有了相关性和标准偏差值。我知道已经有一个包 plotrix ,通过给出观察值和建模值,可以创建图表。然而,对于我正在进行的工作类型,通过给出相关性和标准偏差值开始更容易。

我有什么方法可以在R中做到这一点吗?

1 个答案:

答案 0 :(得分:3)

没有理由不可能,但作者在编写函数时似乎并不允许这样做。该函数有点长且复杂,但进行计算的部分位于顶部。可以交换该代码并替换它以允许传递摘要统计信息。现在,请记住我要做的是黑客攻击,我只测试了版本3.5-5的plotrix。其他版本可能无效。

这里将创建一个新函数taylor.diagram2,它从taylor.diagram获取所有代码,但在额外的if语句中添加以检查汇总数据列表作为第一个参数< / p>

taylor.diagram2<-taylor.diagram
bl<-as.list(body(taylor.diagram))
cond<-list(
    as.name("if"), 
    quote(is.list(ref) & missing(model)),               #condition
    quote({R<-ref$R; sd.r<-ref$sd.r; sd.f<-ref$sd.f}),  #if true 
    as.call(c(as.symbol("{"), bl[3:8])))                #else
bl<-c(bl[1:2], as.call(cond), bl[9:length(bl)])         #splice in new code
body(taylor.diagram2)<-as.call(bl)                      #update function

现在我们可以测试这个功能了。首先,我们将以标准方式做事

#test data
aref<-rnorm(30,sd=2)
amodel1<-aref+rnorm(30)/2

#standard behavior function
taylor.diagram2(aref,amodel1, main="Standard Behavior"))

#summarized data
xx<-list(
    R=cor(aref, amodel1, use = "pairwise"),
    sd.r=sd(aref),
    sd.f=sd(amodel1)
)

#modified behavior
taylor.diagram2(xx, main="Modified Behavior")

因此新的taylor.diagram2函数可以同时执行这两项操作。如果你传递两个向量,它将执行标准行为。如果您传递一个名为Rsd.rsd.f的列表,那么它将使用您传入的值执行相同的绘图。此外,{{1} }参数必须为空才能使修改后的版本生效。这意味着如果要设置任何其他参数,则必须使用命名参数而不是位置参数。

taylor plot comparison