Расчет доверительных интервалов для ненормального распределения - PullRequest
10 голосов
/ 20 декабря 2010

Во-первых, я должен указать, что мои знания статистики довольно ограничены, поэтому, пожалуйста, прости меня, если мой вопрос кажется тривиальным или, возможно, даже не имеет смысла.

У меня есть данные, которые не распространяются нормально. Как правило, когда я строю доверительные интервалы, я использую среднее ± 2 стандартных отклонения, но я не думаю, что это приемлемо для неравномерного распределения. Мой размер выборки в настоящее время установлен на 1000 выборок, что может показаться достаточным, чтобы определить, было ли это нормальное распределение или нет.

Я использую Matlab для всей моей обработки, поэтому есть ли в Matlab какие-либо функции, которые позволили бы легко рассчитать доверительные интервалы (скажем, 95%)?

Я знаю, что есть функции 'quantile' и 'prctile', но я не уверен, что это то, что мне нужно использовать. Функция 'mle' также возвращает доверительные интервалы для нормально распределенных данных, хотя вы также можете предоставить свой собственный pdf.

Могу ли я использовать ksdensity для создания PDF-файла для моих данных, а затем передать этот PDF-файл в функцию mle, чтобы получить доверительные интервалы?

Кроме того, как мне определить, нормально ли распределяются мои данные? Я имею в виду, что в настоящее время я могу сказать, просто посмотрев на гистограмму или pdf из ksdensity, но есть ли способ количественно измерить это?

Спасибо!

Ответы [ 5 ]

10 голосов
/ 21 декабря 2010

Итак, есть пара вопросов. Вот несколько предложений

Вы правы, что в среднем 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

Проверка того, является ли выборка данных нормальным распределением, может быть выполнена разными способами. Один простой метод с графиком QQ. Для этого используйте qqplot (X), где X - ваш образец данных. Если результат примерно прямой, образец нормальный. Если результат не является прямой линией, образец не является нормальным.

Например, если X = exprnd(3,1000,1), как указано выше, выборка является ненормальной, а qqplot очень нелинейным:

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

alt text

С другой стороны, если данные нормальные, qqplot выдаст прямую линию:

qqplot(randn(1000,1))

alt text

2 голосов
/ 07 сентября 2011

Вы можете использовать метод, предложенный в [1]:

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

Где R = Межквартильный диапазон, SQN = квадратный корень из N

Это часто используется на графиках с надрезами, полезная визуализация данных для нестандартных данных. Если выемки двух медиан не перекрываются, медианы примерно значительно отличаются при уровне достоверности примерно 95%.

[1] McGill R., J.W. Tukey и W.A. Larsen. «Вариации Boxplots». Американский статистик. Том 32, № 1, 1978, стр. 12–16.

2 голосов
/ 21 июля 2011

Вы можете также рассмотреть возможность использования начальной загрузки с функцией bootci .

1 голос
/ 21 декабря 2010

Вы уверены, что вам нужны доверительные интервалы или просто диапазон 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%')
0 голосов
/ 08 апреля 2013

Я не использовал Matlab, но, исходя из моего понимания статистики, если ваше распределение не может считаться нормальным распределением, тогда вы должны принять его как распределение Стьюдента и рассчитать доверительный интервал и точность.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...