0

我正在使用下面的代码来计算两个数据集之间的相关图。这段代码运行良好,我得到的结果如下所示:![在此处输入图像描述]![在此处输入图像描述][1]。

我还想获得另一张地图,显示在计算每个像素时使用了多少对,所以我得到 N 的长图和相关图。根据 Paul Hiemstra,这个函数给出了 cor 和 N:

 cor_withN = function(...) {
      cor_obj = cor.test(...)
       print(sprintf("N = %s", cor_obj$parameter + 2))
       return(data.frame(cor = cor_obj$estimate, N = cor_obj$parameter + 2))
                          }
          cor_withN(runif(100), runif(100))
             [1] "N = 100"
                   cor   N
            cor 0.1718225 100 

当我简单地将 cor 替换为 cor_withN 时,出现此错误:

    Error in cor.test.default(...) : not enough finite observations

如何在我的代码中暗示这个函数来获得两个相关图和 N 值?

4

1 回答 1

1

1.错误

Error in cor.test.default(...) : not enough finite observations

根据corr.test来源(http://svn.r-project.org/R/trunk/src/library/stats/R/cor.test.R),此错误可能出现在两种情况下:

  1. 您正在使用 Pearson 相关性并且有少于 3 对有限的观察值。
  2. 您正在使用 Kendall 或 Spearman 的相关性并且少于 2 对。

确实,cor.test(c(1,2), c(2,3))导致完全相同的错误,同时cor(c(1,2), c(2,3))给出了答案。

请注意,cor.test用于complete.cases(x,y)计算。因此,请查看您的数据 - 某处可能没有足够的配对。

2.功能

cor返回numeric值,您的函数corr_withN返回data.frame. 所以,看起来你不能简单地一个一个地替换

据我了解,您只需要一个大小矩阵,1440x720它将绘制在地图上。在这种情况下,您可以只使用cor第一个绘图,并返回用于计算第二个相关性的对数的简单函数。函数本身可以很简单:

cor_withN <- function(...) {
  cor.test(...)$parameter+2
}

更新:评论后

如果在少于 3 对时cor_withN必须返回,则应修改:NA

cor_withN <- function(...) {
  res <- try(cor.test(...)$parameter+2, silent=TRUE)
  ifelse(class(res)=="try-error", NA, res)
}

此函数尝试计算相关性,如果失败,则返回NA或返回对数。

于 2013-01-30T21:32:00.390 回答