相関係数を算出する為に 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")
コメント