相関係数を算出する為に cor.test を使っていた所、「not enough finite observations」が発生しました。
データの数が少ないことが原因の様ですが対処の為に調べてみました。
結果として必要なデータ数は method によって次の通りでした。
- pearson は 3 つ以上
- kendall か spearman は 2 つ以上
NA 除外後、最低でも上記のデータ数が残るもので算出すれば良さそうです。
除外の例
R のサンプルデータ iris で試します。
iris 自体はデータが揃っているので、エラーになるダミーのデータを追加してみます。
iris_dummy <- iris
iris_dummy$Species <- as.character(iris_dummy$Species)
iris_dummy <- rbind(iris_dummy, list(1, 1, 1, 1, "japonica"))エラーになることを確認します。
library(tidyverse)
iris_dummy %>%
  dplyr::group_by(Species) %>%
  dplyr::summarise(cor = cor.test(Sepal.Length, Petal.Length)$estimate)Error in `dplyr::summarise()`:
! Problem while computing `cor = cor.test(Sepal.Length,
  Petal.Length)$estimate`.
ℹ The error occurred in group 1: Species = "japonica".
Caused by error in `cor.test.default()`:
! not enough finite observations除外してみます。
iris_dummy %>%
  na.omit() %>%
  dplyr::group_by(Species) %>%
  dplyr::summarise(count = n()) %>%
  dplyr::filter(count >= 2) %>%
  dplyr::inner_join(iris_dummy, by = c("Species")) %>%
  dplyr::group_by(Species) %>%
  dplyr::summarise(cor = cor.test(Sepal.Length, Petal.Length)$estimate)A tibble: 3 × 2
Species	cor
<chr>	<dbl>
setosa	0.2671758
versicolor	0.7540490
virginica	0.8642247データ数が足りない japonica が除外できました。
参考:必要データ数の確認
必要なデータ数は、cor.test のソースコードからのものです。
if(method == "pearson") {
	if(n < 3L)
	    stop("not enough finite observations")
(中略)
else {
	if(n < 2)
	    stop("not enough finite observations") 
 


コメント