Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porCarlito Bailen Modificado hace 10 años
1
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
2
Transformación de potencia n Simple n Se requiere que la distribución sea –Suave –Continua –X>0
3
Transformación de potencia n =2, Y=X 2 n =1/2, Y=X 1/2 n Se busca que la variable transformada se parezca a una distribución normal
4
Ejemplo: X ~ Exp(1) n Rango: [-2, 2] pasos de 0.5. n La mejor fue = 0.5
5
Ejemplo: X ~ Exp(3) n Rango: [0, 10] pasos de 0.05. n La mejor fue = 3.05
6
Ejemplo: X ~ U(0.01, 1) n Rango: [-10, 10] pasos de 0.5. n La mejor fue >= 10
7
Ejemplo: X ~ U(1, 5) n Rango: [-10, 10] pasos de 1. n La mejor fue <= -10
8
Ejemplo: X ~ Beta(5, 2.5) n Rango: [-10, 10] pasos de 1. n La mejor fue >= 10
9
Listado S-Plus (1) n # Realiza una transformación que se ajuste a la normal n # @param fX Datos n # @param leftlambda Limite inferior para probar lambda n # @param rightLambda Limite superior para probar lambda n # @param eachLambda Intervalo entre marcas n boxCox = function(fX, leftLambda, rightLambda, eachLambda) { n cX = data.matrix(fX) n dimX = dim(cX) n n = dimX[1] n origSD = stdev(cX) n #Equivale a cXLambda1 = (cX ^ 1) - 1 n #origSD = stdev(cXLambda1) n # Checa que xi>0 n for (i in 1:n) { n if (cX[i] <= 0) { n stop("Debe ser: x[i]>0") n } n # Inicializar n # Rango de lambdas a probar n minLambda = rightLambda n rLambda = seq(leftLambda, rightLambda, by=eachLambda) n nLambda = length(rLambda) n minSD = 1E100 n rSD = vector(mode="numeric", length=nLambda) cY = vector(mode="numeric", length=n)
10
Listado S-Plus (2) n # Para cada lambda n for (j in 1:nLambda) { n # Transformacion Box-Cox n # print(paste("- i=", i, " j=", j)) n if (rLambda[j] != 0) { n cY = (cX ^ rLambda[j] - 1) / rLambda[j] n } else { n cY = log(cX) n } n n # Recuerda el vector con min stdev n rSD[j] = stdev(cY) n if (rSD[j] < minSD) { n cMinY = cY n minLambda = rLambda[j] n minSD = rSD[j] n } n n return (cX, origSD, rLambda, rSD, cMinY, minLambda, minSD) n }
11
Listado S-Plus (3) n plotBoxCox = function(sTitle, cX, origSD, rLambda, rSD, cMinY, minLambda, minSD) { n print("Original") n # En una pagina n par(mfrow = c(2,2)) n options(digits=3) n n # Conserva la mayor escala de los datos orig y tran en el eje Y n minY = min(cX, cMinY) n maxY = max(cX, cMinY) n # Grafica qqplot normalizado de los datos originales n # Muestra la varianza actual. n sTitle2 = paste(sTitle, "\nQQPlot normalizado. Desv. Tipica = ", format(origSD)) n qqnorm(cX, main=sTitle2, ylab="X", ylim=c(minY, maxY)) n qqline(cX) n print("Transformada") n # Grafica transformacion con Desv. Tipica n sTitle2 = paste("Tran. Box-Cox con SD min. QQPlot norm.\n(lambda = ", format(minLambda), ", Desv. Tip. = ", format(minSD), ")") n qqnorm(cMinY, main=sTitle2, ylab="Y", ylim=c(minY, maxY)) n qqline(cMinY) n print("Histograma") n sTitle2 = paste(sTitle, "\nHistograma") n hist(cX, main=sTitle2, xlab="X") n n print("Lambda") n # Grafica lambda vs. Desv. Tipica n sTitle2 = paste("Lambda vs. Desv. Tipica.\n(lambda = ", format(minLambda), ", Desv. Tip. = ", format(minSD), ")") n plot(rLambda, rSD, main=sTitle2, xlab="Lambda", ylab="log(SD)", log='y') n }
12
Listado S-Plus (4) n # PARAMETROS DEL PROGRAMA n # Inicializar archivo n example = 5 n n = 100# Tamano de muestra n # Parametros de los ejemplos n # El dominio debe ser X>0 n if (example == 1) { n print("Exp") n lambda1 = 1# Parámetro para exp n sTitle = paste("Exponencial(", lambda1, ")") n leftLambda = -2 n rightLambda = 2 n eachLambda = 0.05 n cXOrig = rexp(n, lambda1) n } else if (example == 2) { n print("Exp") n lambda1 = 3# Parámetro para exp n sTitle = paste("Exponencial(", lambda1, ")") n leftLambda = 0 n rightLambda = 10 n eachLambda = 0.05 n cXOrig = rexp(n, lambda1)
13
Listado S-Plus (5) n } else if (example == 3) { n print("Unif") n alfa = 0.01# Parámetro para Unif n beta = 1# Parámetro para Unif n sTitle = paste("Uniforme(", alfa, ", ", beta, ")") n n leftLambda = -10 n rightLambda = 10 n eachLambda = 0.5 n cXOrig = runif(n, min=alfa, max=beta) n } else if (example == 4) { n print("Unif") n alfa = 1# Parámetro para Unif n beta = 5# Parámetro para Unif n sTitle = paste("Uniforme(", alfa, ", ", beta, ")") n n leftLambda = -10 n rightLambda = 10 n eachLambda = 1 n cXOrig = runif(n, min=alfa, max=beta) n } else if (example == 5) { n print("Beta") n alfa = 5# Parámetro para Unif n beta = 2.5# Parámetro para Unif n sTitle = paste("Beta(", alfa, ", ", beta, ")") n leftLambda = -10 n rightLambda = 10 n eachLambda = 1 n cXOrig = rbeta(n, alfa, beta) n } n # Escribe en archivo una muestra aleatoria con distribucion exponencial n cXOrig = t(cXOrig) n cXOrig = t(cXOrig)# Dos veces para transponer renglon a columna (?) n exportData(cXOrig, "D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") n fX = importData("D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") n res = boxCox(fX, leftLambda, rightLambda, eachLambda) n plotBoxCox(sTitle, res$cX, res$origSD, res$rLambda, res$rSD, res$cMinY, res$minLambda, res$minSD)
14
Listado S-Plus (6) n # Escribe en archivo una muestra aleatoria con distribucion exponencial n cXOrig = t(cXOrig) n cXOrig = t(cXOrig)# Dos veces para transponer renglon a columna (?) n exportData(cXOrig, "D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") n fX = importData("D:\\Posada\\ModEst\\ModEst4\\ExpSample.txt", type="ASCII") n res = boxCox(fX, leftLambda, rightLambda, eachLambda) n plotBoxCox(sTitle, res$cX, res$origSD, res$rLambda, res$rSD, res$cMinY, res$minLambda, res$minSD)
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.