ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • anndata의 값이 raw cnt인지 확인하는 법
    Note 2025. 3. 6. 17:51

    AnnData X가 log1p 변환되지 않은 raw count인지 확인하는 방법

    1. 최소값 확인

    log1p 변환이 된 데이터는 최소값이 0 이상입니다.
    하지만 raw count 데이터는 0 또는 자연수(정수) 값이므로, 최소값이 0 이하인지 확인하면 됩니다.

    import numpy as np
    
    min_value = np.min(adata.X)
    print(f"Minimum value in X: {min_value}")
    

    결과 해석

    • min_value >= 0: log1p 변환되었을 가능성이 높음.
    • min_value < 0: 비정상적인 데이터. (log1p 변환이 잘못 적용되었을 가능성)
    • min_value == 0: 아직 raw count일 가능성이 있음.

    2. 정수값 여부 확인

    raw count 데이터는 항상 정수값을 가집니다.
    반면 log1p 변환된 데이터는 대부분 소수점 값을 포함합니다.

    is_integer = np.all(adata.X == np.floor(adata.X))
    print(f"All values are integers: {is_integer}")
    

    결과 해석

    • True: Raw count일 가능성이 높음.
    • False: log1p 변환되었을 가능성이 높음.

    3. 특정 유전자의 값 직접 확인

    gene_name = "GAPDH"  # 확인하고 싶은 유전자 이름
    if gene_name in adata.var_names:
        gene_idx = adata.var_names.get_loc(gene_name)
        print(adata.X[:, gene_idx][:10])  # 처음 10개 샘플 출력
    

    결과 해석

    • 값이 0, 1, 2, ...처럼 정수로 되어 있다면 → Raw count 데이터.
    • 값이 0.693, 1.099, ...처럼 실수형이면 → log1p 변환됨.

    4. log1p 변환 후 차이 비교

    log1p 변환을 적용하고 이전 값과 차이를 비교하면, 기존에 변환이 되었는지 확인 가능.

    import scanpy as sc
    
    adata_copy = adata.copy()
    sc.pp.log1p(adata_copy)
    
    diff = np.abs(adata_copy.X - adata.X).mean()
    print(f"Mean difference after log1p transformation: {diff}")
    

    결과 해석

    • diff ≈ 0: 이미 log1p 변환이 되어 있었음.
    • diff > 0: 원본이 raw count였고, log1p를 적용하면 값이 달라짐 → raw count 데이터.

    📌 최종 판단 기준

    min(X) < 0 → 데이터가 손상되었을 가능성 있음.
    X가 정수로만 구성 (is_integer=True) → Raw count 데이터 가능성 높음.
    log1p 변환 후 값 차이가 발생 (diff > 0) → Raw count 데이터였을 가능성 높음.

    세 가지 방법을 종합적으로 확인하면, adata.X가 raw count인지 log1p 변환된 데이터인지 알 수 있음.

    'Note' 카테고리의 다른 글

    NVIDIA driver, CUDA, torch  (0) 2025.03.05
    0203-0217  (0) 2025.02.17
    0120-0126  (0) 2025.01.20
Designed by Tistory.