如何使用Python计算DataFrame每行置信区间并计算、对比区间宽度
错误原因
你写的代码执行失败的核心原因是:df.apply(..., axis=1)返回的是元素为置信区间元组的Series对象,你直接加[0]/[1]取的是整个Series的第0行、第1行元素,而不是每行元组内部的上下限值。
正确实现方法
优先推荐复用你已经计算好的CI列,不需要重复执行置信区间计算,性能更高:
# 直接提取每行CI元组的上下限做差,保留2位小数 df['width'] = df['CI'].apply(lambda x: round(x[1] - x[0], 2))
如果你不想提前生成CI列,想要一步计算得到宽度,也可以用以下写法:
df['width'] = df.apply( lambda row: round( stats.t.interval(0.95, len(row)-1, loc=np.mean(row), scale=stats.sem(row))[1] - stats.t.interval(0.95, len(row)-1, loc=np.mean(row), scale=stats.sem(row))[0], 2 ), axis=1 )
补充说明
你当前代码中置信区间的自由度用的是len(df)-1(即DataFrame总行数减1),如果你是对每行的多个数值计算置信区间,统计上正确的自由度应该是每行的样本量减1,也就是len(row)-1,可以根据你的实际统计场景调整参数。
内容的提问来源于stack exchange,提问作者Niam45
相关产品推荐
相关产品推荐

