Curso Introducción al R
Transcripción
Curso Introducción al R
Curso Introducción al R 1. ¿Qué es R? R es un sistema para análisis estadísticos y gráficos creado por Ross Ihaka y Robert Gentleman. R tiene una naturaleza doble de programa y lenguaje de programación y es considerado como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell. Además de que es gratuito, dado que se distribuye bajo una licencia GNU GPL, se trata de un software que es notablemente potente, si bien se requiere de cierto conocimiento de programación para poder usarlo con fluidez. R tiene una cantidad importante de rutinas estadísticas definidas en su paquete base, pero además ofrece un buen número de paquetes de rutinas especializadas, los cuales se pueden descargar e instalar en su página de paquetes de los colaboradores. Es un software altamente recomendable por lo robusto y potente de las rutinas que tiene implementadas. Ventajas: * Es un software robusto * Posee un número importante de rutinas base y paquetes adicionales * Está en constante actualización * Gratuito Desventajas: * Poco amigable si no se cuenta con ciertos conocimientos básicos de programación * Puede requerir cierta dedicación al inicio para obtener resultados observables 2. ¿Cómo funciona R? R es un lenguaje Orientado a Objetos: bajo este complejo término se esconde la simplicidad y flexibilidad de R. El hecho que R es un lenguaje de programación puede desaminar a muchos usuarios que piensan que no tienen “alma de programadores”. Esto no es necesariamente cierto por dos razones. Primero R es un lenguaje interpretado (como Java) y no compilado (como C, C++, Fortran, Pascal, . . . ), lo cual significa que los comandos escritos en el teclado son ejecutados directamente sin necesidad de construir ejecutables. En segundo lugar, la sintaxis de R es muy simple e intuitiva. Por ejemplo, una regresión lineal se puede ejecutar con el comando lm(y~x). Para que una función sea ejecutada en R debe estar siempre acompañada de paréntesis, inclusive en el caso que no haya nada dentro de los mismos (por ej., ls()). Si se escribe el nombre de la función sin los paréntesis, R mostrará el contenido (código) mismo de la función. Curso Introducción al R – Ing. Juan Manuel Casanova Página 1 3. Conceptos Básicos 3.1 Creación de Objetos Un objeto puede ser creado con el operador “asignar” el cual se denota como una flecha con el signo menos y el símbolo “>” o “<” dependiendo de la dirección en que asigna el objeto: > n > n [1] > 9 > n [1] > x > X > x [1] > X [1] <- 9 9 -> n 9 <- 1 <- 10 1 10 Si el objeto ya existe, su valor anterior es borrado después de la asignación (la modificación afecta solo objetos en memoria, no a los datos en el disco). El valor asignado de esta manera puede ser el resultado de una operación y/o de una función: > n > n [1] > n > n [1] <- 10 + 2 12 <- 3 + rnorm(1) 2.208807 La función rnorm(1) genera un dato al azar muestreado de una distribución normal con media 0 y varianza 1 (p. 16). Note que se puede escribir una expresión sin asignar su valor a un objeto; en este caso el resultado será visible en la pantalla pero no será guardado en memoria: > (10 + 2) * 5 [1] 60 3.2 Introducción básica de datos e importación de archivos Podemos ingresar los datos de dos maneras distintas; o digitándolos directamente en la consola de R o importando un archivo de datos. > peso<-c(65,62,75,71,69,85,88,63,75,75) Curso Introducción al R – Ing. Juan Manuel Casanova Página 2 R puede leer datos guardados como archivos de texto (ASCII) con las siguientes funciones: read.table, scan y read.fwf. R también puede leer archivos en otros formatos (Excel, SAS, SPSS, . . . ), y acceder a bases de datos tipo SQL, pero las funciones necesarias no están incluidas en el paquete base. La función read.table crea un marco de datos (’data frame’) y constituye la manera más usual de leer datos en forma tabular. Por ejemplo si tenemos un archivo de nombre datos.txt en el disco C, podemos leer los datos del archivo ejecutando el siguiente comando: > misdatos <- read.table("C:/datos.txt",header=TRUE) 3.3 Generación de datos Función Seq(): Genera una secuencia de datos. > seq(1, 5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 > seq(length=9, from=1, to=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 Función Rep(): Crea un vector con elementos idénticos > rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Función expand.grid(): Ccrea un marco de datos con todas las combinaciones de vectores o factores proporcionados como argumentos: > expand.grid(a=c(60,80), "Hembra")) a p sexo 1 60 100 Male 2 80 100 Male 3 60 300 Male 4 80 300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female p=c(100, 300), sexo=c("Macho", Secuencias aleatorias: Se pueden generar números aleatorios según la siguiente tabla Curso Introducción al R – Ing. Juan Manuel Casanova Página 3 3.4 Creación de objetos La construcción explícita de un objeto nos proporciona un mejor entendimiento de su estructura, y nos permite ahondar en algunas nociones mencionadas previamente. Vector: La función vector, que tiene dos argumentos mode y length, crea un vector cuyos elementos pueden ser de tipo numérico, lógico o carácter dependiendo del argumento especificado en mode (0, FALSE o “ ” respectivamente). Las siguientes funciones tienen exactamente el mismo efecto y tienen un solo argumento (la longitud del vector): numeric(), logical(), y character(). Factor: Un factor incluye no solo los valores correspondientes a una variable categórica, pero también los diferentes niveles posibles de esta variable (inclusive si están presentes en los datos). La función factor crea un factor con las siguientes opciones: factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x)) Donde levels especifica los posibles niveles del factor (por defecto los valores únicos de x), labels define los nombres de los niveles, exclude especifica los valores x que se deben excluir Curso Introducción al R – Ing. Juan Manuel Casanova Página 4 de los niveles, y ordered es un argumento lógico que especifica si los niveles del factor están ordenados. Recuerde que x es de tipo numérico o cáracter. Ejemplos: > factor(1:3) [1] 1 2 3 Levels: 1 2 3 > factor(1:3, levels=1:5) [1] 1 2 3 Levels: 1 2 3 4 5 > factor(1:3, labels=c("A", "B", "C")) [1] A B C Levels: A B C > factor(1:5, exclude=4) [1] 1 2 3 NA 5 Levels: 1 2 3 5 La función levels extrae los niveles posibles de un factor: > ff <- factor(c(2, 4), levels=2:5) > ff [1] 2 4 Levels: 2 3 4 5 > levels(ff) [1] "2" "3" "4" "5" Matriz. Una matriz es realmente un vector con un atributo adicional (dim) el cual a su vez es un vector numérico de longitud 2, que define el número de filas y columnas de la matriz. Una matriz se puede crear con la función matrix: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) La opción byrow indica si los valores en data deben llenar las columnas sucesivamente (por defecto) o las filas (byrow = TRUE). La opción dimnames permite asignar nombres a las filas y columnas. > matrix(data=5, nr=2, nc=2) [,1] [,2] [1,] 5 5 [2,] 5 5 > matrix(1:6, 2, 3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 Curso Introducción al R – Ing. Juan Manuel Casanova Página 5 > matrix(1:6, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 Otra manera de crear una matriz es dando los valores apropiados al atributo dim (que inicialmente tiene valor NULL): > x <- 1:15 > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > dim(x) NULL > dim(x) <- c(5, 3) > x [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15 Marco de datos: Un marco de datos (’data.frame’) se crea de manera implícita con la función read.table; también es posible hacerlo con la función data.frame. Los vectores incluidos como argumentos deben ser de la misma longitud, o si uno de ellos es más corto que los otros, es “reciclado” un cierto número de veces: > x <- 1:4; n <- 10; M <- c(10, 35); y <- 2:4 > data.frame(x, n) x n 1 1 10 2 2 10 3 3 10 4 4 10 > data.frame(x, M) x M 1 1 10 2 2 35 3 3 10 4 4 35 > data.frame(x, y) Error in data.frame(x, y) : arguments imply differing number of rows: 4, 3 Si se incluye un factor en un marco de datos, el factor debe ser de la misma longitud que el vector (o vectores). Es posible cambiar el nombre de las columnas con data.frame(A1=x, A2=n). Curso Introducción al R – Ing. Juan Manuel Casanova Página 6 También se pueden dar nombres a las filas con la opción row.names que debe ser, por supuesto, un vector de modo carácter con longitud igual al número de líneas en el marco de datos. Finalmente, note que los marcos de datos tienen un atributo similar al dim de las matrices. Lista: Una lista se crea de manera similar a un marco de datos con la función list. No existe ninguna limitación en el tipo de objetos que se pueden incluir. A diferencia de data.frame(), los nombres de los objetos no se toman por defecto; tomando los vectores x y y del ejemplo anterior: > L1 <- list(x, y); L2 <- list(A=x, B=y) > L1 [[1]] [1] 1 2 3 4 [[2]] [1] 2 3 4 > L2 $A [1] 1 2 3 4 $B [1] 2 3 4 > names(L1) 19 NULL > names(L2) [1] "A" "B" Series de tiempo: La función ts crea un objeto de clase "ts" (serie de tiempo) a partir de un vector (serie de tiempo única) o una matriz (serie multivariada). Las opciones que caracterizan un objeto de este tipo son: ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class, names) Donde: data es un vector o una matriz start el tiempo de la primera observación ya sea un número o un vector con dos enteros (ver ejemplo más abajo) end el tiempo de la ultima observación especificado de la misma manera que start frequency el número de observaciones por unidad de tiempo deltat la fracción del periodo de muestreo entre observaciones sucesivas (ej. 1/12 para datos mensuales); únicamente se debe especificar o frequency o deltat ts.eps tolerancia para la comparación de series. Las frecuencias se consideran iguales si su diferencia es menor que ts.eps Curso Introducción al R – Ing. Juan Manuel Casanova Página 7 class clase que se debe asignar al objeto; por defecto es "ts" para una serie univariada, y c("mts", "ts") para una serie multivariada names para una serie multivariada, un vector de tipo caracter con los nombres de las series individuales; por defecto los nombres de las columnas de data, o Serie 1, Serie 2, . . . Algunos ejemplos de series de tiempo creadas con ts(): > ts(1:10, start = 1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47, frequency = 12, start = c(1959, 2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1 2 3 4 5 6 7 8 9 10 11 1960 12 13 14 15 16 17 18 19 20 21 22 23 1961 24 25 26 27 28 29 30 31 32 33 34 35 1962 36 37 38 39 40 41 42 43 44 45 46 47 > ts(1:10, frequency = 4, start = c(1959, 2)) Qtr1 Qtr2 Qtr3 Qtr4 1959 1 2 3 1960 4 5 6 7 1961 8 9 10 > ts(matrix(rpois(36, 5), frequency=12) Series 1 Series 2 Series 3 Jan 1961 8 5 4 20 Feb 1961 6 6 9 Mar 1961 2 3 3 Apr 1961 8 5 4 May 1961 4 9 3 Jun 1961 4 6 13 Jul 1961 4 2 6 Aug 1961 11 6 4 Sep 1961 6 5 7 Oct 1961 6 5 7 Nov 1961 5 5 7 Dec 1961 8 5 2 12, 3), start=c(1961, 1), Expresión: Los objetos de clase expresión juegan un papel fundamental en R. Una expresión es una serie de caracteres que hace sentido para R. Todos los comandos válidos son expresiones. Curso Introducción al R – Ing. Juan Manuel Casanova Página 8 Cuando se escribe un comando directamente en el teclado, este es evaluado por R y ejecutado si es válido. En muchos casos, es útil construir una expresión sin evaluarla: esto es lo que la función expression hace. Por supuesto, es posible evaluar la expresión posteriormente con eval(). > x <- 3; y <- 2.5; z <- 1 > exp1 <- expression(x / (y + exp(z))) > exp1 expression(x/(y + exp(z))) > eval(exp1) [1] 0.5749019 Las expresiones se pueden usar, entre otras cosas, para incluir ecuaciones en gráficos. Una expresión se puede crear desde una variable de tipo carácter. Algunas funciones utilizan expresiones como argumentos; por ejemplo D() que calcula derivadas parciales: > D(exp1, "x") 1/(y + exp(z)) > D(exp1, "y") -x/(y + exp(z))ˆ2 > D(exp1, "z") -x * exp(z)/(y + exp(z))ˆ2 3.5 Funciones importantes Curso Introducción al R – Ing. Juan Manuel Casanova Página 9 4. Estadísticas Descriptivas y Gráficas en R Para poder ver los comandos que se utilizan para obtener estadísticas y gráficas descriptivas, utilizaremos un pequeño ejemplo. Suponer que se tiene una muestra de 20 individuos a los que se les midió el peso en Kg: > peso<c(65,62,75,71,69,85,88,63,75,75,50,61,89,91,56,74,60,85,74,75) > length(peso) [1] 20 > mean(peso) [1] 72.15 > median(peso) [1] 74 Curso Introducción al R – Ing. Juan Manuel Casanova Página 10 > sd(peso) [1] 11.54522 > IQR(peso) [1] 14.75 > fivenum(peso) [1] 50.0 62.5 74.0 80.0 91.0 > summary(peso) Min. 1st Qu. Median Mean 3rd Qu. 50.00 62.75 74.00 72.15 77.50 > p25=quantile(peso,.25) > p25 25% 62.75 > p50=quantile(peso,.50) > p50 50% 74 > p75=quantile(peso,.75) > p75 75% 77.5 > stem(peso) Max. 91.00 The decimal point is 1 digit(s) to the right of the | 5 6 7 8 9 | | | | | 06 012359 1445555 5589 1 > boxplot(peso) > hist(peso) La tabla a continuación resume algunas funciones gráficas en R: Curso Introducción al R – Ing. Juan Manuel Casanova Página 11 Curso Introducción al R – Ing. Juan Manuel Casanova Página 12 Las opciones y argumentos para cada una de estas opciones se pueden encontrar en la ayuda incorporada en R. Algunas de estas opciones son idénticas para varias funciones graficas; éstas son las principales (con sus valores por defecto): add=FALSE si es TRUE superpone el gráfico en el ya existente (si existe) axes=TRUE si es FALSE no dibuja los ejes ni la caja del gr´afico type="p" especifica el tipo de gráfico; "p": puntos, "l": líneas, "b": puntos conectados por líneas, “o": igual al anterior, pero las líneas están sobre los puntos, "h": líneas verticales, "s": escaleras, los datos se representan como la parte superior de las líneas verticales, "S": igual al anterior pero los datos se representan como la parte inferior de las líneas verticales xlim=, ylim= especifica los límites inferiores y superiores de los ejes; por ejemplo con xlim=c(1, 10) o xlim=range(x) xlab=, ylab= títulos en los ejes; deben ser variables de tipo caracter main= título principal; debe ser de tipo caracter sub= sub-título (escrito en una letra más pequeña) Ejemplos de gráficas en R > carros <- c(1, 3, 6, 4, 9) > plot(carros) > plot(carros, type="o", col="blue") > title(main="Autos", col.main="red", font.main=4) > > > > carros <- c(1, 3, 6, 4, 9) camiones <- c(2, 5, 4, 5, 12) plot(carros, type="o", col="blue", ylim=c(0,12)) lines(camiones, type="o", pch=22, lty=2, col="red") > carros <- c(1, 3, 6, 4, 9) > barplot(carros) Ahora, para hacer gráficos más elaborados, creamos el archivo autos.txt de la siguiente manera: carros 1 2 3 5 6 4 4 5 9 12 camiones 4 4 6 6 16 camionetas > autos_data <- read.table("C:/autos.txt", header=T) Curso Introducción al R – Ing. Juan Manuel Casanova Página 13 > barplot(autos_data$carros, main="Carros", xlab="Days", ylab="Total", names.arg=c("Mon","Tue","Wed","Thu","Fri"), border="blue", density=c(10,20,30,40,50)) Gráfico Comparativo: > barplot(as.matrix(autos_data), main="Autos", ylab= beside=TRUE, col=rainbow(5)) > legend("topleft", c("Mon","Tue","Wed","Thu","Fri"), bty="n", fill=rainbow(5)) "Total", cex=0.6, Pie Chart: > carros <- c(1, 3, 6, 4, 9) > pie(carros) > pie(carros, main="Carros", col=rainbow(length(carros)), labels=c("Mon","Tue","Wed","Thu","Fri")) > colors <- c("white","grey70","grey90","grey50","black") > car_labels <- round(carros/sum(carros) * 100, 1) > car_labels <- paste(car_labels, "%", sep="") > pie(carros, main="Carros", col=colors, labels=car_labels, cex=0.8) > legend(1.5, 0.5, c("Mon","Tue","Wed","Thu","Fri"), cex=0.8, fill=colors) Gráficas multivariadas: > x <- rnorm(10) > y <- rnorm(10) > plot(x,y) > plot(x, y, xlab="Diez numeros al azar", ylab="Otros diez numeros",xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="Como personalizar un grafico en R", las=1, cex=1.5) 5. Análisis Estadístico con R 5.1 Pruebas de Normalidad > shapiro.test(peso) Curso Introducción al R – Ing. Juan Manuel Casanova Página 14 5.2 Prueba T de Sudent > peso<c(65,62,75,71,69,85,88,63,75,75,50,61,89,91,56,74,60,85,74,75) > t.test(peso, alternative="greater", mu=75, conf.level=0.95) One Sample t-test data: peso t = -1.104, df = 19, p-value = 0.8583 alternative hypothesis: true mean is greater than 75 95 percent confidence interval: 67.68609 Inf sample estimates: mean of x 72.15 5.3 Análisis de Varianza Para ver como hacer análisis de varianza tomemos unos datos que vienen incluidos con R: InsectSprays (insecticidas). Se probaron en el campo 6 diferentes tipos de insecticidas utilizando el número de insectos como la variable de respuesta. Cada insecticida se probó 12 veces, para un total de 72 observaciones. No haremos aquí una exploración gráfica de los datos, sino que nos enfocaremos en un análisis de varianza simple de la variable de respuesta como función del insecticida usado. Después de cargar los datos en memoria con la función data, el análisis se realiza con la función aov (después de transformar la respuesta): > data(InsectSprays) > aov.spray <- aov(sqrt(count) ~ spray, data = InsectSprays) > aov.spray Call: aov(formula = sqrt(count) ~ spray, data = InsectSprays) Terms: spray Residuals Sum of Squares 88.43787 26.05798 Deg. of Freedom 5 66 Residual standard error: 0.6283453 Estimated effects may be unbalanced Curso Introducción al R – Ing. Juan Manuel Casanova Página 15 > summary(aov.spray) Df Sum Sq Mean Sq F value Pr(>F) spray 5 88.438 17.688 44.799 < 2.2e-16 *** Residuals 66 26.058 0.395 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Para ver una representación gráfica de los resultados podemos usar plot() o termplot(). Antes de escribir plot(aov.spray) dividiremos la ventana gráfica en cuatro partes de tal manera que las cuatro gráficas diagnósticas se dibujan en la misma ventana. Los comandos son: > > > > > opar <- par() par(mfcol = c(2, 2)) plot(aov.spray) par(opar) termplot(aov.spray, se=TRUE, partial.resid=TRUE, rug=TRUE) 5.4 Análisis de Regresión y Correlación Suponga que una empresa dedicada a la producción de cierto artículo perecible ZZ, desea evaluar la relación existente entre la distancia recorrida para transportar su producto a los diferentes puntos de comercialización y las mermas producidas por dicho transporte. Con este fin, se lleva a cabo un estudio observándose entre otras variables: Y = Porcentaje de carga útil final (luego del transporte) X = Distancia recorrida (decenas de kilómetros) En una muestra aleatoria de 12 recorridos se encontraron los siguientes resultados: Carga útil final (Y) Distancia recorrida (X) 91 33 95 12 93 18 98 3 97 4 97 8 88 66 94 5 89 37 90 29 > carga<-c(91,95,93,98,97,97,88,94,89,90,92,95) > distancia<-c(33,12,18,3,4,8,66,5,37,29,15,10) > reg<-lm(carga~distancia) Curso Introducción al R – Ing. Juan Manuel Casanova Página 16 92 15 95 10 > reg Call: lm(formula = carga ~ distancia) Coefficients: (Intercept) 96.4079 distancia -0.1579 > summary(reg) Call: lm(formula = carga ~ distancia) Residuals: Min 1Q Median -2.03947 -1.57895 -0.01316 3Q 1.38158 Max 2.06579 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 96.40789 0.70841 136.090 < 2e-16 *** distancia -0.15789 0.02652 -5.954 0.000141 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.627 on 10 degrees of freedom Multiple R-squared: 0.78, Adjusted R-squared: 0.7579 F-statistic: 35.45 on 1 and 10 DF, p-value: 0.0001406 > confint(reg) 2.5 % 97.5 % (Intercept) 94.8294511 97.98633839 distancia -0.2169872 -0.09880227 > par(mfcol = c(2, 2)) > plot(reg) Curso Introducción al R – Ing. Juan Manuel Casanova Página 17 Análisis de Correlación > cor.test(carga, distancia, method = "pearson", alternative = "two.sided") Pearson's product-moment correlation data: carga and distancia t = -5.9536, df = 10, p-value = 0.0001406 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.9669577 -0.6270769 sample estimates: cor -0.88315 Modelos lineales Se tiene una base de datos en la que se ha registrado las notas de un curso de Estadìstica (estadística.txt) Variable Tipo Descripción ID del estudiante alfanumérico genero alfanumérico f=femenino m=masculino puntuación de test numérico puntos máximos = 50 puntuación del examen 1 numérico puntos máximos = 100 puntuación del examen 2 numérico puntos máximos = 100 puntuación de laboratorio numérico puntos máximos = 100 puntuación del examen numérico final puntos máximos = 200 > archivo<-read.table("c:\grados.txt") #leemos el archivo >nombres<c("ID","sexo","clase","test","exam1","exam2","labo","final") > names(archivo)<-nombres #nombramos las variables Curso Introducción al R – Ing. Juan Manuel Casanova Página 18 > modelo<-lm(final~test+exam1+exam2+labo,data=archivo) #modelo lineal > step(modelo,direction="forward") #seleccionamos hacia delante Start: AIC= 303.37 final ~ test + exam1 + exam2 + labo - labo - test - exam2 <none> - exam1 Df Sum of Sq RSS 1 99.2 19612.9 1 561.2 20074.9 1 614.5 20128.2 19513.7 1 3429.8 22943.5 AIC 301.6 302.8 302.9 303.4 309.3 Step: AIC= 301.61 final ~ test + exam1 + exam2 - exam2 <none> - test - exam1 Df Sum of Sq RSS 1 661.8 20274.7 19612.9 1 1645.0 21258.0 1 3601.0 23213.9 AIC 301.2 301.6 303.6 307.9 Step: AIC= 301.24 final ~ test + exam1 Df Sum of Sq <none> - test - exam1 1 1 RSS 20274.7 2511.8 22786.5 5469.7 25744.4 AIC 301.2 305.0 310.9 Call: lm(formula = final ~ test + exam1, data = archivo) Coefficients: (Intercept) 25.9520 test 1.3026 exam1 0.7172 Nos quedamos con este último modelo, según los resultados que nos muestra el R. Entonces: > modelo.FINAL<-lm(final~test+exam1,data=archivo) Curso Introducción al R – Ing. Juan Manuel Casanova Página 19 > summary(modelo.FINAL,cor=T) #incluimos cor=T para ver la correlación de los coeficientes Call: lm(formula = final ~ test + exam1, data = archivo) Residuals: Min 1Q Median 3Q Max -72.627 -12.149 2.902 16.257 34.708 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 25.9520 20.3937 1.273 0.209573 test 1.3026 0.5457 2.387 0.021143 * exam1 0.7172 0.2036 3.523 0.000977 *** --Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 Residual standard error: 20.99 on 46 degrees of freedom Multiple R-Squared: 0.451, Adjusted R-squared: 0.4271 F-statistic: 18.89 on 2 and 46 DF, p-value: 1.024e-06 Correlation of Coefficients: (Intercept) test test -0.7179 exam1 -0.1935 -0.5326 > par(mfrow = c(2,2)) > plot(modelo.FINAL) Análisis de Tablas de Contingencia La tabla de contingencia presentada está basada en los datos de B. J. Gallagher III, B. J. Jones, y L. P. Barakat, en Clin. Psychol. Nº 43: 438-443 (1987) y fueron tomados del libro Categorical Data Análisis de Agresti (1), página 83, tabla 3.3. Es una tabla 3× 3 en la que se desea saber si la opinión sobre origen de la Esquizofrenia es afectada por la Escuela del Pensamiento a la que pertenece el estudiante y si es así determinar el grado de influencia. El resumen de las variables es el siguiente: Escuela del Pensamiento Psiquiátrico a la que dice creer el estudiante: Ecléctico : 1 Médico : 2 Psicoanalítico : 3 Curso Introducción al R – Ing. Juan Manuel Casanova Página 20 Origen de la Esquizofrenia Biogénico : 1 Ambiental : 2 Combinación : 3 A continuación se presenta la tabla de contingencia que se forma con las variables. En ella, una celda es la frecuencia observada y representa el número de sujetos que pertenecen a la escuela del pensamiento i y que tienen una opinión sobre el origen de la esquizofrenia j: Escuela del Opinión sobre origen de la Esquizofrenia Total Pensamiento 1 2 3 1 90 12 78 180 2 13 1 6 20 3 19 13 50 82 Total 126 26 134 282 En el estudio a cada estudiante encuestado se le preguntaba en que escuela creía y cuál era su opinión sobre el origen de la esquizofrenia, por lo que ambas variables son variables respuesta. En este caso, la estructura probabilística de la tabla se ajusta más a un muestreo multinomial. La muestra pertenece a una misma población, por lo que la hipótesis de independencia entre estas dos variables es la más adecuada. > esquizo<-matrix(c(90,12,78,13,1,6,19,13,50),nrow=3,byrow=TRUE) > dimnames(esquizo)<list(c("Eclectico","Medico","Psicoanalitico"),c("Biogenico","Amb iental","Combinacion")) Curso Introducción al R – Ing. Juan Manuel Casanova Página 21 > names(dimnames(esquizo))<-c("Escuela","Origen de la Esquizofrenia") > total<-sum(esquizo) > propesq<-esquizo/total > round(propesq,3) > chisq.test(esquizo) > C<-((3*22.3777)/((3-1)*(22.3777+282)))^(1/2) > C > library(ca) # Análisis de Correspondencias Simple > acs<-ca(esquizo,nd=2) > summary(acs) > plot(acs,main="Mapa Perceptual") > modelo1<glm(frecuencia~escuela+origen+escuela*origen,family=poisson,esqu izo) > summary(modelo1) > modelo2<-glm(frecuencia~escuela+origen,family=poisson,esquizo) > summary(modelo2) Herramientas de Calidad Gráficas de Control Se registraron los motivos de insatisfacción de los clientes com respecto al servicio de cajeros automáticos. Motivo Frecuencias Error en dispensar dinero 62 Area del cajero sucia 35 Recibo ilegible 52 Largas filas 45 Billetes nuevos se pegan 24 Otros 10 Curso Introducción al R – Ing. Juan Manuel Casanova Página 22 > frecuencias <- c(62, 35, 52, 45, 24, 10) > names(frecuencias) <- c("Error en dispensar dinero", "Area del cajero sucia", "Recibo ilegible", "Largas filas", "Billetes nuevos se pegan",”Otros”) > pareto.chart(frecuencias, ylab = "Frecuencias de MOtivos de Insatisfacción", col=rainbow(length(frecuencias))) Gráficas de Control Se tienen los datos de las lecturas de La medición de Calcio en Leche Evaporada del analista X. Uno de los requisitos para habilitar a este analista para realizar este ensayo en un determinado laboratorio es que todos los datos estén bajo control estadístico. > lab<-read.table("c:/laboratorio.txt",header=T) > q <- qcc(lab$resultado, type="xbar.one",n.sigmas=3) Análisis de Series de Tiempo Se tiene la producción mensual de Maíz amarillo duro em El departamento de Lambayeque de los años 2000 al 2005. Se requieren hacer estimados de venta para El próximo año 2006. Data: serie.txt > maiz <-read.table("c:/serie.txt", header=TRUE) > mes<-maiz$mes > data <-maiz$data > serie<-ts(data,start=c(2000,1),frequency=12) > plot.ts(serie, type="o",ylab="Producción (Tn)",main="Maiz 2005",col="blue", lty="dashed") > plot(stl(serie, "per")) duro amarillo 2000- duro amarillo 2000- Descargar librería tseries > library(tseries) > jarque.bera.test(serie) > kpss.test(serie,null="L") > kpss.test(serie,null="T") > dserie<-diff(serie) > jarque.bera.test(dserie) > plot.ts(dserie, type="o",ylab="Producción 2005",col="blue", lty="dashed") > bartlett.test(data~mes) > par(mfrow=c(2,1)) > acf(dserie) (Tn)",main="Maiz Curso Introducción al R – Ing. Juan Manuel Casanova Página 23 >pacf(dserie) > modelom<-arima(serie, order = c(1,1,1), seasonal = list(order=c(1,1,1),period=12)) > modelom > tsdiag(modelom, gof.lag=20) > forem<-predict(modelom,n.ahead=12) > Um<-forem$pred + 2*forem$se > Lm<-forem$pred - 2*forem$se > minm=min(dserie,Lm) > maxm=max(dserie,Um) > ts.plot(serie,forem$pred,col=1:2, ylim=c(minm,maxm)) > lines(Um, col="blue", lty="dashed") > lines(Lm, col="blue", lty="dashed") Curso Introducción al R – Ing. Juan Manuel Casanova Página 24