Primero vamos a instalar algunos paquetes.
install.packages("readxl", dependencies = TRUE) # Instalación del paquete readxl
library("readxl") # Activación del paquete readxl
Objetos que se encuentra en el paquete readxl:
library(help=readxl)
install.packages("dplyr")
library("dplyr")
install.packages("prettyR")
library("prettyR") # Para la función describe() y Mode()
library(help=prettyR)
install.packages("tidyverse")
library("tidyverse") # Paquete necesario para el uso de %>%
Paquete agricolae
Paquete DescTools
Vamos a importar bases de datos, y a realizar análisis de datos univariados.
Funciones para importar archivos desde excel:
Función read.csv() del paquete utils, archivo limitado por comas
Función read_excel() del paquete readxl
Función read.xlsx() del paquete xlsx
Función read.xlsx() del paquete openxlsx
La función args() muestra los argumentos de la función read_excel():
args(read_excel)
:) function (path, sheet = NULL, range = NULL, col_names = TRUE,
:) col_types = NULL, na = "", trim_ws = TRUE, skip = 0, n_max = Inf,
:) guess_max = min(1000, n_max), progress = readxl_progress(),
:) .name_repair = "unique")
:) NULL
En el caso de los dos primeros argumentos de read_excel(): + path es el argumento que especifica la ruta en donde se encuentra el archivo de excel.
Con la función read_excel() se va a importar el archivo “Variables_agricolas.xlsx” desde excel a R, y se va a crear el objeto “dat_variables”.
dat_variables<-read_excel("C:/Documetos MGM_OS_Dell/Documentos Maria_Dell/UAGro/Cursos_Taller_Impartidos/Curso-Taller_DGETA_2022/Variables_agricolas.xlsx")
class(dat_variables) #tbl es tabla
:) [1] "tbl_df" "tbl" "data.frame"
View(dat_variables) # Muestra la base de datos importada dat_variables
Base de datos importada a R:
head(dat_variables)
:) # A tibble: 6 × 24
:) Anio Idestado Nomestado Idddr Nomddr Idcader Nomcader Idmun…¹ Nommu…² Idciclo
:) <dbl> <dbl> <chr> <dbl> <chr> <dbl> <chr> <dbl> <chr> <dbl>
:) 1 2020 12 Guerrero 53 Atoyac 1 Técpan … 57 Técpan… 3
:) 2 2020 12 Guerrero 53 Atoyac 1 Técpan … 57 Técpan… 3
:) 3 2020 12 Guerrero 53 Atoyac 1 Técpan … 57 Técpan… 3
:) 4 2020 12 Guerrero 53 Atoyac 4 La Unión 68 La Uni… 3
:) 5 2020 12 Guerrero 53 Atoyac 4 La Unión 68 La Uni… 3
:) 6 2020 12 Guerrero 53 Atoyac 5 Petatlán 38 Zihuat… 3
:) # … with 14 more variables: Nomcicloproductivo <chr>, Idmodalidad <dbl>,
:) # Nommodalidad <chr>, Idunidadmedida <dbl>, Nomunidad <chr>, Idcultivo <dbl>,
:) # Nomcultivo.Sin.Um <chr>, Sembrada <dbl>, Cosechada <dbl>,
:) # Siniestrada <dbl>, Volumenproduccion <dbl>, Rendimiento <dbl>,
:) # Precio <dbl>, Valorproduccion <dbl>, and abbreviated variable names
:) # ¹Idmunicipio, ²Nommunicipio
Según su escala de medición:
Nominal: dicotómicas, politómicas (No existe orden en las categorías)
Ordinal (Existe orden en las categorías)
Métrica
De intervalo
De razón
Según el número de valores que contiene:
Continua (Números reales)
Discreta (Números enteros)
Según su papel en la investigación:
Independiente
Dependiente
Base de datos iris: This famous iris data set gives the measurements in centimeters of the variables sepal length and width and petal length and width, respectively, for 50 flowers from each of 3 species of iris. The species are Iris setosa, versicolor, and virginica.
data(iris)
attributes(iris)
:) $names
:) [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
:)
:) $class
:) [1] "data.frame"
:)
:) $row.names
:) [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
:) [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
:) [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
:) [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
:) [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
:) [91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
:) [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
:) [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
:) [145] 145 146 147 148 149 150
class(iris)
:) [1] "data.frame"
dim(iris)
:) [1] 150 5
Base de datos iris:
head(iris)
:) Sepal.Length Sepal.Width Petal.Length Petal.Width Species
:) 1 5.1 3.5 1.4 0.2 setosa
:) 2 4.9 3.0 1.4 0.2 setosa
:) 3 4.7 3.2 1.3 0.2 setosa
:) 4 4.6 3.1 1.5 0.2 setosa
:) 5 5.0 3.6 1.4 0.2 setosa
:) 6 5.4 3.9 1.7 0.4 setosa
Nombre de las columnas del objeto iris:
colnames(iris) # Nombre de las columnas del objeto iris
:) [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
Creación del objeto dat_iris y uso de la función rename() para cambiar los nombres de las columnas de la base de datos iris.
dat_iris<-iris%>%
rename(Long.Sepal=Sepal.Length, Ancho.Sepal=Sepal.Width,
Long.Petalo=Petal.Length, Ancho.Petalo=Petal.Width,
Especies=Species)
Base de datos iris con nuevos nombres para las variables:
head(dat_iris)
:) Long.Sepal Ancho.Sepal Long.Petalo Ancho.Petalo Especies
:) 1 5.1 3.5 1.4 0.2 setosa
:) 2 4.9 3.0 1.4 0.2 setosa
:) 3 4.7 3.2 1.3 0.2 setosa
:) 4 4.6 3.1 1.5 0.2 setosa
:) 5 5.0 3.6 1.4 0.2 setosa
:) 6 5.4 3.9 1.7 0.4 setosa
Note que la función también str() muestra de que tipo son las variables del objeto dat_iris.
str(dat_iris)
:) 'data.frame': 150 obs. of 5 variables:
:) $ Long.Sepal : num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
:) $ Ancho.Sepal : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
:) $ Long.Petalo : num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
:) $ Ancho.Petalo: num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
:) $ Especies : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
class(dat_iris$Long.Sepal)
:) [1] "numeric"
class(dat_iris$Ancho.Sepal)
:) [1] "numeric"
class(dat_iris$Long.Petalo)
:) [1] "numeric"
class(dat_iris$Ancho.Petalo)
:) [1] "numeric"
Las categorías de una variable cualitativa, se pueden arreglar en una tabla:
| Categoría | Conteo |
|---|---|
| \(a_{1}\) | \(n_{1}\) |
| \(a_{2}\) | \(n_{2}\) |
| . | . |
| . | . |
| . | . |
| \(a_{k}\) | \(n_{k}\) |
A partir de esta información se puede calcular:
Frecuencias absolutas, \(n_{i}\), es decir, la cantidad de unidades por categoría (valores absolutos)
Frecuencias relativas, \(f_{i}=\frac{n_{i}}{n}\), es decir, la proporción de unidades por categoría (valores relativos), donde \(n=\sum n_{i}\).
Frecuencias relativas porcentuales, \(f_{i}*100\), es decir, la proporción de unidades por categoría expresada en porcentajes.
class(dat_iris$Especies)
:) [1] "factor"
resultado<-dat_iris %>%
select(Especies)%>%
group_by(Especies)%>%
summarise(Fre.abs=n())%>%
mutate(Fre.relativas=Fre.abs/sum(Fre.abs),
Fre.relativas.por=Fre.relativas*100)
kable(resultado, digits = 3, col.names = c("Especies", "Frecuencias absolutas", "Frecuencias relativas", "Frecuencias relativas porcentual"))
| Especies | Frecuencias absolutas | Frecuencias relativas | Frecuencias relativas porcentual |
|---|---|---|---|
| setosa | 50 | 0.333 | 33.333 |
| versicolor | 50 | 0.333 | 33.333 |
| virginica | 50 | 0.333 | 33.333 |
attach(resultado)
pie(Fre.abs,col=rainbow(6),main="Grafico de sectores") # frecuencias absolutas
Si usamos la función attach() para manejar bases de datos las cosas se simplifian, ya que se puede trabajar directamente con las variables sin tener que escribir el nombre de la base de datos antes de la varaible, a continuación se muestra un ejemplo. (With attach() the database is attached to the R search path. This means that the database is searched by R when evaluating a variable, so objects in the database can be accessed by simply giving their names).
attach(dat_iris) # La función attach adjunta la base de datos a la ruta de búsqueda de R, por lo que se puede acceder a los objetos de la base de datos simplemente dando sus nombres.
Dado \(n\) datos el promedio está dado por: \[ \bar{x}=\frac{1}{n}\sum_{i=1}^{n} x_{i} \]
x<-c(2,4,6)
mean(x)
:) [1] 4
La mediana, es un valor que divide a las observaciones en dos grupos con el mismo número de datos. Si el número de datos es par, se elige el promedio de los dos datos centrales. La mediana no es sensible a los valores extremos.
x<-c(2,4,6,8)
median(x)
:) [1] 5
La moda de un conjunto de datos, es el valor que ocurre con mayor frecuencia. Si todos los valores son diferentes, entonces no hay moda. Un conjunto de datos puede tener mas de una moda.
x<-c(2,4,6,8,2,2,6,6,6)
Mode(x)
:) [1] "6"
Ejemplo con la base de datos dat_iris:
mean(Ancho.Petalo) # Promedio
:) [1] 1.199333
median(Ancho.Petalo) # Mediana
:) [1] 1.3
Mode(Ancho.Petalo) # Moda
:) [1] "0.2"
Otra función que también reporta la Moda es Mode() y se encuentra en el paquete DescTools.
La varianza muestral está dada por
\[ S^2=\frac{1}{n-1}\sum_{i=1}^{n} (x_{i}-\bar{x})^2 \] La desviación estándar está dada por \[ \sqrt{S^2} \] Ejemplos:
var(Ancho.Petalo) # Varianza
:) [1] 0.5810063
sd(Ancho.Petalo) # Desviación estándar
:) [1] 0.7622377
Los cuantiles son puntos de corte tomados a intervalos de un conjunto de datos. El cuantil de orden \(p\) (con 0 < p < 1) es el valor d \(x_{p}\) que marca un corte de modo que una proporción \(p\) de valores es menor o igual que \(x_{p}\). Por ejemplo, el cuantil de orden \(0.30\) dejaría un \(30\%\) de valores por debajo.
Los cuantiles suelen usarse por grupos que dividen la muestra en partes iguales; entendidas estas como intervalos que comprenden la misma proporción de valores. Los más usados son:
Los cuartiles, que dividen la muestra en cuatro partes (cuantiles): 0.25 0.50 y 0.75.
Los quintiles, que dividen la muestra en cinco partes (cuantiles): 0.20; 0.40; 0.60 y 0.80.
Los deciles, que dividen la muestra en diez partes.
Los percentiles, que dividen la muestra en cien partes.
Ejemplos:
range(Ancho.Petalo) # La función range() reporta el máximo y el valor mínimo
:) [1] 0.1 2.5
diff(range(Ancho.Petalo)) # La función diff() reporta el rango=máximo-mínimo
:) [1] 2.4
IQR(Ancho.Petalo) # La función IQR() reporta el rango intercuartil es la diferencia de Q3-Q1
:) [1] 1.5
summary(dat_iris)
:) Long.Sepal Ancho.Sepal Long.Petalo Ancho.Petalo
:) Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
:) 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
:) Median :5.800 Median :3.000 Median :4.350 Median :1.300
:) Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
:) 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
:) Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
:) Especies
:) setosa :50
:) versicolor:50
:) virginica :50
:)
:)
:)
describe(dat_iris)
:) Description of dat_iris
:)
:) Numeric
:) mean median var sd valid.n
:) Long.Sepal 5.84 5.80 0.69 0.83 150
:) Ancho.Sepal 3.06 3.00 0.19 0.44 150
:) Long.Petalo 3.76 4.35 3.12 1.77 150
:) Ancho.Petalo 1.20 1.30 0.58 0.76 150
:)
:) Factor
:)
:) Especies setosa versicolor virginica
:) Count 50.00 50.00 50.00
:) Percent 33.33 33.33 33.33
:) Mode >1 mode
Otra función que también reporta un resumen de las estadísticas es Summarize() y se encuentra en el paquete FSA.
ggplot(dat_iris, aes(Long.Petalo))+
geom_histogram(fill = "blue")+ # Gráfico de barras
theme_bw()+ # Fondo del gráfico cuadriculado
labs(x="Lontitud del pétado",y="Conteos") # Cambio de nombre de los ejes
ggplot(dat_iris, aes(Long.Petalo)) +
geom_freqpoly(color="blue")+
theme_bw()+ # Fondo del gráfico cuadriculado
labs(x="Lontitud del pétado",y="Valores") # Cambio del nombre del eje y
ggplot(dat_iris, aes(Ancho.Petalo))+
geom_histogram(fill = "blue")+ # GRafico de barras
theme_bw()+ # Fondo del gráfico cuadriculado
labs(x="Ancho del pétado",y="Valores") # Camb
El diagrama de Tukey o cajas y bigotes, representa gráficamente la distribución de los valores de una variable. Las estadísticas que reporta el gráfico son:
El valor mínimo
El cuantil \(Q_{1}=0.025\)
La mediana
El cuantil \(Q_{3}=0.75\)
El valor máximo
ggplot(dat_iris, aes(y=Long.Petalo))+
geom_boxplot()+ # GRafico de barras
theme_bw()+ # Fondo del gráfico cuadriculado
labs(x="Longitud del pétado",y="Valores") # Cambio del nombre del eje y
ggplot(dat_iris, aes(y=Ancho.Petalo))+
geom_boxplot()+ # GRafico de barras
theme_bw()+ # Fondo del gráfico cuadriculado
labs(x="Ancho del pétado",y="Valores") # Cambio del nombre del eje y
ggplot(dat_iris, aes(x=Especies, color=Especies, fill=Especies))+
geom_bar()+ # GRafico de barras
theme_bw()+ # Fondo del gráfico cuadriculado
labs(y="Conteos") # Cambio del nombre del eje y