У цій відповіді представлено два рішення: виправлення Шеппарда та максимальна оцінка ймовірності. Обидва тісно погоджуються щодо оцінки стандартного відхилення: для першого та для другого (якщо його коригують таким чином, щоб воно було порівняно зі звичайним "неупередженим" оцінником).7,697.707.69
Виправлення Шеппарда
"Виправлення Шеппарда" - це формули, які коригують моменти, обчислені з бінних даних (як ці) де
припускається, що дані керуються розподілом, підтримуваним на кінцевому інтервалі[ a , b ]
цей інтервал послідовно ділиться на рівні відрізки загальної ширини що є відносно невеликим (жоден контейнер не містить велику частку всіх даних)год
розподіл має функцію безперервної щільності.
Вони виведені із формули суми Ейлера-Маклауріна, яка наближає інтеграли за лінійними комбінаціями значень інтеграла у регулярно розташованих точках, а тому загалом застосовна (а не лише до нормальних розподілів).
Хоча строго кажучи, нормальний розподіл не підтримується на кінцевому проміжку, до надзвичайно близького наближення він є. По суті вся її вірогідність міститься в межах семи стандартних відхилень середнього значення. Тому виправлення Шеппарда застосовні до даних, які, як вважається, надходять із звичайного розподілу.
Перші два виправлення Шеппарда є
Використовуйте середнє значення бінізованих даних для середнього значення даних (тобто корекція для середнього не потрібна).
Відніміть 2/12 від дисперсії бінізованих даних, щоб отримати (приблизну) дисперсію даних.год2/ 12
Звідки походить 2/12? Це дорівнює дисперсії рівномірної змінної, розподіленої на інтервал довжини . Тоді інтуїтивно виправлення Шеппарда на другий момент говорить про те, що поповнення даних - фактично замінюючи їх середньою точкою кожного біна -, як видається, додає приблизно рівномірно розподілене значення в межах від та , звідки воно надувається дисперсія .год2/ 12год- год / 2ч / 2год2/ 12
Зробимо розрахунки. Я використовую R
для їх ілюстрації, починаючи з вказівки рахунків та бункерів:
counts <- c(1,2,3,4,1)
bin.lower <- c(40, 45, 50, 55, 70)
bin.upper <- c(45, 50, 55, 60, 75)
Належна формула, яка використовується для підрахунків, походить від реплікації ширини відрізка на величини, задані підрахунками; тобто зв'язані дані еквівалентні
42.5, 47.5, 47.5, 52.5, 52.5, 57.5, 57.5, 57.5, 57.5, 72.5
Їх кількість, середнє значення та дисперсія можна обчислити безпосередньо, не розширюючи дані таким чином: коли бін має середину та кількість , то його внесок у суму квадратів становить . Це призводить до другої з формул Вікіпедії, цитованої у питанні.хкk x2
bin.mid <- (bin.upper + bin.lower)/2
n <- sum(counts)
mu <- sum(bin.mid * counts) / n
sigma2 <- (sum(bin.mid^2 * counts) - n * mu^2) / (n-1)
Середнє значення ( mu
) становить (не потребує корекції), а дисперсія ( ) - . (Його квадратний корінь становить як зазначено у запитанні.) Оскільки загальна ширина біна , віднімаємо диспенсію і беремо його квадратний корінь, отримуючи для стандартного відхилення.1195 / 22 ≈ 54.32sigma2
675 / 11 ≈ 61.367,83h = 5год2/ 12=25 / 12≈2,08675 / 11 - 52/ 12------------√≈ 7,70
Максимальна оцінка ймовірності
Альтернативний метод - застосувати максимальну оцінку ймовірності. Коли припущений базовий розподіл має функцію розподілу (залежно від параметрів що підлягає оцінці), а bin містить значень із набору незалежних, однаково розподілених значень з , тоді (добавка) внесок у ймовірність цього кошика єЖθθ( х0, х1]кЖθ
журнал∏i = 1к( Fθ( х1) - Fθ( х0) ) = k журнал( Fθ( х1) - Fθ( х0) )
(див. MLE / Ймовірність ненормально розподіленого інтервалу ).
Підведення підсумків по всіх бункерах дає ймовірність журналу для набору даних. Як завжди, ми знаходимо оцінку яка мінімізує . Для цього потрібна чисельна оптимізація, а це прискорюється шляхом надання хороших початкових значень для . Наступний код працює для нормального розподілу:Λ ( θ )θ^- Λ ( θ )θR
sigma <- sqrt(sigma2) # Crude starting estimate for the SD
likelihood.log <- function(theta, counts, bin.lower, bin.upper) {
mu <- theta[1]; sigma <- theta[2]
-sum(sapply(1:length(counts), function(i) {
counts[i] *
log(pnorm(bin.upper[i], mu, sigma) - pnorm(bin.lower[i], mu, sigma))
}))
}
coefficients <- optim(c(mu, sigma), function(theta)
likelihood.log(theta, counts, bin.lower, bin.upper))$par
Отримані коефіцієнти - .( мк^, σ^) = ( 54,32 , 7,33 )
Однак пам’ятайте, що для нормальних розподілів максимальна оцінка правдоподібності (коли дані вказані точно і не поширюються) - це популяція SD даних, а не більш звичайна оцінка «виправленого зміщення», у якій дисперсія множиться на . Давайте (для порівняння) виправимо MLE , знайшовши . Це сприятливо порівнюється з результатом корекції Шеппарда, який становив .σп / ( п - 1 )σп / ( п - 1 )--------√σ^= 11 / 10-----√× 7,33 = 7,697.70
Перевірка припущень
Для візуалізації цих результатів ми можемо побудувати встановлену нормальну щільність на гістограмі:
hist(unlist(mapply(function(x,y) rep(x,y), bin.mid, counts)),
breaks = breaks, xlab="Values", main="Data and Normal Fit")
curve(dnorm(x, coefficients[1], coefficients[2]),
from=min(bin.lower), to=max(bin.upper),
add=TRUE, col="Blue", lwd=2)
Для когось це може не виглядати добре. Однак, оскільки набір даних невеликий (всього значень), можуть виникати напрочуд великі відхилення між розподілом спостережень та справжнім базовим розподілом.11
Давайте більш офіційно перевіримо припущення (зроблене MLE), що дані регулюються нормальним розподілом. Приблизну корисність тесту на придатність можна отримати з тесту : оцінені параметри вказують на очікуваний об'єм даних у кожному контейнері; статистик порівнює спостережувані відліки з очікуваними підрахунками. Ось тест з :χ2χ2R
breaks <- sort(unique(c(bin.lower, bin.upper)))
fit <- mapply(function(l, u) exp(-likelihood.log(coefficients, 1, l, u)),
c(-Inf, breaks), c(breaks, Inf))
observed <- sapply(breaks[-length(breaks)], function(x) sum((counts)[bin.lower <= x])) -
sapply(breaks[-1], function(x) sum((counts)[bin.upper < x]))
chisq.test(c(0, observed, 0), p=fit, simulate.p.value=TRUE)
Вихід є
Chi-squared test for given probabilities with simulated p-value (based on 2000 replicates)
data: c(0, observed, 0)
X-squared = 7.9581, df = NA, p-value = 0.2449
Програмне забезпечення виконало перестановочний тест (який необхідний тому, що статистика тесту точно не відповідає розподілу чі-квадрата: див. Мій аналіз у розділі Як зрозуміти ступеня свободи ). Його p-значення , що не є малим, свідчить про дуже малий доказ відходу від нормальності: у нас є підстави довіряти максимально можливим результатам.0,245