在应用SPSS进行倾向性评分匹配(Propensity Score Matching, PSM)时,基线不平衡是一个常见的问题。基线不平衡指的是在处理组和对照组之间,某些关键变量的分布存在显著差异。以下是可能导致基线不平衡的原因以及相应的解决方法。

原因分析

1. 样本选择偏差

在数据收集过程中,由于各种原因(如抽样方法、数据录入等),可能导致处理组和对照组在某些变量上存在系统性的差异。

2. 数据质量问题

数据质量问题,如缺失值、异常值等,可能导致处理组和对照组在某些变量上的分布不均衡。

3. 治疗效应的即时性

某些治疗可能在短期内就产生了显著效果,导致处理组在某些变量上的基线值低于对照组。

4. 外部因素

如社会经济地位、地域差异等外部因素,也可能导致处理组和对照组在某些变量上的分布不均衡。

解决方法

1. 数据清洗

在匹配之前,对数据进行清洗,包括处理缺失值、异常值等。可以使用均值、中位数或众数等方法填充缺失值,对异常值进行修正或删除。

import pandas as pd

# 假设df是原始数据集
df = pd.DataFrame({
    'group': ['control', 'treatment', 'control', 'treatment'],
    'age': [25, 30, 22, 28],
    'gender': ['male', 'female', 'female', 'male'],
    'income': [50000, 60000, 45000, 55000]
})

# 处理缺失值
df['age'].fillna(df['age'].mean(), inplace=True)
df['income'].fillna(df['income'].mean(), inplace=True)

# 处理异常值
df = df[(df['age'] >= 18) & (df['age'] <= 60)]
df = df[(df['income'] >= 30000) & (df['income'] <= 80000)]

2. 标准化处理

对关键变量进行标准化处理,如Z-score标准化,以消除量纲和分布差异的影响。

from scipy.stats import zscore

df['age_z'] = zscore(df['age'])
df['income_z'] = zscore(df['income'])

3. 逐步匹配

逐步匹配(Stepwise Matching)是一种逐步调整匹配变量的方法,可以有效地解决基线不平衡问题。

from sklearn.linear_model import LogisticRegression

# 假设X是自变量,y是因变量
X = df[['age', 'gender', 'income']]
y = df['group']

# 创建倾向性评分模型
model = LogisticRegression()
model.fit(X, y)

# 计算倾向性评分
df['propensity'] = model.predict_proba(X)[:, 1]

# 根据倾向性评分进行匹配
df_sorted = df.sort_values(by='propensity')
df_matched = df_sorted.groupby('group').apply(lambda x: x.sample(n=len(x.groupby('group').apply(lambda y: y['group'].unique()[0]))))

# 检查匹配后的基线不平衡
df_matched['age'].describe()
df_matched['gender'].value_counts()
df_matched['income'].describe()

4. 使用外部数据

如果可能,尝试获取与关键变量相关的外部数据,以改善匹配效果。

5. 考虑外部因素

在分析过程中,考虑外部因素对处理组和对照组的影响,如社会经济地位、地域差异等。

总之,在SPSS进行倾向性评分匹配时,基线不平衡是一个需要关注的问题。通过以上方法,可以有效地解决基线不平衡问题,提高分析结果的可靠性。