0

以下のコードを使用して、2 つのデータセット間の相関マップを計算しています。このコードは正常に機能し、[ここに画像の説明を入力]![ここに画像の説明を入力][1] のような結果が得られました。

また、各ピクセルの計算に使用されたペアの数を表示する別のマップを取得したいので、相関マップで N a long のマップを取得します。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 値の 2 つのマップを取得するにはどうすればよいですか?

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 )によると、このエラーは次の 2 つの場合に表示されます。

  1. ピアソンの相関を使用しており、観測値の有限ペアが 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、最初のプロットに使用でき、2 番目の相関の計算に使用されるペアの数を返す単純な関数を使用できます。関数自体は次のように単純にすることができます。

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 に答える