Domanda

Molte indagini hanno codici per i diversi tipi di missingness. Per esempio, un codebook potrebbe indicare:

0-99 Dati

-1 questione non ha chiesto

-5 Non so

-7 rifiutato di rispondere

-9 Il modulo non ha chiesto

Stata ha una bella struttura per la gestione di queste molteplici tipi di missingness, in quanto consente di assegnare un generico. per i dati mancanti, ma i tipi più specifici di missingness (.a, .b, .c, ..., .Z) sono ammessi pure. Tutti i comandi che guardano risposte rapporto missingness per tutte le voci mancanti però specificato, ma è possibile ordinare i vari tipi di missingness in seguito pure. Ciò è particolarmente utile quando si ritiene che il rifiuto di rispondere ha implicazioni diverse per la strategia di imputazione che non questione non ha chiesto.

Non ho mai imbattuto in una tale struttura in R, ma mi piacerebbe davvero avere questa capacità. Ci sono dei modi di marcatura diversi tipi di NA? Potevo immaginare la creazione di più dati (o un vettore di lunghezza nrow (my.data.frame) contenente i tipi di missingness, o un indice più compatto dei quali righe hanno quali tipi di missingness), ma che sembra piuttosto ingombrante.

È stato utile?

Soluzione

Lo so quello che cercate, e che non è implementato in R. Non sono a conoscenza di un pacchetto in cui che viene implementato, ma non è troppo difficile da codice da soli.

Un modo praticabile è quello di aggiungere un dataframe agli attributi, contenente i codici. Per evitare che raddoppiando l'intero dataframe e risparmiare spazio, mi piacerebbe aggiungere gli indici in quella dataframe invece di ricostruire un dataframe completo.

es:

NACode <- function(x,code){
    Df <- sapply(x,function(i){
        i[i %in% code] <- NA
        i
    })

    id <- which(is.na(Df))
    rowid <- id %% nrow(x)
    colid <- id %/% nrow(x) + 1
    NAdf <- data.frame(
        id,rowid,colid,
        value = as.matrix(x)[id]
    )
    Df <- as.data.frame(Df)
    attr(Df,"NAcode") <- NAdf
    Df
}

In questo modo di fare:

> Df <- data.frame(A = 1:10,B=c(1:5,-1,-2,-3,9,10) )
> code <- list("Missing"=-1,"Not Answered"=-2,"Don't know"=-3)
> DfwithNA <- NACode(Df,code)
> str(DfwithNA)
'data.frame':   10 obs. of  2 variables:
 $ A: num  1 2 3 4 5 6 7 8 9 10
 $ B: num  1 2 3 4 5 NA NA NA 9 10
 - attr(*, "NAcode")='data.frame':      3 obs. of  4 variables:
  ..$ id   : int  16 17 18
  ..$ rowid: int  6 7 8
  ..$ colid: num  2 2 2
  ..$ value: num  -1 -2 -3

La funzione può anche essere regolato per aggiungere un attributo in più che ti dà l'etichetta per i diversi valori, puoi anche questa domanda . Si potrebbe Trasforma all'indietro da:

ChangeNAToCode <- function(x,code){
    NAval <- attr(x,"NAcode")
    for(i in which(NAval$value %in% code))
        x[NAval$rowid[i],NAval$colid[i]] <- NAval$value[i]

    x
}

> Dfback <- ChangeNAToCode(DfwithNA,c(-2,-3))
> str(Dfback)
'data.frame':   10 obs. of  2 variables:
 $ A: num  1 2 3 4 5 6 7 8 9 10
 $ B: num  1 2 3 4 5 NA -2 -3 9 10
 - attr(*, "NAcode")='data.frame':      3 obs. of  4 variables:
  ..$ id   : int  16 17 18
  ..$ rowid: int  6 7 8
  ..$ colid: num  2 2 2
  ..$ value: num  -1 -2 -3

Questo permette di cambiare solo i codici che si desidera, se mai è necessario. La funzione può essere adattato a restituire tutti i codici quando viene dato alcun argomento. funzioni simili possono essere costruite in modo da estrarre i dati in base al codice, Credo che si può capire che uno solo.

Ma in una sola riga:. Utilizzando gli attributi e gli indici potrebbe essere un bel modo di farlo

Altri suggerimenti

Il modo più ovvio sembra utilizzare due vettori:

  • vettore 1: un vettore di dati, in cui tutti i valori mancanti vengono rappresentati utilizzando NA. Ad esempio, c(2, 50, NA, NA)
  • Vector 2: un vettore di fattori, che indica il tipo di dati. Ad esempio, factor(c(1, 1, -1, -7)) dove il fattore 1 indica la una domanda risposto correttamente.

Avere questa struttura darebbe una creazione di flessibilità, dal momento che tutti gli argomenti na.rm standard di lavoro ancora con il vettore di dati, ma è possibile utilizzare concetti più complessi con il fattore di vettore.

Aggiorna seguenti domande da @ GSK3

  1. Memorizzazione dati aumenterà notevolmente: L'archiviazione dati raddoppierà. Tuttavia, se raddoppiando la dimensione fa sì vero problema potrebbe essere un pio un valore di circa altre strategie.
  2. Programmi non si occupano automaticamente con esso. Questo è un commento strano. Alcune funzioni di AN maniglia di default in un modo ragionevole. Tuttavia, si vuole trattare le AN in modo diverso in modo che implica che si dovrà fare qualcosa su misura. Se si desidera analizzare solo i dati dove i di NA sono "questione non ha chiesto", poi basta usare un sottoinsieme frame di dati.
  3. Ora si deve manipolare i due vettori insieme ogni volta che si desidera modificare concettualmente una variabile Suppongo che prevedeva un frame di dati dei due vettori. Avrei sottoinsiemi il frame di dati in base al secondo vettore.
  4. Non c'è alcuna implementazione standard, quindi la mia soluzione potrebbe differire da qualcun altro. True. Tuttavia, se un off il pacchetto shelf non soddisfa le vostre esigenze, allora (quasi) per definizione si vuole fare qualcosa di diverso.

I dovrebbe dichiarare che non ho mai analizzato i dati di rilievo (anche se ho analizzato grandi insiemi di dati biologici). Le mie risposte sopra sembrano abbastanza sulla difensiva, ma non è la mia intenzione. Penso che la tua domanda è una buona, e mi interessa altre risposte.

Questo è molto più di una questione "tecnica". Si dovrebbe avere uno sfondo statistica approfondita in Analisi dei valori mancanti e imputazione. Una soluzione richiede di parità con R e ggobi. È possibile assegnare valori estremamente negativi per diversi tipi di NA (put AN in margine), e fare un po 'diagnostica "manualmente". Si dovrebbe nudo in mente che ci sono tre tipi di NA:

  • MCAR - manca completamente a caso, dove P (manca | osservato, inosservata) = P (mancante)
  • MAR - manca a caso, dove P (manca | osservato, inosservata) = P (manca | osservato)
  • MNAR - non manca a caso (o non-ignorabile), dove P (manca | osservato, inosservata). Non può essere quantificato in alcun modo

IMHO questa domanda è più adatto per CrossValidated .

Ma ecco un link da SO che si possono trovare utili:

Gestione dati mancanti / incompleti in R - c'è la funzione di mascherare, ma non rimuovere AN

?

Si può fare a meno di NA del tutto e basta usare i valori codificati. È quindi possibile rotolare anche loro fino a un valore mancante globale. Spesso preferisco codice senza NA NA in quanto può causare problemi di codifica e mi piace essere in grado di controllare esattamente ciò che sta accadendo in analisi. Se hanno usato anche la stringa "NA" per rappresentare NA che spesso rende le cose più facili.

-Ralph Winters

Solitamente le uso come valori, come Ralph già proposto, in quanto il tipo di valore mancante sembra essere dati, ma su una o due volte dove principalmente voluto per documentazione ho utilizzato un attributo sul valore, ad esempio

> a <- NA
> attr(a, 'na.type') <- -1
> print(a)
[1] NA
attr(,"na.type")
[1] -1

In questo modo la mia analisi è pulito, ma io continuo a tenere la documentazione. Ma come ho detto: di solito tengo i valori

.

Allan.

I'd piace aggiungere alla "componente di fondo statistico" qui. l'analisi statistica con dati mancanti è una buona lettura su questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top