【发布时间】:2020-06-24 12:17:53
【问题描述】:
我正在使用seaborn.catplot 和kind='point' 来绘制我的数据。我想使用 与 seaborn 相同的方法 计算每个色调变量和每个类别的平均值 (SEM) 的标准误差,以确保我的计算值与绘制的误差条完全匹配。计算 SEM 和 95% 置信区间 (CI) 的默认解决方案包含自举算法,其中均值自举 1000 次以计算 SEM/CI。在earlier post 中,我看到了一种可能为此提供功能的方法(使用seaborn.utils.ci() 和seaborn.algorithms.bootstrap() 等seaborn 源代码功能),但我不知道如何实现它。由于 bootstrapping 使用随机抽样,因此还需要确保为绘图和获取 SEM 生成相同的 1000 个均值数组。
这是一个代码示例:
import numpy as np
import pandas as pd
import seaborn as sns
# simulate data
rng = np.random.RandomState(42)
measure_names = np.tile(np.repeat(['Train BAC','Test BAC'],10),2)
model_numbers = np.repeat([0,1],20)
measure_values = np.concatenate((rng.uniform(low=0.6,high=1,size=20),
rng.uniform(low=0.5,high=0.8,size=20)
))
folds=np.tile([1,2,3,4,5,6,7,8,9,10],4)
plot_df = pd.DataFrame({'model_number':model_numbers,
'measure_name':measure_names,
'measure_value':measure_values,
'outer_fold':folds})
# plot data as pointplot
g = sns.catplot(x='model_number',
y='measure_value',
hue='measure_name',
kind='point',
seed=rng,
data=plot_df)
产生:
我想获取两种模型的所有训练和测试分数的 SEM。那就是:
# obtain SEM for each score in each model using the same method as in sns.catplot
model_0_train_bac = plot_df.loc[((plot_df['model_number'] == 0) & (plot_df['measure_name'] == 'Train BAC')),'measure_value']
model_0_test_bac = plot_df.loc[((plot_df['model_number'] == 0) & (plot_df['measure_name'] == 'Test BAC')),'measure_value']
model_1_train_bac = plot_df.loc[((plot_df['model_number'] == 1) & (plot_df['measure_name'] == 'Train BAC')),'measure_value']
model_1_test_bac = plot_df.loc[((plot_df['model_number'] == 1) & (plot_df['measure_name'] == 'Test BAC')),'measure_value']
【问题讨论】:
标签: python seaborn confidence-interval