| Error 🚨
base::stop("infinite or missing values in 'x'")
관련 글에서도 적었지만, 이 문제는 Github에 있는 문의글을 보니 아직 공식적으로 해결되지 못하고 있다.
일단 차선으로 결과를 얻을 수 있는 방법은 존재한다.
| 해결법
1. 각 그룹의 샘플수가 많아야 한다.
모든 통계 방법이 그렇듯 샘플 수가 많아야 좋은 결과를 얻을 수 있다. 위의 에러 메시지는 보통 총 샘플수가 30, 40 이하이거나, 각 그룹 간의 샘플 수 차이가 많이 나거나, 한 그룹의 샘플 수가 10개 이하일 경우 나타났다.
2. bootstrap_fraction 값을 default값인 2/3보다 높게 잡아야 한다.
이는 bootstrap에서 반복할 샘플의 수를 전체 샘플에서 어느 정도를 잡는지 설정하는 것이다. 이는 샘플이 불균형할 때 생기는 문제이다.
- 만약 A그룹과 B그룹 샘플이 11, 4개 일 때 전체 16개 샘플 중 10개를 랜덤으로 추출해서 돌리게 된다. 이때 A그룹만 10개가 뽑히면 에러가 나는 것이다.
- 특히 각 그룹의 샘플의 수가 10개 이하일 때, 극단적으로 9/10으로 바꾼 뒤 돌려보면 결과가 생성되는 경우가 종종 있다.
3. bootstrap_n값을 낮춰야 한다.
bootstrap_n의 default값은 30이다. 이 수도 통계를 접한 사람들은 매우 적게 느껴질 것이다.
일단 lefse논문을 찾아보진 않았지만, lefse를 기본으로 분석하는 도구(mothur, microceco 등)에서 bootstrap값이 모두 30이 default값이다. 그러므로 Gaxaly의 lefse 자체의 bootstrap 기본 값이 30일 것으로 추정된다.
하지만 lefse분석을 해본 사람이라면, 분석 마다 결괏값이 조금씩 다르게 나온 것을 알 수 있을 것이다. 이는 여러 가지 데이터의 편향이 bootstrap을 거치면서 생긴 변화로 추정된다.
그러나 논문의 데이터는 재현성이 있어야 한다. 그러므로 본인의 샘플 수가 많다면 bootstrap_n = 999 ( 9999는 계산시간이 너무 오래걸린다)을 잡고 시작해 보자. 만약 base::stop("infinite or missing values in 'x'") 에러가 또 발생한다면, 500 -> 300 -> 100 -> 50 이렇게 줄여나가는 것이 좋을 것 같다.
--
맘 편하게 Gaxaly module에서 lefse분석을 수행하려고 하니까, 현재 (2023.06.09) 알 수 없는 에러(File “/galaxy_venv/bin/lefse_run.py”, line 33)로 실행이 되지 않고 있다. 2023.06.08일부터 이에 관한 문의가 올라와 있다.