Testes essenciais de verificação de dados

93

Na minha função, muitas vezes trabalho com conjuntos de dados de outras pessoas, os não especialistas me trazem dados clínicos e os ajudo a resumir e executar testes estatísticos.

O problema que estou tendo é que os conjuntos de dados que eu trouxe são quase sempre repletos de erros de digitação, inconsistências e todos os tipos de outros problemas. Estou interessado em saber se outras pessoas têm testes padrão que eles fazem para tentar verificar quaisquer conjuntos de dados que entram.

Eu costumava desenhar histogramas de cada variável apenas para dar uma olhada, mas agora percebo que existem muitos erros horríveis que podem sobreviver a esse teste. Por exemplo, eu tive um conjunto de dados de medidas repetidas outro dia em que, para alguns indivíduos, a medida repetida era idêntica no Tempo 2 e no Tempo 1. Posteriormente, isso se mostrou incorreto, como seria de esperar. Outro conjunto de dados teve um indivíduo que passou de muito gravemente desordenado (representado por uma pontuação alta) a ficar livre de problemas, representado por zeros em geral. Isso é impossível, embora eu não pudesse provar isso definitivamente.

Então, quais testes básicos posso executar em cada conjunto de dados para garantir que eles não tenham erros de digitação e que não contenham valores impossíveis?

Desde já, obrigado!

Chris Beeley
fonte
3
Ótima pergunta. Suspeito que será difícil fornecer respostas gerais, porque as verificações dependerão das especificidades do conjunto de dados.
mark999
2
@ mark999 Eu concordo. Eu vou estar interessado em ler as respostas para esta pergunta. Existem algumas estratégias gerais, mas acho que muita verificação é sobre a criação de expectativas específicas do domínio, sobre como os dados devem ser e sobre alguns dos erros comuns que podem surgir.
amigos estão dizendo sobre jonny anglim
11
Os leitores aqui também estarão interessados ​​no seguinte segmento: Diretrizes de garantia e controle de qualidade (qa / qc) para um banco de dados .
gung

Respostas:

77

Ajuda a entender como os dados foram registrados.

Deixe-me compartilhar uma história . Uma vez, há muito tempo, muitos conjuntos de dados eram armazenados apenas em cópias impressas desbotadas. Naqueles dias sombrios, eu contratei uma organização (de grande porte e tamanho; muitos de vocês provavelmente possuem seu estoque) para informatizar cerca de 10 ^ 5 registros de dados de monitoramento ambiental em uma de suas fábricas. Para fazer isso, marquei pessoalmente uma prateleira de relatórios de laboratório (para mostrar onde estavam os dados), criei formulários de entrada de dados e contratei uma agência temporária de alfabetizadostrabalhadores para digitar os dados nos formulários. (Sim, você tinha que pagar mais por quem sabia ler.) Devido ao valor e à sensibilidade dos dados, conduzi esse processo em paralelo com dois trabalhadores por vez (que geralmente mudavam de um dia para o outro). Demorou algumas semanas. Eu escrevi um software para comparar os dois conjuntos de entradas, identificando e corrigindo sistematicamente todos os erros que apareceram.

Rapaz, houve erros! O que pode dar errado? Uma boa maneira de descrever e medir erros é no nível do registro básico , que nessa situação era uma descrição de um único resultado analítico (a concentração de algum produto químico, geralmente) para uma amostra específica obtida em um determinado ponto de monitoramento em um data prevista. Ao comparar os dois conjuntos de dados, descobri:

  • Erros de omissão : um conjunto de dados incluiria um registro, outro não. Isso geralmente acontecia porque (a) uma ou duas linhas seriam ignoradas na parte inferior de uma página ou (b) uma página inteira seria ignorada.

  • Aparentes erros de omissão que eram realmente erros de entrada de dados. Um registro é identificado por um nome de ponto de monitoramento, uma data e o "analito" (geralmente um nome químico). Se algum deles apresentar um erro tipográfico, ele não corresponderá aos outros registros com os quais está relacionado. Com efeito, o registro correto desaparece e um registro incorreto é exibido.

  • Duplicação falsa . Os mesmos resultados podem aparecer em várias fontes, serem transcritos várias vezes e parecem ser verdadeiras medidas repetidas quando não são. As duplicatas são fáceis de detectar, mas decidir se são errôneas depende de saber se as duplicatas devem aparecer no conjunto de dados. Às vezes você simplesmente não pode saber.

  • Erros de entrada de dados francos . Os "bons" são fáceis de entender porque alteram o tipo de dado: usar a letra "O" para o dígito "0", por exemplo, transforma um número em um não-número. Outros erros bons alteram tanto o valor que podem ser facilmente detectados com testes estatísticos. (Em um caso, o dígito inicial em "1.000.010 mg / Kg" foi cortado, deixando um valor de 10. Isso é uma mudança enorme quando você está falando de uma concentração de pesticidas!) Os erros ruins são difíceis de detectar porque eles mudam um valor em um que se encaixe (mais ou menos) no restante dos dados, como digitar "80" para "50". (Esse tipo de erro ocorre com o software de OCR o tempo todo.)

  • Transposições . Os valores corretos podem ser inseridos, mas associados às chaves de registro incorretas. Isso é insidioso, porque as características estatísticas globais do conjunto de dados podem permanecer inalteradas, mas diferenças espúrias podem ser criadas entre os grupos. Provavelmente, apenas um mecanismo como a entrada dupla é capaz de detectar esses erros.

Depois de conhecer esses erros e conhecer ou ter uma teoria de como eles ocorrem, você pode escrever scripts para controlar seus conjuntos de dados quanto à possível presença de tais erros e sinalizá-los para obter mais atenção. Você nem sempre pode resolvê-los, mas pelo menos pode incluir um campo "comentário" ou "sinalizador de qualidade" para acompanhar os dados em suas análises posteriores.

Desde então, prestei atenção às questões de qualidade dos dados e tive muitas mais oportunidades de fazer verificações abrangentes de grandes conjuntos de dados estatísticos. Nada é perfeito; todos eles se beneficiam de verificações de qualidade. Alguns dos princípios que desenvolvi ao longo dos anos para fazer isso incluem

  1. Sempre que possível, crie redundância nos procedimentos de entrada e transcrição de dados: somas de verificação, totais, entradas repetidas: qualquer coisa para suportar verificações internas automáticas de consistência.

  2. Se possível, crie e explore outro banco de dados que descreva a aparência dos dados: ou seja, metadados legíveis por computador. Por exemplo, em um experimento com medicamentos, você deve saber antecipadamente que todos os pacientes serão atendidos três vezes. Isso permite que você crie um banco de dados com todos os registros corretos e seus identificadores com os valores que aguardam o preenchimento. Preencha-os com os dados fornecidos e verifique se há duplicatas, omissões e dados inesperados.

  3. Sempre normalize seus dados (especificamente, coloque-os pelo menos na quarta forma normal ), independentemente de como você planeja formatar o conjunto de dados para análise. Isso obriga a criar tabelas de todas as entidades conceitualmente distintas que você está modelando. (No caso ambiental, isso inclui tabelas de locais de monitoramento, amostras, produtos químicos (propriedades, faixas típicas etc.), testes dessas amostras (um teste geralmente cobre um conjunto de produtos químicos) e os resultados individuais desses testes. Ao fazer isso, você cria muitas verificações eficazes da qualidade e consistência dos dados e identifica muitos valores potencialmente ausentes, duplicados ou inconsistentes.

    Esse esforço (que exige boas habilidades de processamento de dados, mas é direto) é surpreendentemente eficaz. Se você deseja analisar conjuntos de dados grandes ou complexos e não possui um bom conhecimento prático dos bancos de dados relacionais e de suas teorias, adicione-o à sua lista de itens a serem aprendidos o mais rápido possível. Pagará dividendos ao longo de sua carreira.

  4. Sempre execute o maior número possível de verificações "estúpidas" . Essas são verificações automatizadas de coisas óbvias, tais como as datas que caem nos períodos esperados, a contagem de pacientes (ou produtos químicos ou o que quer que seja) sempre some corretamente, que os valores são sempre razoáveis ​​(por exemplo, um pH deve estar entre 0 e 14 e talvez em uma faixa muito mais restrita para, digamos, leituras de pH no sangue) etc. É aqui que a experiência no domínio pode ser a maior ajuda: o estatístico pode, sem medo, fazer perguntas estúpidas aos especialistas e explorar as respostas para verificar os dados.

Muito mais pode ser dito, é claro - o assunto vale um livro - mas isso deve ser suficiente para estimular idéias.

whuber
fonte
5
excelente adenda ao seu banco de dados de QA / QC diretrizes
David LeBauer
2
Uma pergunta de acompanhamento - o assunto vale um livro - existe um livro?
precisa saber é o seguinte
5
+1 - resposta maravilhosa whuber. Eu gostaria de ter um blog :) (Eu teria adorado para adicionar o seu texto r-bloggers.com)
Tal Galili
2
Você deve escrever o livro que o assunto vale a pena!
Zach
11
Isso é tão complicado que muitas empresas de consultoria são especializadas em "recuperação / limpeza / armazenamento de dados".
Lucas Reis
25

@whuber faz ótimas sugestões; Gostaria apenas de acrescentar: parcelas, parcelas, parcelas, parcelas. Gráficos de dispersão, histogramas, gráficos de caixa, gráficos de linha, mapas de calor e qualquer outra coisa que você possa imaginar. Obviamente, como você descobriu, existem erros que não serão aparentes em nenhum gráfico, mas são um bom lugar para começar. Apenas certifique-se de ter certeza de como seu software lida com dados ausentes etc.

Dependendo do contexto, você pode ser criativo. Uma coisa que eu gosto de fazer Com dados multivariados é ajustar algum tipo de modelo de fator / PCA probabilístico (algo que fará imputação múltipla por dados ausentes) e examinar as pontuações para o maior número possível de componentes. Os pontos de dados com alta pontuação nos componentes / fatores menos importantes geralmente são discrepantes que você pode não ver de outra forma.

JMS
fonte
5
+1 Plotar é para estatísticas o que é votar em Chicago: algo que todo mundo faz cedo e com frequência. ;-)
whuber
15

Grandes coisas que costumo verificar:

  1. Tipo de variável - para ver se um número é numérico e não é um fator / caractere (pode indicar algum problema com os dados inseridos)
  2. Níveis de valor consistentes - para ver que uma variável com o nome "t1" não se encontrou novamente com o nome "t1" ou "t 1"
  3. Outliers - veja que as faixas de valor fazem sentido. (você obteve um valor de pressão arterial de 0? ou menos?). Aqui, às vezes, descobrimos que alguém codificou -5 como valor ausente, ou algo parecido.
  4. Restrições lineares. Não uso isso, mas alguns acham que desejam ter reestruturações nas dependências de algumas colunas (as colunas A, B devem ser adicionadas a C ou algo parecido). Para isso, você pode dar uma olhada no pacote desduplicado (eu conheci o palestrante Mark van der Loo, na última conferência useR - e fiquei muito impressionado com o pacote)
  5. Pouca aleatoriedade. Às vezes, os valores precisam ser arredondados para alguns valores ou truncados em algum momento. Esse tipo de coisa geralmente é mais claro em gráficos de dispersão.
  6. Valores ausentes - certifique-se de que a falta não esteja relacionada a alguma outra variável (ausente aleatoriamente). Mas eu não tenho uma regra de ouro para dar aqui.
  7. Linhas vazias ou principalmente com nenhum valor. Estes devem ser (geralmente) encontrados e omitidos.

Ótima pergunta BTW - Espero ler a experiência de outras pessoas sobre o assunto.

Tal Galili
fonte
10

Quando você tem medidas ao longo do tempo (" dados longitudinais "), geralmente é útil verificar os gradientes e as distribuições marginais. Este gradiente pode ser calculado em diferentes escalas. Em geral, você pode fazer transformações significativas em seus dados (fourier, wavelet) e verificar as distribuições dos marginais dos dados transformados.

Robin Girard
fonte
7

Alguns que eu sempre passo:

  1. Existe o número de registros que deveria haver? Por exemplo, se você extraiu seus dados de outra fonte ou é um subconjunto de dados de outra pessoa, seus números parecem razoáveis. Você pensaria que isso seria coberto, mas você ... ficaria surpreso.
  2. Todas as suas variáveis ​​estão aí? Os valores dessas variáveis ​​fazem sentido? Por exemplo, se uma variável Sim / Não / Ausente é codificada como "1,2,3" - o que isso significa?
  3. Onde estão seus valores ausentes? Existem algumas variáveis ​​que parecem sobrecarregadas com a falta de informações? Existem certos indivíduos com um grande número de valores ausentes.

Essas são as primeiras etapas que passo para garantir que um conjunto de dados esteja pronto para algo como análise exploratória de dados. Apenas sentado, perambulando pelos dados, alguns dizem "Isso ... parece certo?"

Fomite
fonte
1

Eu usaria o método de amostragem de aceitação para cada coluna (ele fornece o número de corte onde você pode traçar a linha entre alta e baixa qualidade); existe uma calculadora on-line para isso.

Tareq Shahwan
fonte
3
isso se encaixaria melhor como comentário do que como resposta como está atualmente. por favor elaborar um pouco, fornecer links para recursos ou referências, etc
Antoine
11
É difícil ver muitas circunstâncias nas quais isso seria eficaz e fácil de encontrar para as quais não funciona (como cadeias de caracteres ou outros dados nominais) ou é terrível (porque ignora completamente todos os relacionamentos multivariados). Também parece arbitrário, porque, exceto para séries temporais (e alguns dados relacionados), não há ordem inerente nos registros de uma tabela de dados, enquanto muitos (se não todos) os métodos de amostragem de aceitação dependem da sequência.
whuber
Bem, aqui está a calculadora para usar: sqconline.com/… Desde que você use a amostragem por aceitação aleatória, pode ser usada. Se você quiser complicar-lo, você pode usar a técnica de amostragem sistemática, e então usar de aceitação da amostra em cada segmento
Tareq Shahwan