Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Box Cox
Box Cox
Box-Cox
Modelos Estadísticos
Dra. Graciela González Farías
José Ramón Domínguez Molina
14/marzo/2003
Omar Posada Villarreal
Transformación de potencia
Simple
Se requiere que la distribución sea
– Suave
– Continua
– X>0
Transformación de potencia
X 1
0
T(X ) Y
ln X 0
=2, Y=X2
=1/2, Y=X1/2
Se busca que la variable transformada
se parezca a una distribución normal
( )
YX ~ N ( , )
2
Ejemplo: X ~ Exp(1)
Rango: [-2, 2] pasos de 0.5.
La mejor fue = 0.5
6
4
4
X
Y
2
2
0
0
-2
-2
-2 -1 0 1 2 -2 -1 0 1 2
50
40
log(SD)
5 10
20
1
0
0 2 4 6 -2 -1 0 1 2
X Lambda
Ejemplo: X ~ Exp(3)
Rango: [0, 10] pasos de 0.05.
La mejor fue = 3.05
1.5
1.5
1.0
1.0
X
Y
0.5
0.5
0.0
0.0
-2 -1 0 1 2 -2 -1 0 1 2
1.0
0.7
30
log(SD)
0.5
20
10
0.3
0
X Lambda
Ejemplo: X ~ U(0.01, 1)
Rango: [-10, 10] pasos de 0.5.
La mejor fue >= 10
1.0
1.0
0.8
0.8
0.6
0.6
X
Y
0.4
0.4
0.2
0.2
0.0
0.0
-2 -1 0 1 2 -2 -1 0 1 2
10^7 10^10
log(SD)
8
10^4
6
4
10^1
2
10^-2
0
X Lambda
Ejemplo: X ~ U(1, 5)
Rango: [-10, 10] pasos de 1.
La mejor fue <= -10
5
4
4
3
3
X
Y
2
2
1
1
0
0
-2 -1 0 1 2 -2 -1 0 1 2
10^4
15
10^2
log(SD)
10
10^0
5
10^-2
0
1 2 3 4 5 -10 -5 0 5 10
X Lambda
Ejemplo: X ~ Beta(5, 2.5)
Rango: [-10, 10] pasos de 1.
La mejor fue >= 10
1.0
1.0
0.8
0.8
0.6
0.6
X
Y
0.4
0.4
0.2
0.2
0.0
0.0
-2 -1 0 1 2 -2 -1 0 1 2
10^7
25
10^5
20
10^3
15
log(SD)
10
10^1
5
10^-2
0
X Lambda
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)
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')
Listado S-Plus (4)
# PARAMETROS DEL PROGRAMA
# Inicializar archivo
example = 5
n = 100 # Tamano de muestra
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)
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)
}
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)