Preciso obter um valor o mais preciso possível para o brilho de uma fonte de luz principalmente estável, dados os doze valores de luminosidade da amostra. O sensor é imperfeito, e a luz pode ocasionalmente "piscar" mais brilhante ou mais escura, o que pode ser ignorado, daí a minha necessidade de detecção externa (eu acho?).
Eu já li algumas abordagens aqui e não consigo decidir qual abordagem seguir. O número de discrepantes nunca é conhecido antecipadamente e geralmente será zero. O flicker geralmente é um desvio muito grande do brilho estável (o suficiente para realmente mexer com qualquer média obtida com um grande presente), mas não necessariamente.
Aqui está um conjunto de 12 medições para completar a questão:
295.5214, 277.7749, 274.6538, 272.5897, 271.0733, 292.5856, 282.0986, 275.0419, 273.084, 273.1783, 274.0317, 290.1837
Meu pressentimento é que provavelmente não existem discrepâncias nesse conjunto em particular, embora 292 e 295 pareçam um pouco altos.
Então, minha pergunta é: qual seria a melhor abordagem aqui? Devo mencionar que os valores provêm da distância euclidiana dos componentes RG e B da luz de um ponto zero (preto). Seria programaticamente doloroso, mas possível, voltar a esses valores, se necessário. A distância euclidiana foi usada como uma medida da "força geral", pois não estou interessado na cor, apenas na força da saída. No entanto, há uma chance razoável de que os tremores que eu mencionei tenham uma composição RGB diferente da saída usual.
No momento, estou brincando com algum tipo de função que se repetirá até que uma associação estável de medidas permitidas seja alcançada por:
- Encontrando o desvio padrão
- Colocando tudo fora, digamos, 2 SDs em uma lista de ignorados
- Recalculando a média e o DP com a lista de ignorados excluída
- Decidir quem ignorar com base na nova média e no desvio padrão (avaliar todos os 12)
- Repita até ficar estável.
Existe algum valor nessa abordagem?
Todos os comentários aceitos com gratidão!
fonte
Respostas:
Os valores extremos em amostras pequenas podem sempre ser muito difíceis de detectar. Na maioria dos casos, na verdade, eu recomendaria que, se você sentir que seus dados não estão corrompidos, um valor "irregular" pode não ser problemático e sua exclusão pode ser irracional. Provavelmente, o uso de técnicas estatísticas robustas será mais sensato e mais próximo de uma solução intermediária. Você tem uma pequena amostra; tente fazer com que cada ponto de amostra conte. :)
Em relação à sua abordagem sugerida: eu não aplicaria apressadamente uma suposição de normalidade para seus dados com uma regra 68-95-99.7 (como você parece fazer de alguma forma com sua regra heurística 2SD). A desigualdade de Chebyshev assume pela primeira vez uma regra de 75-88.9-93.8, claramente menos rígida. Outras " regras " também existem; a seção Identificando outliers no lema Outlier na wikipedia possui um pacote de heurísticas.
Aqui está outra: Uma referência de livro gratuito que eu me deparei sobre o assunto, o NIST / SEMATECH e-Handbook of Statistical Methods , apresenta a seguinte idéia de Iglewicz e Hoaglin (1993): Use scores modificados, de modo que:MZ M
onde é a sua mediana e MAD é o desvio absoluto médio da sua amostra. Então assuma que valores absolutos de acima de 3,5 são discrepantes em potencial. É uma sugestão semi-paramétrica (como a maioria é, o parâmetro aqui é o ). No seu exemplo, ele excluiria marginalmente o seu 295,5, mas manteria claramente a sua medida 292,6 ... (Pelo que vale a pena, não excluiria nenhum valor do seu exemplo). M3,5x~ M 3.5
Novamente, dado que você tem uma amostra muito pequena, se você acredita que sua amostra não está obviamente corrompida (um ser humano de 9'4 "de altura), aconselhamos que você não exclua os dados às pressas. Seus" suspeitos de erros "podem ser dados incorruptos; seu uso poderia realmente ajudar e não prejudicar sua análise.
fonte
O teste Q de Dixon para outliers em conjuntos de dados muito pequenos parece se encaixar bem nesse tipo de situação:
http://en.wikipedia.org/wiki/Dixon%27s_Q_test
http://www.chem.uoa.gr/applets/AppletQtest/Text_Qtest2.htm
fonte
Aponte o primeiro - pode valer a pena voltar à cor rgb. Raramente é bom jogar fora os dados, e a magnitude do vetor rgb não é a única maneira de representar o brilho - o brilho percebido é diferente, assim como o valor no HSV.
Mas colocando isso de lado e lidando com os dados que você possui, você já pensou em formar isso como um problema de classificação em vez de modelar e fazer algum aprendizado de máquina? Você tem uma entrada, que é um vetor com 12 valores reais (as leituras de brilho). Você tem uma saída, que é um vetor de 12 valores binários (1 = inlier, 0 = outlier). Obtenha vários conjuntos de leitura de brilho e identifique-os manualmente, mostrando qual leitura de brilho em cada conjunto é uma inlier / outlier. Algo assim:
Em seguida, execute o lote inteiro através de um classificador de algum tipo:
E pronto! Não é preciso se preocupar em tentar encontrar a 'regra' que separa inliers de outliers. Basta obter alguns conjuntos de dados que sejam sensatos e deixar a máquina fazer isso por você :)
~~~
EDIT: Aliás, o método proposto, onde você encaixa iterativamente um gaussiano e depois classifica cada amostra a mais de 2 desvios-padrão como um outlier, parece muito com um algoritmo de maximização de expectativa. Algo assim:
Se você seguir esse caminho, pode valer a pena pesquisar nos algoritmos EM e verificar quais suposições você está construindo em seu modelo.
fonte