【问题标题】:Calculating confidence intervals for a non-normal distribution计算非正态分布的置信区间
【发布时间】:2011-05-28 11:17:57
【问题描述】:

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

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

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

我知道有 'quantile' 和 'prctile' 函数,但我不确定这是否是我需要使用的。函数“mle”还返回正态分布数据的置信区间,但您也可以提供自己的 pdf。

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

另外,我将如何确定我的数据是否是正态分布的。我的意思是我目前可以通过查看 ksdensity 的直方图或 pdf 来判断,但是有没有办法定量测量它?

谢谢!

【问题讨论】:

  • 你能用数字得到置信区间吗?还是引导它?现在电子很便宜。

标签: matlab normal-distribution confidence-interval


【解决方案1】:

我没有用过Matlab,但是根据我对统计学的理解,如果你的分布不能被假设为正态分布,那么你必须把它当作Student t分布,计算置信区间和准确率。

http://www.stat.yale.edu/Courses/1997-98/101/confint.htm

【讨论】:

    【解决方案2】:

    您可以使用[1]中提出的方法:

    MEDIAN +/- 1.7(1.25R / 1.35SQN)
    

    其中 R = 四分位距, SQN = N 的平方根

    这通常用于缺口箱线图,这是一种用于非正态数据的有用数据可视化。如果两个中位数的缺口不重叠,则在大约 95% 的置信水平下,中位数近似显着不同。

    [1] McGill, R., J. W. Tukey 和 W. A. Larsen。 “箱线图的变体”。美国统计学家。卷。 32,第 1 期,1978 年,第 12-16 页。

    【讨论】:

      【解决方案3】:

      您也可以考虑通过 bootci 函数使用引导。

      【讨论】:

        【解决方案4】:

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

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

        y = prcntile(x, [5 50 95])
        

        这将在 [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%')
        

        【讨论】:

          【解决方案5】:

          所以这里有几个问题。这里有一些建议

          你说得对,1000 个样本的平均值应该是正态分布的(除非你的数据是“重尾”,我假设情况并非如此)。要获得平均值的1-alpha-置信区间(在您的情况下为alpha = 0.05),您可以使用“norminv”函数。例如,假设我们想要数据样本X 的平均值为 95% CI,那么我们可以输入

          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
          

          可以通过多种方式测试数据样本是否为正态分布。一种简单的方法是使用 QQ 图。为此,请使用 'qqplot(X)' 其中X 是您的数据样本。如果结果近似为一条直线,则样本是正常的。如果结果不是一条直线,则样本不正常。

          比如X = exprnd(3,1000,1)如上,样本非正态,qqplot非常非线性:

          X = exprnd(3,1000,1);
          qqplot(X);
          

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

          qqplot(randn(1000,1))
          

          【讨论】:

          • 那么你的方法适用于非均匀数据?为了提供更多背景知识,我正在使用一个由两个变量组成的函数的模型来获取不同频率的值;方向和长度。我运行这个模型 1000 次,同时从正态分布中选择随机方向和长度。我得到的结果是一个非正态分布的 1,000 个样本向量。当我使用你的方法时,95% CI 似乎非常小:平均值=4.29,CI=[4.20 4.37]。我会期待更大的东西。
          • 也许我误解了 - 您是在寻找平均值的 95% CI,还是随机数据点。
          • 也许我对置信区间的理解是错误的。置信区间是否通常是相对于平均值的值,其中另一个样本有 95% 的机会落在该范围内?在这种情况下,我想是的,我正在寻找平均值的 95% CI,这样我就可以很好地了解新数据样本的预期范围。
          • 置信区间是这样的,即您有 95% 的把握 真实均值 位于区间内,这就是您得到如此小的范围的原因,因为作为样本量变大,区间缩小到一个数字 - 分布的实际平均值。所以我上面描述的并不是你想要的。相反(正如你提到的)有两种可能性。 1.如果你的数据正常,那么mean(X) +- norminv(.95)*std(X)会给出你想要的区间。或者2.如果数据不正常,可以使用分位数来估计这些点:quantile(X,[.05, .95])
          • @MarkV:感谢您的详尽回答,给了我一些见解(+1)但是,我不确定我是否了解所涉及的不同分布:人口(例如 {p_1,.. ..,p_1000}) 是非正态分布的,但是如果您选择样本(例如 {s_1,...,s_n}),这些样本是否正态分布在 {1,...,1000} 上?如果 n 很小,则样本在 {1,...,1000} 上是 t 分布的?而对于置信区间,只有 {1,...,1000} 上的样本分布是相关的?
          猜你喜欢
          • 1970-01-01
          • 2018-09-21
          • 1970-01-01
          • 2017-08-16
          • 1970-01-01
          • 1970-01-01
          • 2015-08-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多