Tutorial R

R es un lenguaje de programación orientado a objetos, interpretado, es decir, donde los comandos escritos (instrucciones), se ejecutan directamente sin necesidad de construir ejecutables que pueden resultar “largos y complejos”.

Su sintaxis simple, permite calcular un sinfín de elementos de manera sencilla.

Instalación de librerías

Imagina que necesitas hallar el coseno de un valor, pero no conoces la manera de calcularlo. En ese caso, puedes revisar un libro o información en internet donde encuentras la manera de hacerlo.

En ocasiones, se usarán instrucciones que han sido desarrolladas previamente. Para usarlas, necesitaremos importar la librería que las contenga para que R sepa cómo debe realizar las operaciones que estamos necesitando.

Si esa librería no ha sido descargada en nuestro computador, necesitaremos descargarla. R Studio nos permite instalarla desde la pestaña Packages, pero también es posible usar la instrucción install.packages("libreria"), donde reemplazaremos “librería” por el nombre correspondiente de la librería requerida.

Una vez que la librería existe en el computador, podemos “llamarla” (imagina que abres el libro que compraste previamente), con la instrucción library(libreria) o la instrucción require(libreria).

Objetos en memoria

Supongamos que tenemos un espacio de memoria que llamaremos cajón. En ese cajón, almacenaremos información. Para crear un objeto, ocupando ese espacio de memoria, usaremos el operador de asignación <-.

Por ejemplo, si deseamos crear un objeto que denominaremos edad y asignarle el valor de \(19\), usaremos la siguiente instrucción:

edad<-19

Es posible acceder a la información que contiene el objeto usando otras instrucciones.

Para ver el contenido del objeto (su valor o valores), podemos simplemente mencionarlo y se nos mostrará el valor contenido.

edad
## [1] 19

Una vez creado el objeto, podemos cambiar su valor usando nuevamente el operador asignación, teniendo en cuenta que la anterior información dejará de existir en la memoria. Además, es posible ejecutar operaciones matemáticas y otras funciones para asignarle el valor al objeto.

edad<-12*19
edad
## [1] 228

Como se observa en el resultado, decidimos expresar la edad en meses, así que mediante una sencilla operación, asignamos un nuevo valor a edad.

Es posible acceder a la información (los atributos) de ese objeto a través de diferentes operadores. La instrucción mode(edad) nos permite acceder al tipo del objeto edad (usamos el nombre correspondiente si le damos un nombre distinto a edad). La instrucción length(edad) nos permite ver la longitud del objeto, es decir, el número de elementos que contiene. Podemos deducir entonces que un objeto puede ser un vector, una matriz, etc.

mode(edad)
## [1] "numeric"
length(edad)
## [1] 1

Tipos de objetos

Los objetos que aprendimos a crear pueden ser de varios tipos.

Vector

Un vector tiene argumentos mode y length.

A modo de ejemplo, crearemos un vector x usando la instrucción concatenar con la letra c y un vector w con la función vector()

x<-c(1,3,5)
x
## [1] 1 3 5
y<-vector(mode = "numeric",length = 3)
y[1]<-1
y[2]<-3
y[3]<-5
y
## [1] 1 3 5

La función vector() nos permite definir explícitamente el tipo de datos que conforman al vector y la longitud del mismo. Además, es posible asignar los valores de manera individual a cada una de sus “casillas”.

Factor

Un factor incluye los valores de una variable categórica y los diferentes niveles posibles de esta variable.

Matriz

Una matriz es realmente un vector con un atributo adicional (dim) el cual a su vez es unvector numérico de longitud 2, que define el número de filas y columnas de la matriz.

MatrizEjemplo<-matrix(1:6,)
MatrizEjemplo
##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3
## [4,]    4
## [5,]    5
## [6,]    6
MatrizEjemplo<-matrix(1:6,nrow = 2)
MatrizEjemplo
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
MatrizEjemplo<-matrix(1:6,ncol=2)
MatrizEjemplo
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6

Ahora, accederemos a algunas de las “casillas” de nuestra MatrizEjemplo. Recuerda que es posible cambiar sus valores de manera manual como en los vectores.

MatrizEjemplo[3,2]
## [1] 6
MatrizEjemplo[3,1]
## [1] 3
MatrizEjemplo[,1]
## [1] 1 2 3
MatrizEjemplo[1,]
## [1] 1 4

Marco de datos “data.frame”

Un marco de datos es una estructura más genérica que una matriz y posibilita tener elementos de distintos tipos en sus columnas. Puede crearse usando la función data.frame. Un data.frame estará “conformado” por “vectores” al igual que una matriz. Es necesario que estos vectores sean de la misma longitud. En caso de que uno de ellos sea más corto, será repetido un cierto número de veces. Veamos:

#creamos un vector por extensión con los números de 1 a 5 usando 1:5
unVector<-1:5
#asignamos un valor cualquiera a un objeto
unNumero<-20
#creamos un marco de datos con el vector y el número
unMarco<-data.frame(unVector,unNumero)
#mostremos el marco
unMarco
##   unVector unNumero
## 1        1       20
## 2        2       20
## 3        3       20
## 4        4       20
## 5        5       20
#cambiemos el nombre de la columna "unVector" por "elVector"
names(unMarco)[1]<-"elVector"
unMarco
##   elVector unNumero
## 1        1       20
## 2        2       20
## 3        3       20
## 4        4       20
## 5        5       20

Una vez creado el marco de datos, podemos usar alguna de sus columnas de datos o “activarlas” para usarlas como objetos con la función attach(). Se puede "desactivarlas usando la función detach().

#mostramos el objeto unVector del marco de datos
unMarco$elVector
## [1] 1 2 3 4 5
#activamos los objetos
attach(unMarco)
#mostramos el objeto
elVector
## [1] 1 2 3 4 5

Importando datos desde un archivo

Antes de empezar a importar, debemos tener en cuenta que existe un directorio de trabajo, que es la “carpeta” en la que estamos trabajando con nuestro documento. Para obtener el directorio de trabajo, ejecutamos la instrucción getwd(). Para cambiarlo, podemos usar la instrucción setwd().

getwd()

Observa el directorio obtenido y pega la ruta en el explorador de windows. Así tendrás acceso a la ubicación de trabajo.

R permite importar datos de diversos formatos mediante la instrucción read.. R Studio, muestra las sugerencias de las posibles opciones a elegir. read.table, read.csv, read.csv2 son algunas de las opciones presentes.

Otra manera de importar datos, es a través de la función scan.

Dentro de la función de importación, podemos usar la instrucción file.choose para obtener una ventana de las carpetas que nos permitirá buscar nuestro archivo en diferentes rutas.

Para nuestro ejercicio, usaremos una hoja de cálculo de excel, cuya “extensión” (el tipo de archivo en el ordenador, como mp3 es la extensión de un archivo de audio) es .xls ó .xlsx.

Para ello, usaremos el paquete que R Studio usa en sus menús: readxl. Recuerda que el archivo PrimeraPrueba.xlsx debe estar en el directorio de trabajo.

#instalamos el paquete para leer archivos
install.packages("readr")
library(readr)#activamos la librería
install.packages("readxl") #instalamos la librería para leer excel
library(readxl) #activamos la librería
misDatos<-read_excel("PrimeraPrueba.xlsx") 

R Studio nos proporciona una manera mucho más sencilla e intuitiva de hacer la importación de archivos de excel. Para ello, iremos al menú file, Import dataset, from excel. Con el botón browse, ubicaremos el archivo requerido y podremos seleccionar el tipo de datos que importaremos, a la vez que designarle un nombre deseado a la base de datos escribiéndolo en el cuadro de texto Name en la parte inferior izquierda de la ventana de importación.

De esta manera, importaremos nuestra base de datos ** con el nombre misDatos.

Estadística descriptiva básica con R

Una vez que leímos los datos, “activamos” las columnas para usarlas como nuestras “variables” y comprobamos su contenido.

attach(datos) #Activa las variables de la Base de datos "Datos" importada
datos#Ten en cuenta mayúsculas y minúsculas
## # A tibble: 100 x 8
##     Edad Tipo  Raza  Peso_prom_huevo Alimentacion Huevos_prom_mes
##    <dbl> <chr> <chr>           <dbl> <chr>                  <dbl>
##  1     6 Indu~ livo~            60.0 buena                     11
##  2    11 crio~ gala             58.2 buena                     13
##  3     2 Indu~ livo~            58.1 buena                     30
##  4     1 Indu~ livo~            50.2 mala                      30
##  5     2 Indu~ livo~            50.4 mala                      32
##  6     1 Indu~ livo~            50.2 buena                     26
##  7     4 Indu~ livo~            49.2 buena                     14
##  8     2 Indu~ livo~            60.5 buena                     21
##  9    13 crio~ livo~            52.0 buena                     16
## 10     1 Indu~ livo~            51.5 buena                     22
## # ... with 90 more rows, and 2 more variables: Color_gallina <chr>,
## #   Salud <chr>
head(Tipo)#nos muestra los primeros datos de la variable Tipo
## [1] "Industrial" "criolla"    "Industrial" "Industrial" "Industrial"
## [6] "Industrial"
tail(Tipo)#nos muestra los últimos datos de la variable Tipo
## [1] "Industrial" "criolla"    "Industrial" "Industrial" "Industrial"
## [6] "Industrial"

El conjunto de datos, es una simulación de un estudio estadístico sobre el peso de los huevos puestos, la cantidad de huevos al mes y las variables que describen a cada una de las gallinas de la simulación: Edad, Tipo, Raza, Alimentación, Color y Salud.

Observa que la edad es una variable cuantitativa discreta, el tipo es una variable cualitativa al igual que la raza, la alimentación, el color y el estado de salud. El peso de los huevos es una variable cuantitativa continua y la cantidad de huevos al mes es una variable cuantitativa discreta.

Usaremos el paquete car.

install.packages("car")
require(car)

Análisis unidimensional de variables cuantitativas

Con el comando nclass.Sturges(Edad), calculamos el número de clases de la variable Edad. Este comando es útil para agrupar las variables cuantitativas continuas y discretas.

Generaremos la tabla de frecuencias del peso de los huevos, a la que llamaremos Tabla_huevos.

Clases <- cut(Edad, breaks=nclass.Sturges(Edad))#clases
Freq <- as.data.frame(table(Clases))#frecuencuas
Tabla_huevos <- transform(Freq, CumFreq = cumsum(Freq), Rel =
                     prop.table(Freq), CumRel=cumsum(prop.table(Freq)))#tabla
Tabla_huevos
##         Clases Freq CumFreq  Rel CumRel
## 1 (0.985,2.88]   36      36 0.36   0.36
## 2  (2.88,4.75]   29      65 0.29   0.65
## 3  (4.75,6.62]    9      74 0.09   0.74
## 4   (6.62,8.5]    8      82 0.08   0.82
## 5   (8.5,10.4]    6      88 0.06   0.88
## 6  (10.4,12.2]    6      94 0.06   0.94
## 7  (12.2,14.1]    4      98 0.04   0.98
## 8    (14.1,16]    2     100 0.02   1.00

Si no queremos generar grupos, podemos probar lo siguiente para la variable edad.

Freq <- as.data.frame(table(Edad))
TablaEdad <- transform(Freq, CumFreq = cumsum(Freq), Rel =
                     prop.table(Freq), CumRel=cumsum(prop.table(Freq)))
TablaEdad
##    Edad Freq CumFreq  Rel CumRel
## 1     1   20      20 0.20   0.20
## 2     2   16      36 0.16   0.36
## 3     3   18      54 0.18   0.54
## 4     4   11      65 0.11   0.65
## 5     5    6      71 0.06   0.71
## 6     6    3      74 0.03   0.74
## 7     7    3      77 0.03   0.77
## 8     8    5      82 0.05   0.82
## 9     9    2      84 0.02   0.84
## 10   10    4      88 0.04   0.88
## 11   11    5      93 0.05   0.93
## 12   12    1      94 0.01   0.94
## 13   13    4      98 0.04   0.98
## 14   15    1      99 0.01   0.99
## 15   16    1     100 0.01   1.00

Ahora hallaremos algunas medidas importantes

mean(Edad) #media
median(Edad) #mediana

Observa que la media de edad es de

## [1] 4.67

Ahora generaremos un histograma para analizar la edad de las gallinas

hist(Edad, col = "deepskyblue", main = "Histograma de Edad", ylab = "Frecuecia")  #histograma

Crearemos ahora un diagrama de bigotes, conocido también como diagrama de cajas o boxplot

boxplot(Edad, col = "deepskyblue")
points(mean(Edad),pch=8)

Recuerda “jugar” con las características de cada instrucción para observar los cambios en los gráficos.

Ahora, analizaremos otras medidas.

var(Edad) # Varianza
sd(Edad) #Desviación estándar
sd(Edad)/mean(Edad) #Coeficiente de variación 
range(Edad) #Rango

Ahora instalaremos un paquete requerido para la asimetría y curtosis

install.packages("e1071")
require(e1071)
## Loading required package: e1071
skewness(Edad) #Coeficiente de asimetría
## [1] 1.115164
kurtosis(Edad, type =1) #Coeficiente de curtosis
## [1] 0.2706538
summary(Edad) #Resumen estadístico boxplot 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    2.00    3.00    4.67    7.00   16.00

Ahora, vamos a visualizar varios gráficos al tiempo

par(mfrow=c(2,3)) #Para mostrar varios gráficos al tiempo
hist(Edad, col = "deepskyblue", main = "Histograma de Edad", ylab = "Frecuecia")
hist(Peso_prom_huevo, col = "deepskyblue", main = "Histograma de peso de huevos", ylab = "Frecuecia")
hist(Huevos_prom_mes, col = "deepskyblue", main = "Histograma de huevos al mes", ylab = "Frecuecia")
boxplot(Edad, col = "deepskyblue",  main = "Boxplot de Edad")
points(mean(Edad),pch=8)
boxplot(Peso_prom_huevo, col = "deepskyblue", main = "Boxplot de Peso huevos")
points(mean(Peso_prom_huevo),pch=8)
boxplot(Huevos_prom_mes, col = "deepskyblue", main = "Boxplot de Horas huevos al mes")
points(mean(Huevos_prom_mes),pch=8)

Resúmenes estadísticos

summary(Edad) #Resumen estadístico Edad
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    2.00    3.00    4.67    7.00   16.00
summary(Peso_prom_huevo) #Resumen estadístico peso huevos
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   41.49   50.57   52.00   55.79   59.91   81.25
summary(Huevos_prom_mes) #Resumen estadístico huevos al mes
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8.00   13.75   22.00   20.81   28.00   35.00

Ahora instalaremos una librería que nos permite ver un resumen estadístico más completo

install.packages("RcmdrMisc")
require(RcmdrMisc)
## Loading required package: RcmdrMisc
## Loading required package: car
## Loading required package: carData
## Loading required package: sandwich
numSummary(Edad, statistics=c("mean", "sd", "IQR", "quantiles","cv", "skewness", "kurtosis"), type=c("2", "1", "3"), 
           quantiles=c(0, .25, .5, .75, 1)) #resumen más detallado y útil
##  mean       sd IQR        cv skewness  kurtosis 0% 25% 50% 75% 100%   n
##  4.67 3.806043   5 0.8149984 1.149416 0.3471773  1   2   3   7   16 100

Volvemos a la vista de un solo gráfico y analizamos

par(mfrow=c(1,1))
Boxplot(Peso_prom_huevo, col = "deepskyblue", main = "Boxplot de peso de huevos") #Boxplot (con mayúscula) para ver observación atípica

## [1] 29 79

Análisis unidimensional de variables CUALITATIVAS

Empezaremos generando diagramas de barras para estas variables “categóricas”, contando la cantidad de gallinas para cada una de las categorías tipo, raza y salud

par(mfrow=c(1,3))
barTipo<-barplot(table(Tipo), col="firebrick1", ylab = "Frecuencia", main = "Diagrama de barras Tipo")
text(x=barTipo,y=table(Tipo),labels=(as.character(table(Tipo))),pos=1)
barRaza<-barplot(table(Raza), col="firebrick1", ylab = "Frecuencia", main = "Diagrama de barras Raza")
text(x=barRaza,y=table(Raza),labels=(as.character(table(Raza))),pos=1)
barSalud<-barplot(table(Salud), col="firebrick1", ylab = "Frecuencia", main = "Diagrama de barras Salud")
text(x=barSalud,y=table(Salud),labels=(as.character(table(Salud))),pos=1)

Ahora generemos tablas de frecuencia

Para el color

Freq <- table(Color_gallina)
TablaColor <- transform(Freq, CumFreq = cumsum(Freq), Rel = prop.table(Freq), CumRel=cumsum(prop.table(Freq)))
TablaColor
##   Color_gallina Freq CumFreq  Rel CumRel
## 1        blanco   65      65 0.65   0.65
## 2         negro   35     100 0.35   1.00

Para los tipos

Freq <- table(Tipo)
TablaTipo <- transform(Freq, CumFreq = cumsum(Freq), Rel =
                     prop.table(Freq), CumRel=cumsum(prop.table(Freq)))
TablaTipo
##         Tipo Freq CumFreq  Rel CumRel
## 1    criolla   27      27 0.27   0.27
## 2 Industrial   73     100 0.73   1.00

Para la alimentación

Freq <- table(Alimentacion)
TablaAlimentacion <- transform(Freq, CumFreq = cumsum(Freq), Rel =
                     prop.table(Freq), CumRel=cumsum(prop.table(Freq)))
TablaAlimentacion
##   Alimentacion Freq CumFreq  Rel CumRel
## 1        buena   89      89 0.89   0.89
## 2         mala   11     100 0.11   1.00

Análisis Bidimensional

Se requiere constantemente, analizar variables en conjunto

Relación de variables cualitativas y cuantitativas

Es posible analizar estas relaciones a través de boxplots comparativos. Analicemos la edad y el tipo de gallinas

par(mfrow=c(1,1))
#Boxplot comparativo Edad VS Tipo  
boxplot(Edad ~ Tipo, xlab="Tipo", ylab="Edad", col="darkseagreen1", las=1)
medias <- tapply(Edad, Tipo, mean)
points(medias, pch=8)

Observa que por alguna razón, las gallinas industriales tienen menos años de vida en promedio que las gallinas criollas.

#Boxplot comparativo Huevos_prom_mes VS Raza  
boxplot(Huevos_prom_mes ~ Raza, xlab="Raza", ylab="Huevos_prom_mes", col="darkseagreen1", las=1)
medias <- tapply(Huevos_prom_mes, Raza, mean)
points(medias, pch=6)

Observa que las gallinas de raza Livorno parecen tener una mayor producción de huevos al mes en promedio, pero también una gran variabilidad.

#Boxplot comparativo Peso_prom_huevo VS Salud
boxplot(Peso_prom_huevo ~ Salud, xlab="Salud", ylab="Peso_prom_huevo", col="darkseagreen1", las=1)
medias <- tapply(Peso_prom_huevo, Salud, mean)
points(medias, pch=2)

Observa que el peso de los huevos no parece verse afectado por el estado de salud. Pero ¿Qué pasará con la cantidad de huevos al mes?

#Boxplot comparativo Huevos_prom_mes VS Salud
boxplot(Huevos_prom_mes ~ Salud, xlab="Salud", ylab="Huevos_prom_mes", col="darkseagreen1", las=1)
medias <- tapply(Huevos_prom_mes, Salud, mean)
points(medias, pch=2)

En este caso, sí se observa un comportamiento relativamente mejor en las cantidades de huevos al mes producidas por las gallinas en buen estado de salud.

Ahora, analizaremos medidas de resumen relacionadas con la raza de las gallinas

numSummary(Edad, statistics=c("mean", "sd", "IQR", "quantiles","cv", "skewness", "kurtosis"), type=c("2", "1", "3"), 
           quantiles=c(0, .25, .5, .75, 1), Raza)
##              mean       sd  IQR        cv   skewness    kurtosis 0% 25%
## gala     8.454545 3.724611 4.00 0.4405454 -0.6793629 0.061754691  1   7
## livorno  3.845238 3.231971 2.25 0.8405127  1.6406740 2.156650924  1   2
## piroca  10.200000 3.898718 4.00 0.3822272  0.8049205 0.000865651  6   8
##         50%   75% 100% data:n
## gala      9 11.00   13     11
## livorno   3  4.25   15     84
## piroca    9 12.00   16      5
numSummary(Huevos_prom_mes, statistics=c("mean", "sd", "IQR", "quantiles","cv", "skewness", "kurtosis"), type=c("2", "1", "3"), 
           quantiles=c(0, .25, .5, .75, 1), Raza)
##         mean        sd  IQR         cv   skewness  kurtosis 0% 25%  50%
## gala    16.0 6.1481705  2.5 0.38426065  1.6566205  1.611097 10  13 14.0
## livorno 22.0 7.2161132 14.0 0.32800514 -0.2599402 -1.380385  8  14 24.5
## piroca  11.4 0.5477226  1.0 0.04804584  0.6085806 -3.333333 11  11 11.0
##          75% 100% data:n
## gala    15.5   29     11
## livorno 28.0   35     84
## piroca  12.0   12      5
numSummary(Peso_prom_huevo, statistics=c("mean", "sd", "IQR", "quantiles","cv", "skewness", "kurtosis"), type=c("2", "1", "3"), 
           quantiles=c(0, .25, .5, .75, 1), Raza)
##             mean       sd    IQR         cv  skewness   kurtosis     0%
## gala    63.81691 7.191835 12.002 0.11269482 0.3218028 -1.6437394 55.545
## livorno 53.73145 5.080745  7.390 0.09455812 0.9688328  0.6633005 41.489
## piroca  72.78560 5.685429  1.900 0.07811200 0.4400193  1.7908567 65.352
##              25%    50%      75%   100% data:n
## gala    57.72750 61.260 69.72950 74.096     11
## livorno 50.46975 51.431 57.85975 69.210     84
## piroca  71.70400 72.020 73.60400 81.248      5

Relación de variables cualitativa y cualitativa

Es muy conveniente relacionar y analizar dos variables categóricas entre sí a través de diagramas de barras comparativos.

par(mfrow=c(1,3))

#Diagrama de barras comparativo Tipo vs Raza
barplot(table(Tipo, Raza), beside=TRUE, las=1,
        legend= TRUE,bty="n", main = "Tipo vs Raza",ylim=c(0,80),col=c("deepskyblue","firebrick1"))


#Diagrama de barras comparativo Alimentación vs Tipo
barplot(table(Alimentacion,Tipo), beside=TRUE, las=1,
        legend= TRUE, bty="n", main = "Alimentacion vs Tipo",ylim=c(0,80),col=c("deepskyblue","firebrick1"))

#Diagrama de barras comparativo Color vs Tipo
barplot(table(Color_gallina, Tipo), beside=TRUE, las=1,legend=TRUE, ylim=c(0,80),bty="n", main = "Color vs Tipo",col=c("deepskyblue","firebrick1"))

Observa que la raza livorno parece predominar en el ámbito industrial, pero también lo hace en el sector campestre (criollo). Por parte de la alimentación, no es concluyente el gráfico, dado que la cantidad de gallinas industriales es mayor, así que no se puede decir de entrada que estén mejor alimentadas que las criollas. Por la parte del color, se puede observar una predominancia del blanco sobre el negro para el ámbito industrial y al viceversa.

Ahora, instalaremos un paquete para generar tablas de contingencia

install.packages("gmodels")
require(gmodels)
## Loading required package: gmodels
with(datos, CrossTable(Raza,Salud))
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  100 
## 
##  
##              | Salud 
##         Raza |   enferma |      sana | Row Total | 
## -------------|-----------|-----------|-----------|
##         gala |         0 |        11 |        11 | 
##              |     0.990 |     0.098 |           | 
##              |     0.000 |     1.000 |     0.110 | 
##              |     0.000 |     0.121 |           | 
##              |     0.000 |     0.110 |           | 
## -------------|-----------|-----------|-----------|
##      livorno |         8 |        76 |        84 | 
##              |     0.026 |     0.003 |           | 
##              |     0.095 |     0.905 |     0.840 | 
##              |     0.889 |     0.835 |           | 
##              |     0.080 |     0.760 |           | 
## -------------|-----------|-----------|-----------|
##       piroca |         1 |         4 |         5 | 
##              |     0.672 |     0.066 |           | 
##              |     0.200 |     0.800 |     0.050 | 
##              |     0.111 |     0.044 |           | 
##              |     0.010 |     0.040 |           | 
## -------------|-----------|-----------|-----------|
## Column Total |         9 |        91 |       100 | 
##              |     0.090 |     0.910 |           | 
## -------------|-----------|-----------|-----------|
## 
## 

Relación de variable cuantitativa y cuantitativa

El diagrama más común para analizar una variable cuantitativa con respecto a otra, es el de dispersión

#Diagramas de dispersión
par(mfrow=c(1,3))
plot(Edad, Peso_prom_huevo, pch=21, las=1)
plot(Edad, Huevos_prom_mes, pch=21, las=1)
plot(Peso_prom_huevo, Huevos_prom_mes, pch=21, las=1)

Observa en el primer gráfico que hay gran dispersión de los datos, por lo que no se puede determinar de entrada una relación entre la edad y el peso de los huevos.

Para el segundo gráfico en cambio, se observa una concentración de los huevos al mes en edades tempranas.

En el tercer gráfico, se observa una “tendencia” similar a la anterior pero menos pronunciada, lo que sugiere que a menor peso de los huevos, mayor producción de huevos al mes.

Podemos confirmar estas relaciones a través de los coeficientes de covarianza y correlación

#Medidas de resumen: Covarianza y correlación.
cov(Edad, Peso_prom_huevo)
cov(Edad, Huevos_prom_mes)
cov(Peso_prom_huevo, Huevos_prom_mes)

cor(Edad, Peso_prom_huevo)
cor(Edad, Huevos_prom_mes)
cor(Peso_prom_huevo, Huevos_prom_mes)

Finalmente, realizaremos un diagrama de pareto. Para ello, se requiere un nuevo paquete

install.packages("qcc")
library(qcc)
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
par(mfrow=c(1,1))
pareto.chart(table(Raza), las=1, ylab = "Frecuencia", ylab2 = "Porcentaje acumulado", main="Gráfico de Pareto Raza", 
             col=heat.colors(n=5), cumperc = seq(0,100, by=10)) #grafico de pareto

##          
## Pareto chart analysis for table(Raza)
##           Frequency Cum.Freq. Percentage Cum.Percent.
##   livorno        84        84         84           84
##   gala           11        95         11           95
##   piroca          5       100          5          100
pareto.chart(table(Tipo), las=1, ylab = "Frecuencia", ylab2 = "Porcentaje acumulado", main="Gráfico de Pareto Tipo", 
             col=heat.colors(n=5), cumperc = seq(0,100, by=10)) #grafico de pareto

##             
## Pareto chart analysis for table(Tipo)
##              Frequency Cum.Freq. Percentage Cum.Percent.
##   Industrial        73        73         73           73
##   criolla           27       100         27          100