医学统计学从入门到精通:基础概念与代码实例
医学统计学从入门到精通:基础概念与代码实例
医学统计学是医疗研究和公共卫生领域中不可或缺的分析工具,用于理解数据背后的规律和趋势,从而指导临床决策和政策制定。本文将带您从基础入门逐步掌握医学统计学的核心概念,附带Python代码示例,帮助您将理论知识应用到实际数据分析中。
数据的基本描述与分布分析
描述性统计是医学统计的第一步,用于了解数据的中心趋势和分布情况。常用的描述性统计指标包括均值、中位数、标准差和四分位数。
示例:加载数据并进行基本描述
import pandas as pd
# 假设我们有一份患者的血压、年龄、和性别数据
data = {
'Age': [23, 35, 45, 50, 29, 65, 72, 53, 43, 60],
'BloodPressure': [120, 130, 110, 140, 135, 145, 150, 132, 125, 138],
'Gender': ['M', 'F', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F']
}
df = pd.DataFrame(data)
# 计算基本描述性统计
desc_stats = df.describe()
print(desc_stats)
以上代码将输出Age和BloodPressure的平均值、标准差、最小值和最大值等信息。这些统计指标有助于初步了解数据的分布情况。
数据分布分析
数据分布分析帮助我们判断数据是否符合某种统计分布(如正态分布),这在后续的假设检验中尤为重要。常用方法包括绘制直方图、Q-Q图和Shapiro-Wilk正态性检验。
示例:正态性检验
import matplotlib.pyplot as plt
import scipy.stats as stats
# 绘制血压的直方图
plt.hist(df['BloodPressure'], bins=5, color='skyblue', edgecolor='black')
plt.title('Blood Pressure Distribution')
plt.xlabel('Blood Pressure')
plt.ylabel('Frequency')
plt.show()
# 正态性检验
stat, p = stats.shapiro(df['BloodPressure'])
print(f'Shapiro-Wilk Test: Statistic={stat}, p-value={p}')
在医学研究中,假设检验是分析数据分布的重要工具。Shapiro-Wilk检验的p值用于判断数据是否符合正态分布。
假设检验:t检验和卡方检验
假设检验是统计推断的核心,在医学统计中主要用于验证研究假设是否成立。常用的假设检验包括t检验和卡方检验。
t检验用于比较两组数据的均值是否存在显著差异,常用于实验组和对照组的数据比较。
示例:双样本t检验
假设我们有两个样本组的血压数据,分别为实验组和对照组:
# 实验组和对照组的血压数据
group1 = [120, 132, 115, 130, 125]
group2 = [140, 135, 150, 145, 138]
# 进行独立样本t检验
t_stat, p_val = stats.ttest_ind(group1, group2)
print(f'T-test: t-statistic={t_stat}, p-value={p_val}')
根据t值和p值的结果,我们可以判断两组数据的均值是否存在显著性差异(通常以p < 0.05为显著性标准)。
卡方检验主要用于分类数据,检查观察到的频率与期望频率是否有显著差异,常用于性别与疾病状态的关系分析。
示例:卡方检验
# 假设我们有一个列联表,表示性别与是否患病的频数
contingency_table = pd.DataFrame([[20, 30], [15, 35]], columns=['Disease', 'No Disease'], index=['Male', 'Female'])
# 进行卡方检验
chi2, p, dof, expected = stats.chi2_contingency(contingency_table)
print(f'Chi-square Test: chi2={chi2}, p-value={p}, dof={dof}')
卡方检验的结果包括chi2值和p值,用于判断变量之间是否存在显著性关联。
回归分析:线性回归与逻辑回归
线性回归
线性回归用于预测因变量和自变量之间的关系,在医学统计中常用于分析连续变量之间的关联性,例如年龄与血压之间的关系。
示例:线性回归分析
import statsmodels.api as sm
# 自变量(年龄)和因变量(血压)
X = df['Age']
y = df['BloodPressure']
X = sm.add_constant(X) # 添加常数项
# 进行线性回归
model = sm.OLS(y, X).fit()
print(model.summary())
model.summary()显示回归系数、显著性水平和拟合优度指标,用于判断自变量对因变量的影响强度。
逻辑回归
逻辑回归适用于二分类变量,如“是否患病”。在医学研究中,逻辑回归常用于分析患者特征与疾病状态之间的关系。
示例:逻辑回归分析
from sklearn.linear_model import LogisticRegression
import numpy as np
# 生成是否患病的标签(0:未患病,1:患病)
df['HasDisease'] = [0, 1, 0, 1, 0, 1, 1, 0, 1, 1]
# 自变量(年龄和性别)和因变量(是否患病)
X = pd.get_dummies(df[['Age', 'Gender']], drop_first=True)
y = df['HasDisease']
# 进行逻辑回归
model = LogisticRegression()
model.fit(X, y)
print(f'Logistic Regression Coefficients: {model.coef_}, Intercept: {model.intercept_}')
逻辑回归输出的回归系数和截距可以帮助我们理解特征对患病风险的影响。
生存分析
在医学研究中,生存分析用于研究时间数据,常用于评估患者的生存期。常见方法包括Kaplan-Meier曲线和Cox比例风险模型。
示例:Kaplan-Meier曲线
from lifelines import KaplanMeierFitter
# 假设我们有10名患者的生存时间和是否存活(1表示死亡,0表示存活)
T = [5, 10, 12, 15, 18, 20, 25, 30, 35, 40] # 生存时间
E = [1, 1, 0, 1, 0, 1, 1, 0, 1, 1] # 是否死亡
kmf = KaplanMeierFitter()
kmf.fit(T, event_observed=E)
# 绘制Kaplan-Meier生存曲线
kmf.plot_survival_function()
plt.title('Kaplan-Meier Survival Curve')
plt.xlabel('Time')
plt.ylabel('Survival Probability')
plt.show()
通过上述示例和代码,我们从描述性统计、假设检验、回归分析到生存分析逐步探索了医学统计学的核心方法。掌握这些工具和技术后,您可以更有效地开展医学数据的统计分析,为临床决策提供科学依据。