Оценка вероятности распределения в R - PullRequest
0 голосов
/ 26 апреля 2020

Я планирую эксперимент, чтобы определить частоту двоичной переменной (значение 1 или 0).

Каждый день происходит 10000 новых событий

Каждый день я получаю вывести 100 случайным образом из новых 10000 и увидеть их результат (1 или 0)

Как мне оценить частоту 1 и 0 в популяции с этими данными?

Есть ли пакет в R, который может соответствовать дискретному распределению вероятности для этих данных?

1 Ответ

1 голос
/ 26 апреля 2020

Предположим, у вас есть популяция размером N = 10000, в которой за один день произошло 6500 событий.

pop <- rep(c(0,1), times=c(3500, 6500))
table(pop)
#pop
#   0    1 
#3500 6500

Теперь предположим, что вы можете выбрать 100 из этих (0,1) событий без замены .

set.seed(123)
N <- 10000
n <- 100
sam <- data.frame(id=1:n, event=sample(pop, size=n), prob=n/N)

table(sam$event)
# 0  1 
#30 70

Таким образом, мы получили 70 из 100. Максимальная оценка вероятности общего числа событий в популяции составляет просто 70/100 x 10 000 = 7 000. Стандартная ошибка этой оценки определяется как

sqrt((N-n)/N * N^2 * var(sam$event)/n)
#[1] 473.71

. 95-процентный доверительный интервал составляет [6101 - 7898], который охватывает истинное население в общей сложности 6500 человек. Но 1 из 20 дней вы, скорее всего, получите плохой образец.

R пакетов? Не очень нужно для этого эксперимента. Для более сложных схем выборки я могу думать только о пакете survey , но могут быть и другие.


Теперь, если вы делали это неоднократно, скажем, в течение 10 дней, вы ' получаю оценку за каждый день. Оценка общего количества, согласно статистике, занимающейся частыми исследованиями, будет представлять собой сумму x N / n и оценку SE, рассчитанную аналогичным образом. Например, предположим, что вы обнаружили 3, 4, 5, 11, 6, 8, 14, 8, 17 и 19 «положительных» событий из выборок 100 в течение десяти дней подряд:

events1 <- c(3, 4, 5, 11, 6, 8, 14, 8, 17, 19)

Что означает «Отрицательное» или не происходящее событие:

events0 <- 100 - events1

Вектор (0,1) событий можно построить следующим образом, используя rep.

events <- rep(rep(c(0,1), each=10), times=c(events0, events1))

Давайте определим n и N как число событий в вашей десятидневной выборке и в десятидневной популяции соответственно.

n <- 100 * 10
N <- 10000 * 10

Количество "положительных" событий в вашей десятидневной выборке равно:

sum(events1)
#[1] 95

И MLE в десятидневной популяции:

(T <- sum(events1) * N / n)
[1] 9500

Стандартная ошибка этой десятидневной оценки:

SE <- sqrt((N-n)/N * N^2 * var(events)/n); SE
[1] 923.0409

При 95% ДИ :

T + c(-1,1) * 1.96*SE
[1]  7690.84 11309.16

Байесовец может сказать, что каждый день должен быть переоценен или обновлен на основе оценки предыдущего дня, но я думаю, что результаты будут довольно схожими.


Байесовец использовал бы правило Байеса и использовал бы Униформу (0,1) в качестве разумного до распределения для пропорции "положительных" событий для t он десятидневный период. Unif (0,1) совпадает с Beta (1,1). Опытный статистик (частый или байесовский) признал бы, что бета-распределение сопряжено с биномиальным распределением. Таким образом, байесовский алгоритм будет использовать распределение бета (1 + X, 1 + NX) для доли «положительных» событий за десятидневный период, где X - общее количество «положительных» событий (95), а N - Размер выборки (1000). Обратите внимание, что среднее значение бета (альфа, бета) = альфа / (альфа + бета).

В R:

n <- rep(100, 10)
events1 <- c(3, 4, 5, 11, 6, 8, 14, 8, 17, 19)

X <- sum(events1)
N <- sum(n)

pmean = (1+X)/(2+N); pmean
#[1] 0.09580838

CI = qbeta(c(.025,.975), 1+X, 1+N-X); CI # 95% credible interval
#[1] 0.07837295 0.11477134

Таким образом, в течение десятидневного периода доля положительные события будут составлять 9,58% от всех событий, и существует 95% вероятность того, что истинная пропорция находится между 7,84% и 11,48%. Экстраполируя на все население, мы можем сказать, что 9,58% из 100 000 событий или 9 581 событие были бы положительными. Это, как я уже сказал, очень похоже на частый подход.

Мета-анализ

Теперь эти два метода эффективно объединяют все десять дней в одну большую выборку и оценки доли положительных событий или общего количества положительных событий в общей популяции. Может оказаться более интуитивно понятным комбинировать результаты каждого дня более подходящим образом, основываясь на весах, как это делается в метаанализе.

Если p [k] является оценочной пропорцией в день k, а se [k] является ее стандартной ошибкой, то объединенная оценка дается как p_hat = sum (p [k] * w [k]) / sum (w [k]), где w [k] = (1 / se [k]) ^ 2, а стандартная ошибка равна 1 / sqrt (sum (w [k]).

In R:

N <- rep(100000, 10) # Population and 10 day period
n <- rep(100, 10) 

events1 <- c(3, 4, 5, 11, 6, 8, 14, 8, 17, 19)
events0 <- n - events1

p <- NULL; SE <- NULL; w <- NULL

for(k in seq_along(events1)){
  events <- c(rep(0, events0[k]), rep(1, events1[k]))
  p[k] <- sum(events1[k]) / n[k]
  SE[k] <- sqrt((N[k]-n[k]) / N[k] * var(events)/n[k])
  w[k] <- 1 / (SE[k])^2
}

p_hat <- sum(p*w)/sum(w); p_hat
#[1] 0.06997464

SE_p <- 1 / sqrt(sum(w)); SE_p
#[1] 0.007943816

(p_hat + c(-1,1) * 1.96 * SE_p)
#[1] 0.05440476 0.08554452

Таким образом, около 7% всех событий будут положительными с 95% доверительным интервалом (5,44% - 8,55%), который не слишком отличается от двух грубых методов, использованных выше. меньшая (и, возможно, более точная) оценка из-за искаженного характера десятидневной выборки.

...