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.
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).
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
Los objetos que aprendimos a crear pueden ser de varios tipos.
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”.
Un factor incluye los valores de una variable categórica y los diferentes niveles posibles de esta variable.
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
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
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.
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)
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
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
Se requiere constantemente, analizar variables en conjunto
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
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 | |
## -------------|-----------|-----------|-----------|
##
##
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
gallinas: https://www.curiosfera.com/razas-de-gallinas/
Colores: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
Manual básico: https://cran.r-project.org/doc/contrib/rdebuts_es.pdf
Importación: https://www.uv.es/pjperez/curso_R/tt_3_cargar_datos_v4.html