Uma abordagem estatística para determinar se faltam dados aleatoriamente

21

Eu tenho um grande conjunto de vetores de recursos que utilizarei para atacar um problema de classificação binária (usando o scikit learn em Python). Antes de começar a pensar em imputação, estou interessado em tentar determinar a partir das partes restantes dos dados se os dados ausentes estão "ausentes aleatoriamente" ou ausentes não aleatoriamente.

Qual é uma maneira sensata de abordar essa questão?


Acontece que uma pergunta melhor é perguntar se os dados estão "faltando completamente ao acaso" ou não. Qual é uma maneira sensata de fazer isso?

Lembik
fonte
Se não houver associação entre o indicador ausente e qualquer variável observada, o mecanismo de dados ausentes será MCAR.
Randel
@ Randand O que é um bom teste para aplicar na prática para testar isso?
Lembik 19/09/2015
Nada de especial que um teste de correlação ou regressão.
Randel
3
Não é algo que você testa, é algo que você assume .
Tim
3
Só para esclarecer: falta completamente aleatória significa que a probabilidade de falta é uma constante, não depende de nada. A falta aleatória significa que a falta depende de alguns fatores medidos, como idade ou sexo, para que você possa usar alguns modelos para preencher os padrões ausentes. Faltando não aleatoriamente meios omissão depende de coisas que você não medir. Na pergunta, o OP diz NMAR x MAR, mas OP significa MAR vs MCAR.
9118 AdamO

Respostas:

8

Eu encontrei a informação que eu estava falando no meu comentário.

Do livro de van Buurens , página 31, ele escreve

"Vários testes foram propostos para testar MCAR versus MAR. Esses testes não são amplamente utilizados e seu valor prático não é claro. Veja Enders (2010, pp. 17–21) para uma avaliação de dois procedimentos. Não é possível testar MAR versus MNAR, pois faltam as informações necessárias para esse teste ".

RayVelcoro
fonte
A pergunta é sobre MAR vs MNAR, mas sua resposta é sobre MCAR vs MAR. O MCAR é completamente diferente do MNAR.
Tim
Se você pode determinar que os dados são MAR, isso deve ser suficiente. Como diz Bjorn, não é possível dizer se é MAR / MNAR, mas acredito que esta resposta seja uma boa proxy. Se você fizesse o teste Enders e descobrisse que é o MCAR, não precisaria de imputação. Se você achar que é MAR, poderá imputar ou examinar com atenção seus dados para ver se há motivos para acreditar que podem ser MNAR.
RayVelcoro 23/02
@RayVelcoro É um problema de identificação: é possível que os dados NMAR apareçam MCAR. Tim está certo de que o NMAR (ou o inverso) não é algo para o qual testamos, é algo que assumimos. Para o seu ponto sobre MCAR x MAR, o mais (mais?) Importante é: se os dados são MCAR e você usa métodos MAR, existe realmente algum efeito líquido nos dados? Acho que não. Dada a penetração, a disponibilidade e a facilidade de uso dos métodos MAR, talvez seja melhor usar apenas o procedimento não paramétrico de ponderação ou imputação do que se envolver em uma perseguição retórica de testes e testes.
9118 AdamO
17

Isso não é possível, a menos que você tenha recuperado dados ausentes. Você não pode determinar a partir dos dados observados se os dados ausentes estão ausentes aleatoriamente (MAR) ou não aleatoriamente (MNAR). Você pode apenas saber se os dados claramente não estão faltando completamente aleatoriamente (MCAR). Além disso, apenas apele à plausibilidade do MCAR ou MAR em oposição ao MNAR com base no que você sabe (por exemplo, razões relatadas para a falta de dados). Como alternativa, você pode argumentar que isso não importa muito, porque a proporção de dados ausentes é pequena e, no MNAR, cenários muito extremos teriam que acontecer para que seus resultados fossem revertidos (consulte "análise do ponto de inflexão").

Björn
fonte
1
Muito obrigado. Qual é uma boa maneira de saber se os dados são MCAR?
Lembik 13/09/2015
@ Björn, acima pode precisar ser reformulado para refletir assimetrias essenciais no que podemos aprender com os dados. Embora seja possível falsificar uma hipótese de que os dados são MCAR (por exemplo, construindo um modelo que explora as covariáveis ​​observadas para dar conta de alguma parte da falta), não é possível confirmar o MCAR ou qualquer outra hipótese.
David C. Norris
Bom ponto. Eu deixei isso mais claro.
Björn
4

Isso parece bastante factível do ponto de vista da classificação.

Você deseja classificar dados ausentes versus não ausentes usando todos os outros recursos. Se você obtiver um resultado significativamente melhor que o aleatório, seus dados não estarão ausentes aleatoriamente.

Firebug
fonte
2

Você deseja saber se há alguma correlação entre um valor que está sendo perdido no recurso e o valor de qualquer outro recurso.

Para cada um dos recursos, crie um novo recurso indicando se o valor está ausente ou não (vamos chamá-los de "is_missing"). Calcule sua medida de correlação favorita (sugiro usar aqui informações mútuas) dos recursos is_missing e do restante dos recursos.

Observe que, se você não encontrar nenhuma correlação entre dois recursos, ainda é possível ter uma correlação devido ao grupo de recursos (um valor está ausente como uma função do XOR de dez outros recursos).

Se você possui um grande conjunto de recursos e um grande número de valores, obterá correlações falsas devido à aleatoriedade. Além das formas regulares de lidar com isso (conjunto de validação, limite alto o suficiente) Você pode verificar se as correlações são simétricas e transitivas. Se forem, é provável que sejam verdadeiras e você deve verificá-las ainda mais.

DaL
fonte
1

Um método que eu uso é uma matriz de sombra, na qual o conjunto de dados consiste em variáveis ​​indicadoras onde 1 é dado se um valor estiver presente e 0 se não estiver. Correlacionar esses dados entre si e com os dados originais pode ajudar a determinar se as variáveis ​​tendem a estar ausentes juntas (MAR) ou não (MCAR). Usando Rcomo exemplo (emprestado do livro "R em ação" de Robert Kabacoff):

#Load dataset
data(sleep, package = "VIM")

x <- as.data.frame(abs(is.na(sleep)))

#Elements of x are 1 if a value in the sleep data is missing and 0 if non-missing.
head(sleep)
head(x)

#Extracting variables that have some missing values.
y <- x[which(sapply(x, sd) > 0)]
cor(y)

#We see that variables Dream and NonD tend to be missing together. To a lesser extent, this is also true with Sleep and NonD, as well as Sleep and Dream.

#Now, looking at the relationship between the presence of missing values in each variable and the observed values in other variables:
cor(sleep, y, use="pairwise.complete.obs")

#NonD is more likely to be missing as Exp, BodyWgt, and Gest increases, suggesting that the missingness for NonD is likely MAR rather than MCAR.
Phil
fonte
1
No VIM , você também pode conferir spinoplots. Eles fornecem um histograma de duas variáveis ​​com a falta de cada uma. Podemos traçar duas variáveis ​​e ver como a falta de uma varia com a outra. Por exemplo, se traçarmos o tempo de sobrevivência e a atribuição de tratamento, se observarmos uma distribuição distorcida correta da falta, podemos afirmar que tempos de sobrevivência mais baixos estão associados a mais falta ... ou seja, a falta no tratamento é MAR porque depende da tempo de sobrevida variável observado.
RayVelcoro
1
A pergunta é sobre MAR vs MNAR, mas sua resposta é sobre MCAR vs MAR. O MCAR é completamente diferente do MNAR.
Tim
@ Tim Como AdamO afirmou em um comentário abaixo da pergunta, OP significava MAR vs MCAR.
12338 Phil