Come devo trasformare i dati non negativi inclusi gli zeri?


191

Se ho dati positivi molto distorti, prendo spesso i registri. Ma cosa dovrei fare con dati non negativi molto inclinati che includono zeri? Ho visto due trasformazioni utilizzate:

  • log(x+1) che ha la caratteristica ordinata che 0 mappa a 0.
  • log(x+c) dove c è stimato o impostato su un valore positivo molto piccolo.

Ci sono altri approcci? Ci sono buone ragioni per preferire un approccio rispetto agli altri?


19
Ho riassunto alcune delle risposte più altro materiale su robjhyndman.com/researchtips/transformations
Rob Hyndman

5
ottimo modo per trasformare e promuovere stat.stackoverflow!
Robin Girard,

Sì, sono d'accordo con @robingirard (sono appena arrivato qui ora a causa del post sul blog di Rob)!
Ellie Kesselman,

Vedi anche stats.stackexchange.com/questions/39042/… per un'applicazione ai dati censurati a sinistra (che possono essere caratterizzati, fino a uno spostamento di posizione, esattamente come nella presente domanda).
whuber

2
Sembra strano chiedersi come trasformare senza aver prima dichiarato lo scopo di trasformare. Qual è la situazione? Perché è necessario trasformare? Se non sappiamo cosa stai cercando di ottenere, come si può ragionevolmente suggerire qualcosa ? (Chiaramente non si può sperare di trasformarsi in normalità, perché l'esistenza di una probabilità (diversa da zero) di zeri esatti implica un picco nella distribuzione a zero, che nessun picco rimuoverà - può solo spostarlo.)
Glen_b,

Risposte:


55

Mi sembra che la scelta più appropriata di trasformazione dipenda dal modello e dal contesto.

Il punto "0" può derivare da diversi motivi diversi, ciascuno dei quali potrebbe dover essere trattato in modo diverso:

  • Troncamento (come nell'esempio di Robin): utilizzare modelli appropriati (ad es. Miscele, modelli di sopravvivenza ecc.)
  • Dati mancanti: dati di impatto / osservazioni di rilascio, se del caso.
  • Punto zero naturale (ad es. Livelli di reddito; un disoccupato ha un reddito pari a zero): trasforma secondo necessità
  • Sensibilità dello strumento di misura: forse aggiungere una piccola quantità di dati?

Non sto davvero offrendo una risposta poiché sospetto che non ci sia una trasformazione "corretta" universale quando si hanno zeri.


6
Ogni risposta alla mia domanda ha fornito informazioni utili e le ho votate tutte. Ma posso selezionare solo una risposta e Srikant offre la migliore panoramica IMO.
Rob Hyndman,

2
Si noti inoltre che ci sono modelli a zero zero (zero extra e ci si preoccupa per alcuni zeri: un modello di miscela) e modelli di ostacoli (zero e ci si preoccupa dei non zero: un modello a due stadi con un modello censurato iniziale).
Wayne,

82

Nessuno ha menzionato la trasformazione del seno iperbolico inverso. Quindi per completezza lo sto aggiungendo qui.

Questa è un'alternativa alle trasformazioni di Box-Cox ed è definita da dove . Per qualsiasi valore di , zero mappa a zero. Esiste anche una versione a due parametri che consente uno spostamento, proprio come con la trasformazione BC a due parametri. Burbidge, Magee e Robb (1988) discutono della trasformazione IHS inclusa la stima di .

f(y,θ)=sinh1(θy)/θ=log[θy+(θ2y2+1)1/2]/θ,
θ>0θθ

La trasformazione IHS funziona con i dati definiti sull'intera linea reale inclusi valori negativi e zeri. Per grandi valori di si comporta come una trasformazione del registro, indipendentemente dal valore di (tranne 0). Il caso limite come indica .yθθ0f(y,θ)y

Mi sembra che la trasformazione IHS dovrebbe essere molto più conosciuta di quanto non sia.


1
Sembra una buona alternativa alle trasformazioni / logistichetanh
Firebug,

1
Circa l'IHS alcuni sembra essere d'accordo: onlinelibrary.wiley.com/doi/10.1890/10-0340.1/abstract
Kjetil b Halvorsen

3
Quel documento riguarda la trasformazione del seno inverso, non il seno iperbolico inverso.
Bryan,

42

Un approccio utile quando la variabile viene utilizzata come fattore indipendente nella regressione è sostituirla con due variabili: una è un indicatore binario del fatto che sia zero e l'altra sia il valore della variabile originale o una sua reespressione, come il suo logaritmo. Questa tecnica è discussa nel libro di Hosmer & Lemeshow sulla regressione logistica (e in altri luoghi, ne sono sicuro). I grafici di probabilità troncati della parte positiva della variabile originale sono utili per identificare una reespressione appropriata. (Vedi l'analisi su https://stats.stackexchange.com/a/30749/919 per esempi.)

Quando la variabile è quella dipendente in un modello lineare, la regressione censurata (come Tobit ) può essere utile, ancora una volta ovviando alla necessità di produrre un logaritmo avviato. Questa tecnica è comune tra gli econometrici.


1
I dati di modellazione come Poisson a gonfia zero non sono un caso speciale di questo approccio?
David LeBauer,

4
@David, sebbene sembri simile, non lo è, perché ZIP è un modello della variabile dipendente , non della variabile indipendente.
whuber

1
@whuber Questa tecnica è discussa nel libro di Hosmer & Lemeshow sulla regressione logistica. Per caso sapresti in quale capitolo discutono di questa tecnica? Sto guardando il loro libro, ma non riesco a trovare la pagina giusta ...
Landroni,

1
All'epoca @landroni H&L era fresco nella mia mente, quindi sono sicuro che ci sia qualcosa in quel libro correlato a questo argomento. (Mi ero consultato per sviluppare alcuni modelli di regressione molto grandi e molte delle variabili indipendenti dovevano essere trattate in questo modo.) Tuttavia, non riesco nemmeno a trovare il riferimento a questo punto. Ho scritto di questa tecnica nei post successivi, nel caso in cui tu stia cercando dettagli. Due che compaiono in una ricerca nel sito sono stats.stackexchange.com/questions/6563 e stats.stackexchange.com/questions/4831 .
whuber

1
@landroni Sì, sono equivalenti, allo stesso modo in cui tutte le codifiche numeriche di qualsiasi variabile binaria sono equivalenti. Scegli quello che ritieni più comodo da interpretare.
whuber

37

Le trasformazioni del registro con turni sono casi speciali delle trasformazioni Box-Cox :

y(λ1,λ2)={(y+λ2)λ11λ1when λ10log(y+λ2)when λ1=0

Questa è la forma estesa per valori negativi, ma applicabile anche ai dati contenenti zeri. Box and Cox (1964) presenta un algoritmo per trovare i valori appropriati per gli usando la massima verosimiglianza. Questo ti dà la massima trasformazione. λ

Un motivo per preferire le trasformazioni Box-Cox è che sono state sviluppate per garantire ipotesi per il modello lineare. C'è del lavoro fatto per dimostrare che anche se i tuoi dati non possono essere trasformati in normalità, la stima porta comunque a una distribuzione simmetrica.λ

Non sono sicuro di quanto bene indirizzi i tuoi dati, dal momento che potrebbe essere quella che è solo la trasformazione del log che hai citato, ma potrebbe valere la pena stimare i cui hai bisogno per vedere se un altro la trasformazione è appropriata.λ=(0,1)λ

In R, la boxcox.fitfunzione nel pacchetto geoRcalcolerà i parametri per te.


hmm, non riesco a far sì che i "casi iniziali" in lattice accettino nuove righe. : - /
ars

@ars Ho corretto gli eqns per usare i casi iniziali. Spero di non aver manipolato gli eqns nel processo.

1
@Rob: Oh, scusa. Il geoR di Diggle è la strada da percorrere - ma specificare lambda2=TRUEnegli argomenti a boxcox.fit. (Anche aggiornata la risposta.)
ars

3
@ gd047: ecco un bel riferimento: elevatorlady.ca/doc/refcard/expressions.html
ars

6
Per chiunque legga questo chiedendosi cosa è successo a questa funzione, ora viene chiamato boxcoxfit.
Stragu,

19

Presumo che zero! = Dati mancanti, poiché questa è una domanda completamente diversa.

Quando penso a come gestire gli zeri nella regressione lineare multipla, tendo a considerare quanti zeri abbiamo effettivamente?

Solo un paio di zeri

Se ho un singolo zero in un set di dati ragionevolmente grande, tendo a:

  1. Rimuovere il punto, prendere i registri e adattarsi al modello
  2. Aggiungi una piccola al punto, prendi i log e adatta il modelloc

Il modello si adatta cambia? E i valori dei parametri? Se il modello è abbastanza robusto per la rimozione del punto, proverò un approccio rapido e sporco all'aggiunta di .c

Potresti rendere questa procedura un po 'meno grezza e usare il metodo boxcox con i turni descritti nella risposta di ars.

Gran numero di zeri

Se il mio set di dati contiene un gran numero di zeri, ciò suggerisce che la semplice regressione lineare non è lo strumento migliore per il lavoro. Invece userei qualcosa come la modellazione mista (come suggerito da Srikant e Robin).


15

Se vuoi qualcosa di veloce e sporco, perché non usare la radice quadrata?


7
E spesso la trasformazione della radice del cubo funziona bene e consente zeri e negativi. Ho scoperto che la radice del cubo funziona particolarmente bene quando, ad esempio, la misura è un volume o un conteggio di particelle per unità di volume. La radice del cubo lo convertirà in una dimensione lineare. Un approccio più flessibile consiste nell'adattare una spline cubica ristretta (spline naturale) sulla radice del cubo o radice quadrata, consentendo una piccola deviazione dalla forma assunta.
Frank Harrell,

2
+1. Per un piccolo articolo sulle radici dei cubi, vedi stata-journal.com/article.html?article=st0223 (Questo sarà un .pdf gratuito dal primo trimestre 2014.)
Nick Cox,

2
Una radice quadrata di zero è zero, quindi vengono trasformati solo i valori diversi da zero. Questo non ha nulla a che fare con il picco, se zero gonfiato, e può causare seri problemi se, in gruppi, ognuno ha una diversa quantità di zero. In altre parole, se alcuni gruppi hanno molti zero e altri ne hanno pochi, questa trasformazione può influenzare molte cose in modo negativo. Per il gruppo con la varianza maggiore (anche con il minimo zero), quasi tutti i valori vengono trasformati. Al contrario, quelli con il maggior numero di zero, non molti dei valori vengono trasformati. Questo può cambiare quale gruppo ha la varianza più grande.
D_Williams,

Nessuna trasformazione manterrà la varianza nel caso descritto da @D_Williams. I modelli di miscele (menzionati altrove in questo thread) sarebbero probabilmente un buon approccio in quel caso.
mkt

10

Presumo che tu abbia dati continui.

Se i dati includono zeri, significa che hai un picco su zero che potrebbe essere dovuto a qualche aspetto particolare dei tuoi dati. Appare ad esempio nell'energia eolica, il vento al di sotto di 2 m / s produce energia zero (si chiama cut in) e il vento al di sopra (qualcosa intorno a) 25 m / s produce anche energia zero (per motivi di sicurezza, si chiama cut off) . Mentre la distribuzione dell'energia eolica prodotta sembra continua, c'è un picco a zero.

La mia soluzione: in questo caso, suggerisco di trattare gli zeri separatamente lavorando con una miscela dello spike in zero e il modello che intendevi usare per la parte della distribuzione che è continua (wrt Lebesgue).


9

Confrontando la risposta fornita da @RobHyndman con una trasformazione log-plus-one estesa a valori negativi con il modulo:

T(x)=sign(x)log(|x|+1)
r = -1000:1000

l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)

#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
  s = asinh(i*r)

  s = s / max(s)
  lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)

Come puoi vedere, quando aumenta di più la trasformazione sembra una funzione di passaggio. Con assomiglia molto alla trasformazione log-plus-one. E quando si avvicina a una linea.θθ1θ0

inserisci qui la descrizione dell'immagine


EDIT: tieni presente che la trasformazione del log può essere modificata in modo simile su scala arbitraria, con risultati simili. Volevo solo mostrare cosa dà risultati simili in base alla risposta precedente. La più grande differenza tra entrambi gli approcci è la regione vicino a , come possiamo vedere dai loro derivati.x = 0θx=0


8

Poiché è stato proposto il fit-box Box-Cox a due parametri, ecco alcuni R per adattare i dati di input, eseguire una funzione arbitraria su di esso (ad es. Previsione delle serie temporali) e quindi restituire l'output invertito:

# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return(((x + lambda2) ^ lambda1 - 1) / lambda1)
  } else {
    return(log(x + lambda2))
  }
}

# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
  } else {
    return(exp(x) - lambda2)
  }
}

# Function to Box-Cox transform x, apply function g, 
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
  require(geoR)
  require(plyr)

  # Fit lambdas
  t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)

  # Estimating both lambdas sometimes fails; if so, estimate lambda1 only
  if (inherits(t, "try-error")) {
    lambda1 <- boxcoxfit(x)$lambda
    lambda2 <- 0
  } else {
    lambda1 <- lambda.pair[1]
    lambda2 <- lambda.pair[2]
  }
  x.boxcox <- boxcox.f(x, lambda1, lambda2)

  # Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
  y <- aaply(x.boxcox, 1, g)

  return(boxcox.inv(y, lambda1, lambda2))
}

5

Supponiamo che Y sia la quantità di denaro che ogni americano spende per una nuova auto in un determinato anno (prezzo di acquisto totale). Y aumenterà a 0; non avrà alcun valore tra 0 e circa 12.000; e prenderà altri valori soprattutto negli anni dell'adolescenza, degli anni venti e trenta di migliaia. I predittori sarebbero procuratori del livello di necessità e / o interesse nel fare un tale acquisto. Difficoltà o interessi non si può dire che siano pari a zero per le persone che non hanno effettuato alcun acquisto; su queste scale i non acquirenti sarebbero molto più vicini agli acquirenti di quanto Y o persino il registro di Y suggerirebbe. In un caso del genere, ma nella sanità, ho scoperto che le previsioni più accurate, giudicate in base alla valutazione incrociata del set di test / training, sono state ottenute, in ordine crescente,

  1. Regressione logistica su una versione binaria di Y,
  2. OLS su Y,
  3. La regressione ordinale (PLUM) su Y è stata suddivisa in 5 categorie (in modo da dividere gli acquirenti in 4 gruppi di uguali dimensioni),
  4. Regressione logistica multinomiale su Y suddivisa in 5 categorie,
  5. OLS sul registro (10) di Y (non pensavo di provare la radice del cubo) e
  6. OLS su Y è stato suddiviso in 5 categorie.

Alcuni indietreggeranno a questa categorizzazione di una variabile dipendente continua. Ma sebbene sacrifichi alcune informazioni, la categorizzazione sembra aiutare ripristinando un importante aspetto di fondo della situazione - ancora una volta, che gli "zero" sono molto più simili al resto di quanto Y indicherebbe.


4
Potresti anche dividerlo in due modelli: la probabilità di acquistare un'auto (risposta binaria) e il valore dell'auto dato un acquisto. Questa è la pratica standard in molti campi, ad esempio assicurazioni, rischio di credito, ecc.
Hong Ooi,

1
@HongOoi - puoi suggerire letture su quando questo approccio è e non è applicabile?
rolando2,

4

La trasformazione della potenza di Yeo-Johnson discussa qui ha eccellenti proprietà progettate per gestire zeri e negativi mentre si basa sui punti di forza della trasformazione di potenza di Box Cox. Questo è ciò che in genere vado quando ho a che fare con zeri o dati negativi.

Ecco un riepilogo delle trasformazioni con pro / contro per illustrare perché Yeo-Johnson è preferibile.

Login

Pro: funziona bene con dati positivi.

Contro: non gestisce gli zeri.

> log(0)
[1] -Inf

Log Plus 1

Pro: l'offset più 1 aggiunge la possibilità di gestire zeri oltre a dati positivi.

Contro: non riesce con dati negativi

> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced

Radice quadrata

Pro: utilizza una trasformazione di potenza in grado di gestire zeri e dati positivi.

Contro: non riesce con dati negativi

> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced

Box Cox

Codice R:

box_cox <- function(x, lambda) {

    eps <- 0.00001
    if (abs(lambda) < eps)
        log(x)
    else
        (x ^ lambda - 1) / lambda

}

Pro: abilita trasformazioni di potenza ridimensionate

Contro: soffre di problemi con zeri e negativi (cioè può gestire solo dati positivi.

> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN

Yeo Johnson

Codice R:

yeo_johnson <- function(x, lambda) {

    eps <- .000001
    not_neg <- which(x >= 0)
    is_neg  <- which(x < 0)

    not_neg_trans <- function(x, lambda) {
        if (abs(lambda) < eps) log(x + 1)
        else ((x + 1) ^ lambda - 1) / lambda
    }

    neg_trans <- function(x, lambda) {
        if (abs(lambda - 2) < eps) - log(-x + 1)
        else - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
    }

    x[not_neg] <- not_neg_trans(x[not_neg], lambda)

    x[is_neg] <- neg_trans(x[is_neg], lambda)

    return(x)

}

Pro: può gestire dati positivi, zero e negativi.

Contro: nessuno a cui riesco a pensare. Le proprietà sono molto simili a Box-Cox ma possono gestire dati zero e negativi.

> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951

1
Contro per Yeo-Johnson: trasformazione complessa e separata per positivi e negativi e per valori su entrambi i lati di lambda, valore di sintonia magica (epsilon; e che cos'è lambda?). Nessun vantaggio immediatamente evidente rispetto alla più semplice trasformazione del registro estesa in negativo mostrata nella risposta di Firebug, a meno che non siano necessarie trasformazioni di potenza ridimensionate (come in Box – Cox).
Konrad Rudolph,

1

Per chiarire come gestire il registro dello zero nei modelli di regressione, abbiamo scritto un documento pedagogico che spiega la soluzione migliore e gli errori comuni che le persone commettono nella pratica. Abbiamo anche escogitato una nuova soluzione per affrontare questo problema.

Puoi trovare l'articolo facendo clic qui: https://ssrn.com/abstract=3444996

Innanzitutto, pensiamo che ci si dovrebbe chiedere perché usare una trasformazione del registro. Nei modelli di regressione, una relazione log-log porta all'identificazione di un'elasticità. Infatti, se , allora corrisponde all'elasticità di a . Il registro può anche linearizzare un modello teorico. Può anche essere usato per ridurre l'eteroschedasticità. Tuttavia, in pratica, spesso si verifica che la variabile acquisita nel registro contenga valori non positivi.log(y)=βlog(x)+εβyx

Una soluzione che viene spesso proposta consiste nell'aggiungere una costante positiva c a tutte le osservazioni modo che . Tuttavia, contrariamente alle regressioni lineari, le regressioni log-lineari non sono robuste per la trasformazione lineare della variabile dipendente. Ciò è dovuto alla natura non lineare della funzione di registro. La trasformazione del registro espande i valori bassi e comprime i valori alti. Pertanto, l'aggiunta di una costante distorce la relazione (lineare) tra zeri e altre osservazioni nei dati. L'entità del bias generato dalla costante dipende in realtà dall'intervallo di osservazioni nei dati. Per questo motivo, aggiungere la costante più piccola possibile non è necessariamente la migliore soluzione peggiore.YY+c>0

Nel nostro articolo, in realtà forniamo un esempio in cui l'aggiunta di costanti molto piccole sta effettivamente fornendo il pregiudizio più elevato. Forniamo derivare un'espressione del pregiudizio.

In realtà, Poisson Pseudo Maximum Likelihood (PPML) può essere considerata una buona soluzione a questo problema. Bisogna considerare il seguente processo:

yi=aiexp(α+xiβ) conE(ai|xi)=1

Questo processo è motivato da diverse funzionalità. Innanzitutto, fornisce la stessa interpretazione a di un modello semi-log. In secondo luogo, questo processo di generazione dei dati fornisce una razionalizzazione logica dei valori zero nella variabile dipendente. Questa situazione può verificarsi quando il termine di errore moltiplicativo, , è uguale a zero. In terzo luogo, la stima di questo modello con PPML non incontra la difficoltà computazionale quando . Partendo dal presupposto che , abbiamo . Vogliamo ridurre al minimo l'errore quadratico di questo momento, portando alle seguenti condizioni del primo ordine:βaiyi=0E(ai|xi)=1E(yiexp(α+xiβ)|xi)=0

i=1N(yiexp(α+xiβ))xi=0

Queste condizioni sono definite anche quando . Queste condizioni del primo ordine sono numericamente equivalenti a quelle di un modello di Poisson, quindi possono essere stimate con qualsiasi software statistico standard.yi=0

Infine, proponiamo una nuova soluzione che è anche facile da implementare e che fornisce uno stimatore imparziale di . Basta semplicemente stimare:β

log(yi+exp(α+xiβ))=xiβ+ηi

Mostriamo che questo stimatore è imparziale e che può essere semplicemente stimato con GMM con qualsiasi software statistico standard. Ad esempio, può essere stimato eseguendo solo una riga di codice con Stata.

Speriamo che questo articolo possa essere d'aiuto e ci piacerebbe ricevere feedback da te.

Christophe Bellégo e Louis-Daniel Pape CREST - Ecole Polytechnique - ENSAE

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.