Eu tenho uma matriz de valores reais, que tem média e desvio padrão . Se um elemento da matriz for substituído por outro elemento , a nova média será
A vantagem dessa abordagem é que ela requer computação constante, independentemente do valor de . Existe alguma abordagem para calcular usando como o cálculo de usando ?
standard-deviation
online
do utilizador
fonte
fonte
Respostas:
Uma seção no artigo da Wikipedia sobre "Algoritmos para calcular a variação" mostra como calcular a variação se elementos forem adicionados às suas observações. (Lembre-se de que o desvio padrão é a raiz quadrada da variação.) Suponha que você acrescente à sua matriz e, em seguida,xn+1
EDIT : A fórmula acima parece estar errada, veja o comentário.
Agora, substituir um elemento significa adicionar uma observação e remover outra; ambos podem ser calculados com a fórmula acima. No entanto, lembre-se de que podem ocorrer problemas de estabilidade numérica; o artigo citado também propõe variantes numericamente estáveis.
Para obter a fórmula por si mesmo, compute usando a definição de variância da amostra e substituto μ n e w pela fórmula que você deu quando apropriado. Isso fornece σ 2 n e w - σ 2 o l d no final e, portanto, uma fórmula para σ n e w μ o l d(n−1)(σ2new−σ2old) μnew σ2new−σ2old σnew dado eσold μold . Na minha notação, suponho que você substitua o elemento por x ′ n :xn x′n
Thexk in the sum transform into something dependent of μold , but you'll have to work the equation a little bit more to derive a neat result. This should give you the general idea.
fonte
Based on what i think i'm reading on the linked Wikipedia article you can maintain a "running" standard deviation:
Although in the article they don't maintain a separate running
sum
andcount
, but instead have the singlemean
. Since in thing i'm doing today i keep acount
(for statistical purposes), it is more useful to calculate the means each time.fonte
Given originalx¯ , s , and n , as well as the change of a given element xn to x′n , I believe your new standard deviation s′ will be the square root of
Maybe there is a snazzier way of writing it?
I checked this against a small test case and it seemed to work.
fonte