TableOne-统计检验一体化

1 基本介绍

TableOne是一个很简单实用的小工具,能对数据进行基本统计展示

基本特性:

  • 给出指定列的缺失情况和基本信息(均值方差)
  • 基于pandas的DataFrame结构存储结果,方便格式转换
  • 可灵活制定统计检验与对比分析策略
  • 参数丰富,支持简单的数据预处理与输出格式限制

使用注意事项:

  • 默认会将列转换为数值型,类别型变量可通过参数categorical显式指定
  • 支持第三方的统计检验方法,但需要人为规范输出格式
  • 检验差异性时会根据数据特性自动调整检验方法(正态数值变量使用t检验;非正态数值型变量使用卡方检验;非数值型变量使用秩和检验)

2 简单上手

先了解数据分布与统计检验情况

import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
%matplotlib inline
from tableone import TableOne, load_dataset

data = load_dataset('pn2012')
table1 = TableOne(data, dip_test=True, normal_test=True, tukey_test=True)

表格结果如下:

Missing Overall
n 1000
Age, mean (SD) 0 65.0 (17.2)
SysABP, mean (SD) 291 114.3 (40.2)
Height, mean (SD) 475 170.1 (22.1)
Weight, mean (SD) 302 82.9 (23.8)
ICU, n (%) CCU 0 162 (16.2)
CSRU 202 (20.2)
MICU 380 (38.0)
SICU 256 (25.6)
MechVent, n (%) 0 0 540 (54.0)
1 460 (46.0)
LOS, mean (SD) 0 14.2 (14.2)
death, n (%) 0 0 864 (86.4)
1 136 (13.6)

检验结果如下:

[1] Hartigan's Dip Test reports possible multimodal distributions for: Age, SysABP, Height, LOS.
[2] Normality test reports non-normal distributions for: Age, SysABP, Height, Weight, LOS.
[3] Tukey test indicates far outliers in: Height, LOS.

再进行对比分析,查看差异性:

# 指定需要纳入分析的变量
columns = ['Age', 'SysABP', 'Height', 'Weight', 'ICU', 'death']
categorical = ['ICU'] # 指定类别型变量
nonnormal = ['Age'] # 指定非正态的数值型变量
groupby = ['death'] # 指定分组策略(需要是类别型变量)
table3 = TableOne(data, columns, categorical, groupby, nonnormal, pval = True, smd=True,
                  htest_name=True)

结果如下:

Missing Overall 0 1 P-Value Test SMD (0,1)
n 1000 864 136
Age, median [Q1,Q3] 0 68.0 [53.0,79.0] 66.0 [52.8,78.0] 75.0 [62.0,83.0] <0.001 Kruskal-Wallis 0.487
SysABP, mean (SD) 291 114.3 (40.2) 115.4 (38.3) 107.6 (49.4) 0.134 Two Sample T-test -0.176
Height, mean (SD) 475 170.1 (22.1) 170.3 (23.2) 168.5 (11.3) 0.304 Two Sample T-test -0.099
Weight, mean (SD) 302 82.9 (23.8) 83.0 (23.6) 82.3 (25.4) 0.782 Two Sample T-test -0.031
ICU, n (%) CCU 0 162 (16.2) 137 (15.9) 25 (18.4) <0.001 Chi-squared 0.490
CSRU 202 (20.2) 194 (22.5) 8 (5.9)
MICU 380 (38.0) 318 (36.8) 62 (45.6)
SICU 256 (25.6) 215 (24.9) 41 (30.1)

其他常用参数与作用:

  • rename:对变量进行重命名,比如rename = {'sex':'gender', 'trt':'treatment'}
  • limit:限制类别型变量只显示最常见的N个类别数,比如limit = {'sex': 1}
  • order:指定类别型变量的顺序,比如order = {'sex': ['f', 'm', 'other']}
  • decimals:限制数值型变量的小数位数:比如decimals = {'age': 0}
  • dip_test:是否使用Hartigan's Dip检验分布的单峰性
  • normal_test:是否使用scipy.stats.normaltest检验分布的正态性
  • tukey_test:是否使用Tukey检验分布的异常值/离群点

参考

官方文档 官方 jupyter notebook 示例

#TableOne #假设检验

<a href="/tag/tableone.html" class="article_tag">TableOne</a> <a href="/tag/jia-she-jian-yan.html">假设检验</a>

往年同期文章