Estou procurando uma estimativa robusta da média que tem uma propriedade específica. Eu tenho um conjunto de elementos para os quais quero calcular esta estatística. Em seguida, adiciono novos elementos, um de cada vez, e para cada elemento adicional eu gostaria de recalcular a estatística (também conhecida como algoritmo online). Eu gostaria que esse cálculo de atualização fosse rápido, de preferência O (1), ou seja, não depende do tamanho da lista.
A média usual possui essa propriedade, que pode ser atualizada com eficiência, mas não é robusta para os valores extremos. Estimadores robustos típicos da média, como média inter-quartil e média aparada, não podem ser atualizados com eficiência (pois exigem a manutenção de uma lista classificada).
Eu gostaria de receber sugestões de estatísticas robustas que possam ser calculadas / atualizadas com eficiência.
fonte
Respostas:
Esta solução implementa uma sugestão feita por @Innuo em um comentário à pergunta:
Depois que soubermos manter esse subconjunto, poderemos selecionar qualquer método que gostemos de estimar a média de uma população dessa amostra. Este é um método universal, sem nenhuma suposição, que funcionará com qualquer fluxo de entrada com uma precisão que pode ser prevista usando fórmulas de amostragem estatística padrão. (A precisão é inversamente proporcional à raiz quadrada do tamanho da amostra.)
Este algoritmo aceita como entrada um fluxo de dados t = 1 , 2 , … , um tamanho de amostra m e gera um fluxo de amostras s ( t ), cada um dos quais representa a população X ( t ) = ( x ( 1 ) , x ( 2 ) , … , x ( t ) ) . Especificamente, para 1 ≤ i ≤x ( t ) , t = 1 , 2 , … , m s ( t ) X(t)=(x(1),x(2),…,x(t)) , s ( i ) é uma amostra aleatória simples de tamanho m de X ( t ) (sem substituição).1≤i≤t s(i) m X(t)
Para que isso aconteça, basta que cada subconjunto de elementos de { 1 , 2 , … , t } tenha chances iguais de serem os índices de x em s ( t ) . Isso implica a chance de que x ( i ) , 1 ≤ i < t , seja em s ( t ) igual a m / t, desde que t ≥ m .m {1,2,…,t} x s(t) x(i), 1≤i<t, s(t) m/t t≥m
No começo, apenas coletamos o fluxo até que elementos sejam armazenados. Nesse ponto, existe apenas uma amostra possível; portanto, a condição de probabilidade é trivialmente satisfeita.m
O algoritmo assume quando . Suponha indutivamente que s (t=m+1 é uma amostra aleatória simples de X ( t ) para t > m . Defina provisoriamente s ( t + 1 ) = s ( t ) . Seja U ( t + 1 ) uma variável aleatória uniforme (independente de qualquer variável anterior usada para construir s ( t ) ). E ses(t) X(t) t>m s(t+1)=s(t) U(t+1) s(t) substitui um elemento escolhido aleatoriamente de s por x ( t + 1 ) . U(t+1)≤m/(t+1) s x(t+1) Esse é todo o procedimento!
Claramente tem probabilidade m / ( t + 1 ) de estar em s ( t + 1 ) . Além disso, pela hipótese de indução, x ( i ) tinha probabilidade m / t de estar em s ( t ) quando i ≤ t . Com probabilidade m / ( t + 1 ) × 1 / mx(t+1) m/(t+1) s ( t + 1 ) x ( i ) m / t s ( t ) i ≤ t m / ( t + 1 ) × 1 / m = será removido de s ( t + 1 ) , de onde sua probabilidade de permanecer igual1 / ( t + 1 ) s ( t + 1 )
exatamente conforme necessário. Por indução, então, todas as probabilidades de inclusão do no s ( t ) estão corretas e é claro que não há correlação especial entre essas inclusões. Isso prova que o algoritmo está correto.x ( i ) s ( t )
A eficiência do algoritmo é porque em cada estágio são computados no máximo dois números aleatórios e no máximo um elemento de uma matriz de m valores é substituído. O requisito de armazenamento é O ( m ) .O ( 1 ) m O ( m )
A estrutura de dados para esse algoritmo consiste na amostra juntamente com o índice t da população X ( t ) que ele coleta. Inicialmente, pegamos s = X ( m ) e prosseguimos com o algoritmo para t = m + 1 , m + 2 , … . Aqui está uma implementação para atualizar ( s , t ) com um valor x para produzir ( s , t +s t X( T ) s = X( M ) t = m + 1 , m + 2 , ... . ( s , t ) x . (O argumentodesempenha o papel de T eé m . O índice de t será mantida pelo chamador.)( s , t + 1 ) t m t
R
n
sample.size
Para ilustrar e testar isso, usarei o estimador usual (não robusto) da média e compararei a média estimada em com a média real de X ( t ) (o conjunto cumulativo de dados visto em cada etapa) ) Eu escolhi um fluxo de entrada um tanto difícil que muda bastante suavemente, mas periodicamente sofre saltos dramáticos. O tamanho da amostra de m = 50 é bastante pequeno, permitindo ver flutuações da amostra nessas parcelas.s ( t ) X( T ) m = 50
Nesse ponto,50.
online
está a sequência de estimativas médias produzida pela manutenção dessa amostra em execução de valores, enquanto é a sequência de estimativas médias produzida a partir de todos os dados disponíveis em cada momento. O gráfico mostra os dados (em cinza), (em preto) e duas aplicações independentes desse procedimento de amostragem (em cores). O contrato está dentro do erro de amostragem esperado:actual
actual
Para estimadores robustos da média, pesquise em nosso site termos estranhos e relacionados. Entre as possibilidades que vale a pena considerar estão as médias Winsorized e M-estimadores.
fonte
summary
por uma variante robusta.Você pode relacionar seu problema ao da tabela de controle recursivo. Esse gráfico de controle avaliará se uma nova observação está sob controle. Se for, essa observação é incluída na nova estimativa da média e variância (necessária para determinar os limites de controle).
Alguns antecedentes sobre gráficos de controle robustos, recursivos e univariados podem ser encontrados aqui . Um dos textos clássicos sobre controle de qualidade e gráficos de controle parece estar disponível online aqui .
Intuitivamente, usando a média, e uma variação σ 2 t - 1 como entradas, é possível determinar se uma nova observação no tempo t é um desvio em várias abordagens. Um seria declarar x t um valor atípico se estiver fora de um certo número de desvios padrão de μ t -μt - 1 σ2t - 1 t xt μt - 1 σ2t - 1) , mas isso pode ter problemas se os dados não estiverem em conformidade com certas suposições distributivas. Se você quiser seguir esse caminho, suponha que você tenha determinado se um novo ponto não é estranho e gostaria de incluí-lo na sua estimativa média sem nenhuma taxa especial de esquecimento. Então você não pode fazer melhor do que:
Da mesma forma, você precisará atualizar a variação recursivamente:
No entanto, convém tentar algumas tabelas de controle mais convencionais. Outros gráficos de controle mais robustos à distribuição dos dados e ainda podem lidar com a não estacionariedade (como oμ μ σ2
Em relação a um gráfico como o EWMA, que esquece observações antigas e dá mais peso a novas, se você acha que seus dados são estacionários (o que significa que os parâmetros da distribuição geradora não mudam), não há necessidade de esquecer exponencialmente as observações mais antigas. Você pode definir o fator de esquecimento de acordo. No entanto, se você acha que não é estacionário, precisará selecionar um bom valor para o fator esquecimento (consulte novamente o livro didático para saber como fazer isso).
Acho que uma abordagem nesse sentido levará à atualização mais rápida do seu problema.
fonte