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
检验分布的异常值/离群点
参考
<a href="/tag/tableone.html" class="article_tag">TableOne</a> <a href="/tag/jia-she-jian-yan.html">假设检验</a>