Esta resposta apresenta duas soluções: as correções de Sheppard e uma estimativa de máxima verossimilhança. Ambos concordam com uma estimativa do desvio padrão: para o primeiro e para o segundo (quando ajustado para ser comparável ao estimador "imparcial" usual).7,697,707.69
Correções de Sheppard
"Correções de Sheppard" são fórmulas que ajustam momentos calculados a partir de dados em bin (como estes) em que
presume-se que os dados sejam governados por uma distribuição suportada em um intervalo finito[ a , b ]
esse intervalo é dividido sequencialmente em compartimentos iguais de largura comum que é relativamente pequeno (nenhum compartimento contém uma grande proporção de todos os dados)h
a distribuição tem uma função de densidade contínua.
Eles são derivados da fórmula da soma de Euler-Maclaurin, que aproxima integrais em termos de combinações lineares de valores do integrando em pontos regularmente espaçados e, portanto, geralmente aplicáveis (e não apenas às distribuições normais).
Embora estritamente falando, uma distribuição Normal não seja suportada em um intervalo finito, é muito aproximada. Essencialmente, toda a sua probabilidade está contida em sete desvios-padrão da média. Portanto, as correções de Sheppard são aplicáveis aos dados assumidos como provenientes de uma distribuição Normal.
As duas primeiras correções de Sheppard são
Use a média dos dados em bin para a média dos dados (ou seja, nenhuma correção é necessária para a média).
Subtraia 2/12 da variação dos dados em bin para obter a variação (aproximada) dos dados.h2/ 12
De onde vem 2/12? Isso é igual à variação de uma variável uniforme distribuída ao longo de um intervalo de comprimento . Intuitivamente, a correção de Sheppard para o segundo momento sugere que o armazenamento em cache dos dados - efetivamente substituindo-os pelo ponto médio de cada compartimento - parece acrescentar um valor aproximadamente uniformemente distribuído, variando entre e , de onde inflaciona a variação por .h - h / 2 h / 2h2/ 12h- h / 2h / 2h2/ 12
Vamos fazer os cálculos. Eu uso R
para ilustrá-los, começando especificando as contagens e as caixas:
counts <- c(1,2,3,4,1)
bin.lower <- c(40, 45, 50, 55, 70)
bin.upper <- c(45, 50, 55, 60, 75)
A fórmula adequada a ser usada para as contagens vem da replicação das larguras dos compartimentos pelas quantidades fornecidas pelas contagens; isto é, os dados binados são equivalentes a
42.5, 47.5, 47.5, 52.5, 52.5, 57.5, 57.5, 57.5, 57.5, 72.5
Seu número, média e variância podem ser calculados diretamente sem a necessidade de expandir os dados desta maneira: quando um compartimento tem o ponto médio e uma contagem de , então sua contribuição para a soma dos quadrados é . Isso leva à segunda das fórmulas da Wikipedia citadas na pergunta.k k x 2xkk 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)
A média ( mu
) é (sem necessidade de correção) e a variação ( ) é . (Sua raiz quadrada é conforme indicado na pergunta.) Como a largura do compartimento comum é , subtraímos da variação e pegamos sua raiz quadrada, obtendo para o desvio padrão.1195 / 22 de ≈ 54,32sigma2
675 / 11 ≈ 61,367,83h = 5h2/ 12=25 / 12≈2,08675 / 11 - 52/ 12------------√≈ 7.70
Estimativas de máxima verossimilhança
Um método alternativo é aplicar uma estimativa de probabilidade máxima. Quando a distribuição subjacente assumida tem uma função de distribuição (dependendo dos parâmetros a serem estimados) e o compartimento contém valores de um conjunto de valores independentes e idênticos distribuídos de , então o contribuição (aditiva) para a probabilidade de log desse bin é θ ( x 0 , x 1 ] k F θFθθ(x0 0, x1 1]kFθ
registro∏i = 1k( Fθ(x1 1) - Fθ(x0 0) ) = k log( Fθ(x1 1) - Fθ(x0 0) ))
(consulte MLE / Probabilidade de intervalo lognormalmente distribuído ).
A soma de todos os compartimentos fornece a probabilidade de log para o conjunto de dados. Como sempre, encontramos uma estimativa que minimiza . Isso requer otimização numérica e é acelerada fornecendo bons valores iniciais para . O código a seguir faz o trabalho para uma distribuição Normal:Λ ( θ )θ^- Λ ( θ )θ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
Os coeficientes resultantes são .( μ^, σ^) = ( 54,32 , 7,33 )
Lembre-se, no entanto, que para distribuições normais, a estimativa de probabilidade máxima de (quando os dados são fornecidos exatamente e não empilhados) é o SD da população dos dados, e não a estimativa "corrigida de viés" mais convencional na qual a variação é multiplicada por . Vamos então (para comparação) corrigir o MLE de , encontrando . Isso se compara favoravelmente com o resultado da correção de Sheppard, que foi de .σn / ( n - 1 )σn / ( n - 1 )--------√σ^= 11 / 10-----√× 7,33 = 7,697,70
Verificando as premissas
Para visualizar esses resultados, podemos plotar a densidade normal ajustada sobre um histograma:
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)
Para alguns, isso pode não parecer um bom ajuste. No entanto, como o conjunto de dados é pequeno (apenas valores), podem ocorrer desvios surpreendentemente grandes entre a distribuição das observações e a verdadeira distribuição subjacente.11
Vamos verificar formalmente a suposição (feita pelo MLE) de que os dados são governados por uma distribuição Normal. Um teste aproximado de qualidade do ajuste pode ser obtido a partir de um : os parâmetros estimados indicam a quantidade esperada de dados em cada compartimento; a estatística compara as contagens observadas com as contadas esperadas. Aqui está um teste em :χ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)
A saída é
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
O software realizou um teste de permutação (necessário porque a estatística do teste não segue exatamente uma distribuição qui-quadrado: veja minha análise em Como entender os graus de liberdade ). Seu valor-p de , que não é pequeno, mostra muito pouca evidência de desvio da normalidade: temos motivos para confiar nos resultados de máxima probabilidade.0,245