14
Transformación de Potencia Box-Cox Modelos Estadísticos Dra. Graciela González Farías José Ramón Domínguez Molina 14/marzo/2003 Omar Posada Villarreal

Box Cox

Embed Size (px)

Citation preview

Page 1: Box Cox

Transformación de Potencia Box-Cox

Modelos EstadísticosDra. Graciela González Farías

José Ramón Domínguez Molina

14/marzo/2003

Omar Posada Villarreal

Page 2: Box Cox

Transformación de potencia

Simple Se requiere que la distribución sea

– Suave– Continua– X>0

Page 3: Box Cox

Transformación de potencia

=2, Y=X2

=1/2, Y=X1/2

Se busca que la variable transformada se parezca a una distribución normal

0ln

01

)(

X

XYXT

),(~ 2)( NXY

Page 4: Box Cox

Ejemplo: X ~ Exp(1) Rango: [-2, 2] pasos de 0.5.

La mejor fue = 0.5

Exponencial( 1 ) QQPlot normalizado. Desv. Tipica = 1.16

Quantiles of Standard Normal

X

-2 -1 0 1 2

-20

24

6

Tran. Box-Cox con SD min. QQPlot norm.(lambda = 0.5 , Desv. Tip. = 0.988 )

Quantiles of Standard Normal

Y

-2 -1 0 1 2

-20

24

6

0 2 4 6

02

04

06

0

Exponencial( 1 ) Histograma

X

Lambda vs. Desv. Tipica.(lambda = 0.5 , Desv. Tip. = 0.988 )

Lambda

log

(SD

)

-2 -1 0 1 2

15

10

50

Page 5: Box Cox

Ejemplo: X ~ Exp(3) Rango: [0, 10] pasos de 0.05.

La mejor fue = 3.05

Exponencial( 3 ) QQPlot normalizado. Desv. Tipica = 0.364

Quantiles of Standard Normal

X

-2 -1 0 1 2

0.0

0.5

1.0

1.5

Tran. Box-Cox con SD min. QQPlot norm.(lambda = 3.05 , Desv. Tip. = 0.221 )

Quantiles of Standard Normal

Y

-2 -1 0 1 2

0.0

0.5

1.0

1.5

0.0 0.5 1.0 1.5

01

02

03

04

0

Exponencial( 3 ) Histograma

X

Lambda vs. Desv. Tipica.(lambda = 3.05 , Desv. Tip. = 0.221 )

Lambda

log

(SD

)

0 2 4 6 8 10

0.3

0.5

0.7

1.0

Page 6: Box Cox

Ejemplo: X ~ U(0.01, 1) Rango: [-10, 10] pasos de 0.5.

La mejor fue >= 10

Uniforme( 0.01 , 1 ) QQPlot normalizado. Desv. Tipica = 0.286

Quantiles of Standard Normal

X

-2 -1 0 1 2

0.0

0.2

0.4

0.6

0.8

1.0

Tran. Box-Cox con SD min. QQPlot norm.(lambda = 10 , Desv. Tip. = 0.0222 )

Quantiles of Standard Normal

Y

-2 -1 0 1 2

0.0

0.2

0.4

0.6

0.8

1.0

0.0 0.2 0.4 0.6 0.8 1.0

02

46

81

01

21

4

Uniforme( 0.01 , 1 ) Histograma

X

Lambda vs. Desv. Tipica.(lambda = 10 , Desv. Tip. = 0.0222 )

Lambda

log

(SD

)

-10 -5 0 5 10

10

^-2

10

^11

0^4

10

^71

0^1

0

Page 7: Box Cox

Ejemplo: X ~ U(1, 5) Rango: [-10, 10] pasos de 1.

La mejor fue <= -10

Uniforme( 1 , 5 ) QQPlot normalizado. Desv. Tipica = 1.23

Quantiles of Standard Normal

X

-2 -1 0 1 2

01

23

45

Tran. Box-Cox con SD min. QQPlot norm.(lambda = -10 , Desv. Tip. = 0.00843 )

Quantiles of Standard Normal

Y

-2 -1 0 1 2

01

23

45

1 2 3 4 5

05

10

15

Uniforme( 1 , 5 ) Histograma

X

Lambda vs. Desv. Tipica.(lambda = -10 , Desv. Tip. = 0.00843 )

Lambda

log

(SD

)

-10 -5 0 5 10

10

^-2

10

^01

0^2

10

^4

Page 8: Box Cox

Ejemplo: X ~ Beta(5, 2.5) Rango: [-10, 10] pasos de 1.

La mejor fue >= 10

Beta( 5 , 2.5 ) QQPlot normalizado. Desv. Tipica = 0.165

Quantiles of Standard Normal

X

-2 -1 0 1 2

0.0

0.2

0.4

0.6

0.8

1.0

Tran. Box-Cox con SD min. QQPlot norm.(lambda = 10 , Desv. Tip. = 0.0138 )

Quantiles of Standard Normal

Y

-2 -1 0 1 2

0.0

0.2

0.4

0.6

0.8

1.0

0.2 0.4 0.6 0.8 1.0

05

10

15

20

25

Beta( 5 , 2.5 ) Histograma

X

Lambda vs. Desv. Tipica.(lambda = 10 , Desv. Tip. = 0.0138 )

Lambda

log

(SD

)

-10 -5 0 5 10

10

^-2

10

^11

0^3

10

^51

0^7

Page 9: Box Cox

Listado S-Plus (1) # Realiza una transformación que se ajuste a la normal # @param fX Datos # @param leftlambda Limite inferior para probar lambda # @param rightLambda Limite superior para probar lambda # @param eachLambda Intervalo entre marcas boxCox = function(fX, leftLambda, rightLambda, eachLambda) { cX = data.matrix(fX) dimX = dim(cX) n = dimX[1]

origSD = stdev(cX) #Equivale a cXLambda1 = (cX ^ 1) - 1 #origSD = stdev(cXLambda1)

# Checa que xi>0 for (i in 1:n) { if (cX[i] <= 0) { stop("Debe ser: x[i]>0") } } # Inicializar # Rango de lambdas a probar minLambda = rightLambda rLambda = seq(leftLambda, rightLambda, by=eachLambda) nLambda = length(rLambda) minSD = 1E100 rSD = vector(mode="numeric", length=nLambda) cY = vector(mode="numeric", length=n)

Page 10: Box Cox

Listado S-Plus (2) # Para cada lambda for (j in 1:nLambda) { # Transformacion Box-Cox # print(paste("- i=", i , " j=", j)) if (rLambda[j] != 0) { cY = (cX ^ rLambda[j] - 1) / rLambda[j] } else { cY = log(cX) }

# Recuerda el vector con min stdev rSD[j] = stdev(cY) if (rSD[j] < minSD) { cMinY = cY minLambda = rLambda[j] minSD = rSD[j] } }

return (cX, origSD, rLambda, rSD, cMinY, minLambda, minSD) }

Page 11: Box Cox

Listado S-Plus (3) plotBoxCox = function(sTitle, cX, origSD, rLambda, rSD, cMinY, minLambda, minSD) { print("Original") # En una pagina par(mfrow = c(2,2)) options(digits=3)

# Conserva la mayor escala de los datos orig y tran en el eje Y minY = min(cX, cMinY) maxY = max(cX, cMinY)

# Grafica qqplot normalizado de los datos originales # Muestra la varianza actual. sTitle2 = paste(sTitle, "\nQQPlot normalizado. Desv. Tipica = ", format(origSD)) qqnorm(cX, main=sTitle2, ylab="X", ylim=c(minY, maxY)) qqline(cX)

print("Transformada") # Grafica transformacion con Desv. Tipica sTitle2 = paste("Tran. Box-Cox con SD min. QQPlot norm.\n(lambda = ", format(minLambda), ", Desv. Tip. = ", format(minSD), ")") qqnorm(cMinY, main=sTitle2, ylab="Y", ylim=c(minY, maxY)) qqline(cMinY)

print("Histograma") sTitle2 = paste(sTitle, "\nHistograma") hist(cX, main=sTitle2, xlab="X")

print("Lambda") # Grafica lambda vs. Desv. Tipica sTitle2 = paste("Lambda vs. Desv. Tipica.\n(lambda = ", format(minLambda), ", Desv. Tip. = ", format(minSD), ")") plot(rLambda, rSD, main=sTitle2, xlab="Lambda", ylab="log(SD)", log='y')

}

Page 12: Box Cox

Listado S-Plus (4) # PARAMETROS DEL PROGRAMA # Inicializar archivo example = 5 n = 100 # Tamano de muestra

# Parametros de los ejemplos # El dominio debe ser X>0 if (example == 1) { print("Exp") lambda1 = 1 # Parámetro para exp sTitle = paste("Exponencial(", lambda1, ")")

leftLambda = -2 rightLambda = 2 eachLambda = 0.05 cXOrig = rexp(n, lambda1)

} else if (example == 2) { print("Exp") lambda1 = 3 # Parámetro para exp sTitle = paste("Exponencial(", lambda1, ")")

leftLambda = 0 rightLambda = 10 eachLambda = 0.05 cXOrig = rexp(n, lambda1)

Page 13: Box Cox

Listado S-Plus (5) } else if (example == 3) { print("Unif") alfa = 0.01 # Parámetro para Unif beta = 1 # Parámetro para Unif sTitle = paste("Uniforme(", alfa, ", ", beta, ")")

leftLambda = -10 rightLambda = 10 eachLambda = 0.5 cXOrig = runif(n, min=alfa, max=beta) } else if (example == 4) { print("Unif") alfa = 1 # Parámetro para Unif beta = 5 # Parámetro para Unif sTitle = paste("Uniforme(", alfa, ", ", beta, ")")

leftLambda = -10 rightLambda = 10 eachLambda = 1 cXOrig = runif(n, min=alfa, max=beta) } else if (example == 5) { print("Beta") alfa = 5 # Parámetro para Unif beta = 2.5 # Parámetro para Unif sTitle = paste("Beta(", alfa, ", ", beta, ")")

leftLambda = -10 rightLambda = 10 eachLambda = 1 cXOrig = rbeta(n, alfa, beta) }

# Escribe en archivo una muestra aleatoria con distribucion exponencial cXOrig = t(cXOrig) cXOrig = t(cXOrig) # Dos veces para transponer renglon a columna (?) exportData(cXOrig, "D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII")

fX = importData("D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") res = boxCox(fX, leftLambda, rightLambda, eachLambda) plotBoxCox(sTitle, res$cX, res$origSD, res$rLambda, res$rSD, res$cMinY, res$minLambda, res$minSD)

Page 14: Box Cox

Listado S-Plus (6) # Escribe en archivo una muestra aleatoria con distribucion exponencial cXOrig = t(cXOrig) cXOrig = t(cXOrig) # Dos veces para transponer renglon a columna (?) exportData(cXOrig, "D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII")

fX = importData("D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") res = boxCox(fX, leftLambda, rightLambda, eachLambda) plotBoxCox(sTitle, res$cX, res$origSD, res$rLambda, res$rSD, res$cMinY,

res$minLambda, res$minSD)