¿Cómo debo transformar los datos no negativos, incluidos los ceros?


191

Si tengo datos positivos muy sesgados, a menudo tomo registros. Pero, ¿qué debo hacer con datos no negativos muy sesgados que incluyen ceros? He visto dos transformaciones utilizadas:

  • log(x+1) que tiene la característica ordenada que 0 se asigna a 0.
  • log(x+c) donde c se estima o se establece como un valor positivo muy pequeño.

¿Hay otros enfoques? ¿Hay buenas razones para preferir un enfoque sobre los otros?


19
He resumido algunas de las respuestas más otro material en robjhyndman.com/researchtips/transformations
Rob Hyndman

55
Excelente manera de transformar y promover stat.stackoverflow!
robin girard

Sí, estoy de acuerdo @robingirard (¡Acabo de llegar aquí ahora por la publicación del blog de Rob)!
Ellie Kesselman

Ver también stats.stackexchange.com/questions/39042/… para una aplicación de datos censurados a la izquierda (que puede caracterizarse, hasta un cambio de ubicación, exactamente como en la presente pregunta).
whuber

2
Parece extraño preguntar sobre cómo transformar sin haber declarado el propósito de la transformación en primer lugar. ¿Cual es la situación? ¿Por qué es necesario transformar? Si no sabemos lo que está tratando de lograr, ¿cómo se puede sugerir algo razonablemente ? (Claramente, uno no puede esperar transformarse a la normalidad, porque la existencia de una probabilidad (distinta de cero) de ceros exactos implica un pico en la distribución en cero, que no eliminará ninguna punta, solo puede moverlo)
Glen_b

Respuestas:


55

Me parece que la elección más adecuada de transformación depende del modelo y el contexto.

El punto '0' puede surgir de varias razones diferentes, cada una de las cuales puede ser tratada de manera diferente:

  • Truncamiento (como en el ejemplo de Robin): utilice modelos apropiados (p. Ej., Mezclas, modelos de supervivencia, etc.)
  • Datos faltantes: datos de imputación / observaciones de caída, si corresponde.
  • Punto cero natural (p. Ej., Niveles de ingresos; una persona desempleada tiene ingresos cero): Transforme según sea necesario
  • Sensibilidad del instrumento de medición: ¿Quizás, agregar una pequeña cantidad a los datos?

Realmente no estoy ofreciendo una respuesta, ya que sospecho que no hay una transformación universal 'correcta' cuando tienes ceros.


66
Cada respuesta a mi pregunta ha proporcionado información útil y los he votado a todos. Pero solo puedo seleccionar una respuesta y Srikant ofrece la mejor visión general de la OMI.
Rob Hyndman el

2
También tenga en cuenta que hay modelos inflados a cero (ceros adicionales y le interesan algunos ceros: un modelo mixto) y modelos de obstáculo (ceros y le importan los no ceros: un modelo de dos etapas con un modelo censurado inicial).
Wayne

82

Nadie mencionó la transformación inversa del seno hiperbólico. Entonces, para completar, lo estoy agregando aquí.

Esta es una alternativa a las transformaciones de Box-Cox y se define por donde . Para cualquier valor de , cero se asigna a cero. También hay una versión de dos parámetros que permite un cambio, al igual que con la transformación BC de dos parámetros. Burbidge, Magee y Robb (1988)θ > 0 θ θ

f(y,θ)=sinh1(θy)/θ=log[θy+(θ2y2+1)1/2]/θ,
θ>0θ discuten la transformación de IHS, incluida la estimación de .θ

La transformación IHS funciona con datos definidos en toda la línea real, incluidos valores negativos y ceros. Para valores grandes de se comporta como una transformación logarítmica, independientemente del valor de (excepto 0). El caso limitante comoθ θ 0 f ( y , θ ) yyθθ0 da .f(y,θ)y

Me parece que la transformación de IHS debería ser mucho más conocida de lo que es.


1
Parece una buena alternativa a las transformaciones logísticas /tanh
Firebug

1
Sobre el IHS, algunos parecen estar en desacuerdo: onlinelibrary.wiley.com/doi/10.1890/10-0340.1/abstract
kjetil b halvorsen

3
Ese artículo trata sobre la transformación del seno inverso, no el seno hiperbólico inverso.
Bryan

42

Un enfoque útil cuando la variable se usa como un factor independiente en la regresión es reemplazarla por dos variables: una es un indicador binario de si es cero y la otra es el valor de la variable original o una nueva expresión de la misma, como su logaritmo. Esta técnica se discute en el libro de Hosmer & Lemeshow sobre regresión logística (y en otros lugares, estoy seguro). Los gráficos de probabilidad truncada de la parte positiva de la variable original son útiles para identificar una nueva expresión apropiada. (Consulte el análisis en https://stats.stackexchange.com/a/30749/919 para ver ejemplos).

Cuando la variable es dependiente en un modelo lineal, la regresión censurada (como Tobit ) puede ser útil, evitando nuevamente la necesidad de producir un logaritmo iniciado. Esta técnica es común entre los econométricos.


1
¿Es el modelado de datos como un Poisson inflado a cero un caso especial de este enfoque?
David LeBauer

44
@David, aunque parece similar, no lo es, porque el ZIP es un modelo de la variable dependiente , no la variable independiente.
whuber

1
@whuber Esta técnica se discute en el libro de Hosmer & Lemeshow sobre regresión logística ¿ Por casualidad sabrías en qué capítulo discuten esta técnica? Estoy mirando su libro, pero parece que no puedo encontrar la página correcta ...
landroni

1
@landroni H&L estaba fresco en mi mente en ese entonces, así que estoy seguro de que hay algo en ese libro relacionado con este tema. (Lo había consultado para desarrollar algunos modelos de regresión muy grandes y muchas de las variables independientes tuvieron que ser tratadas de esta manera). Sin embargo, tampoco puedo encontrar la referencia en este momento. He escrito sobre esta técnica en publicaciones posteriores, en caso de que esté buscando detalles. Dos que aparecen en una búsqueda en el sitio están en stats.stackexchange.com/questions/6563 y stats.stackexchange.com/questions/4831 .
whuber

1
@landroni Sí, son equivalentes, de la misma manera que todas las codificaciones numéricas de cualquier variable binaria son equivalentes. Elija el que le resulte más conveniente para interpretar.
whuber

37

Las transformaciones de registro con cambios son casos especiales de las transformaciones de Box-Cox :

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

Esta es la forma extendida para valores negativos, pero también aplicable a datos que contienen ceros. Box y Cox (1964) presenta un algoritmo para encontrar los valores apropiados para los utilizando la máxima probabilidad. Esto te da la máxima transformación. λ

Una razón para preferir las transformaciones de Box-Cox es que están desarrolladas para garantizar suposiciones para el modelo lineal. Se ha realizado un trabajo para demostrar que, incluso si sus datos no pueden transformarse a la normalidad, la estimada aún conduce a una distribución simétrica.λ

No estoy seguro de qué tan bien trata sus datos, ya que podría ser que que es solo la transformación de registro que mencionó, pero puede valer la pena estimar los requeridos para ver si otro La transformación es apropiada.λλ=(0,1)λ

En R, la boxcox.fitfunción en el paquete geoRcalculará los parámetros por usted.


hmm, no puedo hacer que los "casos de inicio" de látex acepten nuevas líneas. : - /
ars

@ars Arreglé las ecuaciones para usar los casos iniciales. Espero no haber estropeado las ecuaciones en el proceso.

1
@ Rob: Oh, lo siento. El GeoR de Diggle es el camino a seguir, pero especifique lambda2=TRUEen los argumentos para boxcox.fit. (También actualicé la respuesta.)
ars

3
@ gd047: aquí hay una buena referencia: elevatorlady.ca/doc/refcard/expressions.html
ars

66
Para cualquiera que lea esto preguntándose qué pasó con esta función, ahora se llama boxcoxfit.
stragu

19

Supongo que cero! = Datos faltantes, ya que esa es una pregunta completamente diferente.

Cuando pienso en cómo manejar los ceros en la regresión lineal múltiple, tiendo a considerar cuántos ceros tenemos en realidad.

Solo un par de ceros

Si tengo un solo cero en un conjunto de datos razonablemente grande, tiendo a:

  1. Retire el punto, tome registros y ajuste el modelo
  2. Agregue una pequeña al punto, tome registros y ajuste el modeloc

¿El modelo se ajusta al cambio? ¿Qué pasa con los valores de los parámetros? Si el modelo es bastante robusto para la eliminación del punto, optaré por un enfoque rápido y sucio de agregar .c

Puede hacer que este procedimiento sea un poco menos crudo y usar el método boxcox con los cambios descritos en la respuesta de ars.

Gran cantidad de ceros

Si mi conjunto de datos contiene una gran cantidad de ceros, esto sugiere que la regresión lineal simple no es la mejor herramienta para el trabajo. En cambio, usaría algo como el modelado de mezclas (como lo sugieren Srikant y Robin).


15

Si quieres algo rápido y sucio, ¿por qué no usar la raíz cuadrada?


77
Y con frecuencia la transformación de la raíz cúbica funciona bien y permite ceros y negativos. He descubierto que la raíz cúbica funciona particularmente bien cuando, por ejemplo, la medición es un volumen o un recuento de partículas por unidad de volumen. La raíz cúbica lo convertiría a una dimensión lineal. Un enfoque más flexible es ajustar una spline cúbica restringida (spline natural) en la raíz cúbica o raíz cuadrada, lo que permite un pequeño desvío de la forma asumida.
Frank Harrell

2
+1. Para un pequeño artículo sobre raíces cúbicas, visite stata-journal.com/article.html?article=st0223 (Este será un .pdf gratuito del primer trimestre de 2014)
Nick Cox

2
Una raíz cuadrada de cero es cero, por lo que solo se transforman los valores distintos de cero. Esto no hace nada para lidiar con el pico, si se infla cero, y puede causar serios problemas si, en grupos, cada uno tiene una cantidad diferente de ceros. En otras palabras, si algunos grupos tienen muchos ceros y otros tienen pocos, esta transformación puede afectar muchas cosas de manera negativa. Para el grupo con la mayor varianza (también tenía los menos ceros), casi todos los valores se están transformando. En contraste, aquellos con más ceros, no se transforman muchos de los valores. Esto puede cambiar qué grupo tiene la mayor varianza.
D_Williams

Ninguna transformación mantendrá la variación en el caso descrito por @D_Williams. Los modelos de mezcla (mencionados en otra parte de este hilo) probablemente serían un buen enfoque en ese caso.
mkt

10

Supongo que tienes datos continuos.

Si los datos incluyen ceros, esto significa que tiene un pico en cero que puede deberse a algún aspecto particular de sus datos. Aparece, por ejemplo, en energía eólica, el viento por debajo de 2 m / s produce energía cero (se llama corte) y el viento sobre (algo alrededor) 25 m / s también produce energía cero (por razones de seguridad, se llama corte) . Si bien la distribución de la energía eólica producida parece continua, hay un pico en cero.

Mi solución: en este caso, sugiero tratar los ceros por separado trabajando con una mezcla de la espiga en cero y el modelo que planeó usar para la parte de la distribución que es continua (wrt Lebesgue).


9

Comparando la respuesta proporcionada por @RobHyndman con una transformación log-plus-one extendida a valores negativos con el formulario:

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)

Como puede ver, a medida que aumenta más, la transformación parece una función de paso. Con se parece mucho a la transformación log-plus-one. Y cuando se acerca a una línea.θ 1 θ 0θθ1θ0

ingrese la descripción de la imagen aquí


EDITAR: tenga en cuenta que la transformación de registro puede modificarse de manera similar a una escala arbitraria, con resultados similares. Solo quería mostrar qué da resultados similares basados ​​en la respuesta anterior. La mayor diferencia entre ambos enfoques es la región cercana a , como podemos ver por sus derivados.x = 0θx=0


8

Dado que se ha propuesto el ajuste de dos parámetros de Box-Cox, aquí hay algunas R para ajustar los datos de entrada, ejecutar una función arbitraria (por ejemplo, predicción de series de tiempo) y luego devolver la salida invertida:

# 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

Suponga que Y es la cantidad de dinero que cada estadounidense gasta en un auto nuevo en un año determinado (precio total de compra). Y aumentará a 0; no tendrá valores entre 0 y aproximadamente 12,000; y tomará otros valores principalmente en la adolescencia, veinte y treinta de miles. Los predictores serían representantes del nivel de necesidad y / o interés en realizar dicha compra. Difícilmente podría decirse que la necesidad o el interés son cero para las personas que no hicieron ninguna compra; en estas escalas, los no compradores estarían mucho más cerca de los compradores que Y o incluso el registro de Y sugeriría. En un caso como este, pero en la atención médica, descubrí que las predicciones más precisas, juzgadas por la validación cruzada del conjunto de prueba / conjunto de entrenamiento, se obtuvieron, en orden creciente,

  1. Regresión logística en una versión binaria de Y,
  2. OLS en Y,
  3. Regresión ordinal (PLUM) en Y clasificada en 5 categorías (para dividir a los compradores en 4 grupos de igual tamaño),
  4. Regresión logística multinomial en Y clasificada en 5 categorías,
  5. OLS en el registro (10) de Y (no pensé en probar la raíz cúbica), y
  6. OLS en Y agrupados en 5 categorías.

Algunos retrocederán en esta categorización de una variable dependiente continua. Pero aunque sacrifica algo de información, la categorización parece ayudar al restaurar un aspecto subyacente importante de la situación, una vez más, que los "ceros" son mucho más similares al resto de lo que Y indicaría.


44
También podría dividirlo en dos modelos: la probabilidad de comprar un automóvil (respuesta binaria) y el valor del automóvil en una compra. Esta es la práctica estándar en muchos campos, por ejemplo, seguros, riesgo de crédito, etc.
Hong Ooi

1
@HongOoi: ¿puede sugerir lecturas sobre cuándo este enfoque es y no es aplicable?
rolando2

4

La transformación de energía de Yeo-Johnson discutida aquí tiene excelentes propiedades diseñadas para manejar ceros y negativos mientras se construye sobre las fortalezas de la transformación de energía de Box Cox. Esto es lo que normalmente hago cuando trato con ceros o datos negativos.

Aquí hay un resumen de las transformaciones con pros / contras para ilustrar por qué es preferible Yeo-Johnson.

Iniciar sesión

Pros: le va bien con datos positivos.

Contras: no maneja ceros.

> log(0)
[1] -Inf

Log Plus 1

Pros: El desplazamiento más 1 agrega la capacidad de manejar ceros además de datos positivos.

Contras: falla con datos negativos

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

Raíz cuadrada

Pros: Utiliza una transformación de potencia que puede manejar ceros y datos positivos.

Contras: falla con datos negativos

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

Box Cox

Código R:

box_cox <- function(x, lambda) {

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

}

Pros: permite transformaciones de potencia a escala

Contras: Sufre de problemas con ceros y negativos (es decir, solo puede manejar datos positivos.

> 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

Código 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)

}

Pros: puede manejar datos positivos, cero y negativos.

Contras: Ninguno que se me ocurra. Las propiedades son muy similares a Box-Cox pero pueden manejar datos cero y negativos.

> 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
Contras para Yeo – Johnson: transformación compleja y separada para positivos y negativos y para valores a cada lado de lambda, valor de ajuste mágico (epsilon; ¿y qué es lambda?). Ninguna ventaja aparente en comparación con la transformación de registro extendida negativa más simple que se muestra en la respuesta de Firebug, a menos que requiera transformaciones de potencia a escala (como en Box-Cox).
Konrad Rudolph el

1

Para aclarar cómo lidiar con el registro de cero en los modelos de regresión, hemos escrito un artículo pedagógico que explica la mejor solución y los errores comunes que las personas cometen en la práctica. También presentamos una nueva solución para abordar este problema.

Puede encontrar el documento haciendo clic aquí: https://ssrn.com/abstract=3444996

log(y)=βlog(x)+εβyx

YY+c>0

En nuestro artículo, en realidad proporcionamos un ejemplo donde agregar constantes muy pequeñas es en realidad proporcionar el mayor sesgo. Proporcionamos derivar una expresión del sesgo.

En realidad, Poisson Pseudo Maximum Likelihood (PPML) puede considerarse como una buena solución para este problema. Hay que considerar el siguiente proceso:

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

βaiyi=0E(ai|xi)=1E(yiexp(α+xiβ)|xi)=0

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

yi=0

β

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

Mostramos que este estimador es imparcial y que simplemente puede estimarse con GMM con cualquier software estadístico estándar. Por ejemplo, puede estimarse ejecutando solo una línea de código con Stata.

Esperamos que este artículo pueda ayudar y nos encantaría recibir sus comentarios.

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.