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

Documentos relacionados