我有一个由四列和大约20000行组成的数据帧,如下所示。
import pandas as pd
import numpy as np
d = {'x': [1,1,0,1,0,0,1],'BPM':[70,55,45,np.nan,35,25,np.nan],'AGE': [50, 47,21, 50,24,47,16], 'WEIGHT': [50,100,50,np.nan,np.nan,100,27]}
df = pd.DataFrame(data=d)
x BPM AGE WEIGHT
1 70 50 50
1 55 47 100
0 45 21 50
1 nan 24 nan
0 35 50 nan
0 25 47 100
1 nan 16 27在匹配年龄和体重后,“1”级和“0”级之间的"BPM“是否有显著差异?
有两个类别:0和1。两个类别中的样本数量不相等。我知道,首先我必须匹配值,然后才能应用t-test。我是这个领域的新手,所以我不知道如何继续。
发布于 2021-08-23 12:22:19
你可以手工计算t分数。
mean_bpm_df = df.groupby(['AGE','WEIGHT','x']).mean().unstack(level=-1)
mean_bpm_df.columns = ['mean_bpm_0','mean_bpm_1']
std_count_df = df.drop(columns='x').groupby(['AGE','WEIGHT']).agg(['std','count'])
std_count_df.columns = ['std_bpm','count_bpm']
t_df = (mean_bpm_df.mean_bpm_0 - mean_bpm_df.mean_bpm_1) / (std_count_df.std_bpm / np.sqrt(std_count_df.count_bpm))现在,如果你也想要p值,这些也可以手工计算。假设采用双侧t检验(如果需要,可以对其进行修改)。
from scipy.stats import t
p_df = pd.DataFrame(index=t_df.index, data=2*(1 - t.cdf(abs(t_df), std_count_df.count_bpm-1)))https://stackoverflow.com/questions/68891122
复制相似问题