如何用Python Pandas将R的Tukey HSD检验表转换为相关矩阵
解决TukeyHSD校正p值矩阵重排问题
步骤1:拆分组对索引
先把DataFrame的组对索引(如50-0)拆成两个分组列,对应矩阵的行和列:
import pandas as pd import numpy as np # 假设你的DataFrame名为tukey_df tukey_df[['row_group', 'col_group']] = tukey_df.index.str.split('-', expand=True)
步骤2:构建初始矩阵
用pivot方法将拆分后的分组转为行列,填充对应p值:
# 生成初始矩阵,未出现的组对会显示缺失值 pivot_matrix = tukey_df.pivot(index='row_group', columns='col_group', values='p adj')
步骤3:补全对称位置的p值
组对A-B和B-A的校正p值完全一致,用转置矩阵补全缺失的对称位置:
# 合并原矩阵与转置矩阵,补全对称位置的p值 pivot_matrix = pivot_matrix.combine_first(pivot_matrix.T)
步骤4:整理行列顺序并填充对角线
指定时间组的正确排序,确保矩阵行列按0、5、10...60排列,同时将对角线(同一组比较)的p值设为1(或NaN,按需调整):
# 定义时间组的正确顺序 time_order = ['0', '5', '10', '20', '30', '40', '50', '60'] # 重新索引,确保行列包含所有时间组 pivot_matrix = pivot_matrix.reindex(index=time_order, columns=time_order) # 填充对角线(同一组比较无统计意义,设为1) np.fill_diagonal(pivot_matrix.values, 1.0)
处理后的pivot_matrix就是目标矩阵:行和列均为时间组,对应位置为两组间的校正p值,对角线为1。
内容的提问来源于stack exchange,提问作者Tiago Prazeres
相关产品推荐
相关产品推荐

