我正在尝试为一组数据创建置信区间不随机分布并且在右侧非常倾斜。冲浪,我发现了一个非常粗鲁的方法,包括使用97.5%百分位数(我的数据)用于上限CL和2.5%百分位数用于较低CL。 不幸的是,我需要一种更复杂的方式!
然后我发现了 bootstrap ,精确了MATLAB bootci函数,但我很难找到如何正确使用它。
假设M
是包含我的数据的矩阵(19x100),让我们说:
Mean = mean(M,2);
StdDev = sqrt(var(M'))';
如何使用bootci计算Mean
向量的每一行的非对称 CI?
注意:早些时候,我是以非常错误方式计算CI:Mean +/- 2 * StdDev
,对我感到羞耻!
答案 0 :(得分:1)
假设您有一个100x19
数据集。每列具有不同的分布。我们将选择对数正态分布,使它们偏向右侧。
means = repmat(log(1:19), 100, 1);
stdevs = ones(100, 19);
X = lognrnd(means, stdevs);
请注意,每个列来自同一个分布,行是单独的观察。默认情况下,MATLAB中的大多数函数都对行进行操作,因此最好以这种方式保存数据。
您可以使用bootci
函数计算均值的自举置信区间。
ci = bootci(1000, @mean, X);
这会对您的数据进行1000次重新采样,计算每次重采样的平均值,然后采用2.5%和97.5%的分位数。为了表明它是关于均值的不对称置信区间,我们可以绘制每列的均值和置信区间
plot(mean(X), 'r')
hold on
plot(ci')