如何获得N值和pearson相关性?

时间:2013-01-30 15:34:31

标签: r correlation

我正在使用下面的代码计算两个数据集之间的相关性图。这个代码工作正常,我得到的结果如下:![在此处输入图像描述]![在此输入图像描述] [1]。< / p>

我还希望得到另一张地图,显示在计算每个像素时使用了多少对,因此我得到了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_withN替换cor时,我收到了这个错误:

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

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

1 个答案:

答案 0 :(得分: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对。
  3. 确实,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
    }
    

    更新:发表评论后

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

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

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