计算非正态分布的置信区间

Jos*_*iah 10 matlab normal-distribution confidence-interval

首先,我应该说明我的统计知识相当有限,所以如果我的问题看似微不足道或者甚至没有意义,请原谅我.

我的数据似乎没有正常分布.通常情况下,当我绘制置信区间时,我会使用平均值+ - 2标准偏差,但我不认为这对于非均匀分布是可以接受的.我的样本量目前设置为1000个样本,这似乎足以确定它是否是正态分布.

我使用Matlab进行所有处理,因此Matlab中是否有任何函数可以轻松计算置信区间(比如说95%)?

我知道有'分位数'和'prctile'功能,但我不确定这是否是我需要使用的.函数'mle'也返回正态分布数据的置信区间,尽管您也可以提供自己的pdf.

我可以使用ksdensity为我的数据创建一个pdf,然后将该pdf输入到mle函数中以给我置信区间吗?

另外,我将如何确定我的数据是否正常分布.我的意思是我现在可以通过查看ksdensity的直方图或pdf来判断,但有没有办法对其进行定量测量?

谢谢!

Mar*_*rkV 10

所以有几个问题.以下是一些建议

你是正确的,应该正常分配1000个样本的平均值(除非你的数据是"重尾",我假设不是这种情况).要获得1-alpha均值的置信区间(在您的情况下alpha = 0.05),您可以使用'norminv'函数.例如,我们想要一个95%CI的平均数据样本X,然后我们可以输入

N = 1000;             % sample size
X = exprnd(3,N,1);    % sample from a non-normal distribution
mu = mean(X);         % sample mean (normally distributed)
sig = std(X)/sqrt(N); % sample standard deviation of the mean
alphao2 = .05/2;      % alpha over 2   
CI = [mu + norminv(alphao2)*sig ,...
      mu - norminv(alphao2)*sig  ]

CI =

2.9369    3.3126
Run Code Online (Sandbox Code Playgroud)

测试数据样本是否正常分布可以通过多种方式进行.一个简单的方法是QQ图.为此,请使用'qqplot(X)' X您的数据样本.如果结果大致为直线,则样本正常.如果结果不是直线,则样本不正常.

例如,如果X = exprnd(3,1000,1)如上所述,样本是非正常的,qqplot是非线性的:

X = exprnd(3,1000,1);
qqplot(X);
Run Code Online (Sandbox Code Playgroud)

替代文字

另一方面,如果数据正常,qqplot将给出一条直线:

qqplot(randn(1000,1))
Run Code Online (Sandbox Code Playgroud)

替代文字

  • 置信区间是这样的,你有95%确定*真实均值*位于区间内,这就是为什么你得到这么小的范围,因为随着样本量变大,区间缩小到一个数字 - 实际的分配平均值.所以我上面描述的并不完全是你想要的.相反(正如你所提到的)有两种可能性.1.*如果*你的数据是正常的,那么`mean(X)+ - norminv(.95)*std(X)`将给出你想要的间隔.或2.如果数据不正常,您可以使用分位数来估计这些点:`分位数(X,[.05,.95])` (2认同)

nim*_*odm 1

您确定需要置信区间还是仅需要 90% 的随机数据范围?

如果您需要后者,我建议您使用 prctile()。例如,如果您有一个向量保存随机变量的独立同分布样本,则可以通过运行获得一些有用的信息

y = prcntile(x, [5 50 95])
Run Code Online (Sandbox Code Playgroud)

这将在 [y(1), y(3)] 中返回 90% 的样本出现的范围。在 y(2) 中,您得到样本的中位数。

尝试以下示例(使用正态分布变量):

t = 0:99;
tt = repmat(t, 1000, 1);
x = randn(1000, 100) .* tt + tt;  % simple gaussian model with varying mean and variance
y = prctile(x, [5 50 95]);

plot(t,  y);
legend('5%','50%','95%')
Run Code Online (Sandbox Code Playgroud)