Chapter 3 Análisis exploratorio y descriptivo

3.1 Caso: Investigación en Maíz

Se realizó un estudio del comportamiento agronómico de líneas promisorias y variedades comerciales de maíz amarillo duro en un experimento ubicado en el distrito de Picsi, Provincia de Ferreñafe, Departamento de Lambayeque, Perú.

op <- par(mar = c(3,12,2,2), cex = 0.8)
cat("Información del inventario:\n")
Información del inventario:
# Estructura del data.frame
str(maiz)
tibble [640 x 6] (S3: tbl_df/tbl/data.frame)
 $ Tratamiento: chr [1:640] "T1" "T1" "T1" "T1" ...
 $ Localidad  : chr [1:640] "L1" "L1" "L1" "L1" ...
 $ PAE        : Ord.factor w/ 5 levels "Ausente o muy débil"<..: 4 4 4 3 3 3 3 3 4 4 ...
 $ LG         : num [1:640] 12.4 13.4 12.6 12.5 12.3 ...
 $ AG         : num [1:640] 10.32 9.69 10.13 9.32 9.27 ...
 $ PM         : num [1:640] 220 192 231 175 223 ...
cat("Clase del inventario:\n")
Clase del inventario:
# Clase
class(maiz)
[1] "tbl_df"     "tbl"        "data.frame"
cat("Primeros registros:\n")
Primeros registros:
# Resumen de la base de datos
head(maiz,10)
# A tibble: 10 x 6
   Tratamiento Localidad PAE       LG    AG    PM
   <chr>       <chr>     <ord>  <dbl> <dbl> <dbl>
 1 T1          L1        Fuerte  12.4 10.3   220.
 2 T1          L1        Fuerte  13.4  9.69  192.
 3 T1          L1        Fuerte  12.6 10.1   231.
 4 T1          L1        Media   12.5  9.32  175 
 5 T1          L1        Media   12.3  9.27  223.
 6 T1          L1        Media   12.7  9.24  181.
 7 T1          L1        Media   12.6  9.27  185.
 8 T1          L1        Media   13    9.35  232.
 9 T1          L1        Fuerte  12.9 10.0   236.
10 T1          L1        Fuerte  13.5 10.3   123 
cat("Número de columnas:\n")
Número de columnas:
# Ncol
ncol(maiz)
[1] 6
cat("Número de filas:\n")
Número de filas:
# Nrow
nrow(maiz)
[1] 640
cat("Dimensiones:\n")
Dimensiones:
# Dimensiones
dim(maiz)
[1] 640   6
# Tabla de frecuencia
cat("Total de observaciones:",nrow(maiz),"\n")
Total de observaciones: 640 
cat("Tabla de frecuencia de los tratamientos:\n")
Tabla de frecuencia de los tratamientos:
table(maiz$Tratamiento) -> tabla1
tabla1

T1 T2 T3 T4 T5 T6 T7 T8 
80 80 80 80 80 80 80 80 
barplot(tabla1, horiz = FALSE, las = 1)

cat("Tabla de frecuencia de las localidades:\n")
Tabla de frecuencia de las localidades:
table(maiz$Localidad) -> tabla2
tabla2

 L1  L2 
320 320 
barplot(tabla2, horiz = TRUE, las = 1)

par(op)

3.2 Resumen general de los datos

summary(maiz)
 Tratamiento         Localidad                          PAE     
 Length:640         Length:640         Ausente o muy débil:139  
 Class :character   Class :character   Débil              :254  
 Mode  :character   Mode  :character   Media              :144  
                                       Fuerte             :103  
                                       Muy fuerte         :  0  
                                                                
       LG              AG               PM       
 Min.   : 8.37   Min.   : 5.740   Min.   : 22.1  
 1st Qu.:11.80   1st Qu.: 8.268   1st Qu.:192.2  
 Median :12.41   Median : 8.855   Median :226.7  
 Mean   :12.45   Mean   : 8.828   Mean   :224.6  
 3rd Qu.:13.16   3rd Qu.: 9.393   3rd Qu.:256.7  
 Max.   :16.62   Max.   :12.780   Max.   :358.4  

3.3 Pigmentación Antociánica de los estigmas

op <- par(mar = c(3,12,2,2), cex = 0.8)
cat("Tabla de frecuencia de PAE:\n")
Tabla de frecuencia de PAE:
table(maiz$PAE) -> tabla3
addmargins(tabla3)

Ausente o muy débil               Débil               Media              Fuerte 
                139                 254                 144                 103 
         Muy fuerte                 Sum 
                  0                 640 
barplot(tabla3,horiz = TRUE, las = 1)

cat("Tabla de proporciones de PAE:\n")
Tabla de proporciones de PAE:
addmargins(prop.table(tabla3))

Ausente o muy débil               Débil               Media              Fuerte 
          0.2171875           0.3968750           0.2250000           0.1609375 
         Muy fuerte                 Sum 
          0.0000000           1.0000000 
cat("Tabla de frecuencia y proporciones de PAE:\n")
Tabla de frecuencia y proporciones de PAE:
cbind(addmargins(tabla3),addmargins(prop.table(tabla3)))
                    [,1]      [,2]
Ausente o muy débil  139 0.2171875
Débil                254 0.3968750
Media                144 0.2250000
Fuerte               103 0.1609375
Muy fuerte             0 0.0000000
Sum                  640 1.0000000
# Otras formas
cat("Tabla de frecuencia y proporciones de PAE:\n")
Tabla de frecuencia y proporciones de PAE:
summarytools::freq(maiz$PAE, plain.ascii = FALSE,
                   style = "rmarkdown")
### Frequencies  
#### maiz$PAE  
**Type:** Ordered Factor  

|                  &nbsp; | Freq | % Valid | % Valid Cum. | % Total | % Total Cum. |
|------------------------:|-----:|--------:|-------------:|--------:|-------------:|
| **Ausente o muy débil** |  139 |   21.72 |        21.72 |   21.72 |        21.72 |
|               **Débil** |  254 |   39.69 |        61.41 |   39.69 |        61.41 |
|               **Media** |  144 |   22.50 |        83.91 |   22.50 |        83.91 |
|              **Fuerte** |  103 |   16.09 |       100.00 |   16.09 |       100.00 |
|          **Muy fuerte** |    0 |    0.00 |       100.00 |    0.00 |       100.00 |
|              **\<NA\>** |    0 |         |              |    0.00 |       100.00 |
|               **Total** |  640 |  100.00 |       100.00 |  100.00 |       100.00 |
cat("Tabla de frecuencia y proporciones de PAE:\n")
Tabla de frecuencia y proporciones de PAE:
summarytools::freq(maiz$PAE, plain.ascii = FALSE,
                   style = "rmarkdown", cumul = FALSE,
                   headings = FALSE,
                   report.nas = FALSE)

|                  &nbsp; | Freq |      % |
|------------------------:|-----:|-------:|
| **Ausente o muy débil** |  139 |  21.72 |
|               **Débil** |  254 |  39.69 |
|               **Media** |  144 |  22.50 |
|              **Fuerte** |  103 |  16.09 |
|          **Muy fuerte** |    0 |   0.00 |
|               **Total** |  640 | 100.00 |
cat("Tabla de frecuencia y proporciones de PAE:\n")
Tabla de frecuencia y proporciones de PAE:
summarytools::freq(maiz$PAE, plain.ascii = FALSE,
                   style = "rmarkdown", cumul = TRUE,
                   headings = FALSE,
                   report.nas = FALSE)

|                  &nbsp; | Freq |      % | % Cum. |
|------------------------:|-----:|-------:|-------:|
| **Ausente o muy débil** |  139 |  21.72 |  21.72 |
|               **Débil** |  254 |  39.69 |  61.41 |
|               **Media** |  144 |  22.50 |  83.91 |
|              **Fuerte** |  103 |  16.09 | 100.00 |
|          **Muy fuerte** |    0 |   0.00 | 100.00 |
|               **Total** |  640 | 100.00 | 100.00 |
p1 <- round(prop.table(tabla3)*100,2)

pie(p1, main = "Gráfico circular")

pie(p1, main = "Gráfico circular", labels = c("Ausente o muy\ndébil (21.71 %)","Débil (39.69 %)","Media (22.5 %)","Fuerte (16.09 %)","Muy fuerte\n(0 %)"))

barplot(tabla3,horiz = TRUE, las = 1, main = "Gráfico de barras",
        col = "blue")

barplot(prop.table(tabla3)*100,horiz = TRUE, las = 1, xlim = c(0,40))

cat("Tabla de contingencia de PAE según los tratamientos:\n")
Tabla de contingencia de PAE según los tratamientos:
table(maiz$PAE,maiz$Tratamiento) -> tabla4
addmargins(tabla4)
                     
                       T1  T2  T3  T4  T5  T6  T7  T8 Sum
  Ausente o muy débil   0  20   0   1  71  44   2   1 139
  Débil                 0  34  66   0   7  36  55  56 254
  Media                45  20  14  17   2   0  23  23 144
  Fuerte               35   6   0  62   0   0   0   0 103
  Muy fuerte            0   0   0   0   0   0   0   0   0
  Sum                  80  80  80  80  80  80  80  80 640
cat("Margenes de fila:\n")
Margenes de fila:
margin.table(tabla4,1)

Ausente o muy débil               Débil               Media              Fuerte 
                139                 254                 144                 103 
         Muy fuerte 
                  0 
cat("Margenes de columna:\n")
Margenes de columna:
margin.table(tabla4,2)

T1 T2 T3 T4 T5 T6 T7 T8 
80 80 80 80 80 80 80 80 
barplot(tabla4,horiz = TRUE, las = 1, main = "Gráfico de barras")

cat("Tabla de contingencia (Proporciones) de PAE según los tratamientos:\n")
Tabla de contingencia (Proporciones) de PAE según los tratamientos:
cat("Tabla de contingencia de PAE según la localidad:\n")
Tabla de contingencia de PAE según la localidad:
table(maiz$PAE,maiz$Localidad) -> tabla5
tabla5
                     
                       L1  L2
  Ausente o muy débil  65  74
  Débil               127 127
  Media                81  63
  Fuerte               47  56
  Muy fuerte            0   0
barplot(tabla5,horiz = TRUE, las = 1, main = "Gráfico de barras", beside = T)

par(op)

3.4 Exploración y estadísticas de la localidad 1

Loc1 <- subset(maiz, maiz$Localidad=="L1")
summary(Loc1[,c(3,4,5,6)])
                  PAE            LG              AG               PM       
 Ausente o muy débil: 65   Min.   : 9.60   Min.   : 6.800   Min.   : 22.1  
 Débil              :127   1st Qu.:12.15   1st Qu.: 8.475   1st Qu.:199.5  
 Media              : 81   Median :12.74   Median : 9.000   Median :231.3  
 Fuerte             : 47   Mean   :12.76   Mean   : 9.005   Mean   :228.7  
 Muy fuerte         :  0   3rd Qu.:13.40   3rd Qu.: 9.482   3rd Qu.:256.8  
                           Max.   :16.62   Max.   :12.120   Max.   :356.1  
# summary(Loc1[,3:6])

Diagrama de Tukey (diagrama de cajas, box plot)

op <- par(mar = c(4,3,2,2), cex = 0.8)
LGLoc1 <- with(Loc1, boxplot(LG, col = "Yellow", main = "Longitud de grano"))

LGLoc1
$stats
      [,1]
[1,] 10.44
[2,] 12.15
[3,] 12.74
[4,] 13.41
[5,] 15.07

$n
[1] 320

$conf
         [,1]
[1,] 12.62871
[2,] 12.85129

$out
[1] 15.50 16.62 10.00  9.90  9.92  9.60  9.83

$group
[1] 1 1 1 1 1 1 1

$names
[1] ""
AGLoc1 <- with(Loc1, boxplot(AG, col = "Orange", main = "Ancho de grano"))

AGLoc1
$stats
       [,1]
[1,]  7.010
[2,]  8.470
[3,]  9.000
[4,]  9.485
[5,] 11.000

$n
[1] 320

$conf
        [,1]
[1,] 8.91035
[2,] 9.08965

$out
[1] 11.01  6.80  6.90 11.78 11.01  6.85  6.88 11.19 12.12

$group
[1] 1 1 1 1 1 1 1 1 1

$names
[1] ""

3.5 Exploración y estadísticas de los tratamientos en Maíz

Estadísticas

promedios <- with(maiz, tapply.stat(maiz[,4:6],Tratamiento,function(x) mean(x,na.rm = TRUE)))
promedios
  Tratamiento       LG       AG       PM
1          T1 12.27925 9.236750 214.4975
2          T2 12.41137 8.915375 214.7250
3          T3 11.63850 8.380625 192.0925
4          T4 12.24137 9.232125 248.9787
5          T5 12.96575 7.834375 222.0712
6          T6 12.02725 9.709500 209.6138
7          T7 12.58475 8.583500 247.0175
8          T8 13.42400 8.731375 248.0725
sd <- with(maiz, tapply.stat(maiz[,4:6],Tratamiento,function(x) sd(x,na.rm = TRUE)))
sd
  Tratamiento        LG        AG       PM
1          T1 0.8252024 0.7796474 48.15737
2          T2 1.0147367 0.6724392 40.80827
3          T3 1.0458418 0.6713492 52.99939
4          T4 0.7469698 0.6477198 34.69407
5          T5 0.8486173 0.7227722 39.96212
6          T6 1.0328270 0.9407900 43.59886
7          T7 0.9791264 0.7983133 51.69534
8          T8 0.7943433 0.5543493 47.92838

Diagrama de Tukey para el ancho de grano de los tratamientos

op <- par(mar = c(10,2,2,2), cex = 0.8)
ancho <- with(maiz, boxplot(AG ~ Tratamiento, col = "Green",
                            main = "Diagrama de ancho de grano por tratamiento",
                            las = 2, xlab = ""))

par(op)

Diagrama de Tukey para el longitud de grano de los tratamientos

op <- par(mar = c(10,2,2,2), cex = 0.8)
longitud <- with(maiz, boxplot(LG ~ Tratamiento, col = "Red",
                            main = "Diagrama de longitud de grano por tratamiento",
                            las = 2, xlab = ""))

par(op)

Tabla de frecuencia y gráfico de líneas para Número de hileras por mazorca

# Variable cuantitativa discreta
# Tabla de frecuencias
f1 <- table(maiz2$HPP)
p2 <- round(prop.table(f1)*100,2)
# La función que permite unir vectores
tabla6 <- cbind(f1,p2)
tabla6
    f1    p2
2    1  0.16
8    1  0.16
10   2  0.31
12  45  7.03
14 209 32.66
15   2  0.31
16 194 30.31
17   1  0.16
18 128 20.00
19   2  0.31
20  44  6.88
22  11  1.72
# Gráfico de líneas
x <- row.names(tabla6)
graphics::plot(p2, type = "h",col = 3,main = "Gráfico de líneas",las = 2)

Tabla de frecuencia y gráfico de líneas para Longitud de grano

# Variable cuantitativa continua
# Tabla de frecuencias
h2 <- with(maiz2, graph.freq(LG,plot = TRUE))

print(table.freq(h2), row.names = FALSE)
 Lower Upper  Main Frequency Percentage  CF   CPF
   8.0   8.9  8.45         3        0.5   3   0.5
   8.9   9.8  9.35         5        0.8   8   1.2
   9.8  10.7 10.25        24        3.8  32   5.0
  10.7  11.6 11.15        84       13.1 116  18.1
  11.6  12.5 12.05       229       35.8 345  53.9
  12.5  13.4 12.95       180       28.1 525  82.0
  13.4  14.3 13.85        92       14.4 617  96.4
  14.3  15.2 14.75        21        3.3 638  99.7
  15.2  16.1 15.65         1        0.2 639  99.8
  16.1  17.0 16.55         1        0.2 640 100.0
# Grafico
h <- hist(maiz2$LG)
polygon.freq(h)

psych::multi.hist(maiz2[,5:7],global = F)

psych::histBy(as.data.frame(maiz2),"LG","Tratamiento")

psych::histBy(LG~Localidad,data=as.data.frame(maiz2))

tapply(maiz2$LG, maiz2$Localidad,mean)
      L1       L2 
12.76062 12.13244 

Resumen general de un dataset

psych::describe(maiz2)
             vars   n   mean    sd median trimmed   mad   min    max  range
Tratamiento*    1 640   4.50  2.29   4.50    4.50  2.97  1.00   8.00   7.00
Localidad*      2 640   1.50  0.50   1.50    1.50  0.74  1.00   2.00   1.00
HPP             3 640  15.80  2.34  16.00   15.71  2.97  2.00  22.00  20.00
GPM             4 640  32.95  5.35  33.00   32.92  5.93  2.00  49.00  47.00
LG              5 640  12.45  1.05  12.41   12.47  0.97  8.37  16.62   8.25
AG              6 640   8.83  0.91   8.86    8.83  0.82  5.74  12.78   7.04
PM              7 640 224.63 49.27 226.70  225.62 47.29 22.10 358.40 336.30
PAE*            8 640   2.33  0.99   2.00    2.29  1.48  1.00   4.00   3.00
              skew kurtosis   se
Tratamiento*  0.00    -1.24 0.09
Localidad*    0.00    -2.00 0.02
HPP           0.02     1.54 0.09
GPM          -0.22     1.05 0.21
LG           -0.26     0.90 0.04
AG            0.13     0.88 0.04
PM           -0.23     0.22 1.95
PAE*          0.30    -0.93 0.04
summarytools::descr(maiz2)
Non-numerical variable(s) ignored: Tratamiento, Localidad, PAE
Descriptive Statistics  
maiz2  
N: 640  

                        AG      GPM      HPP       LG       PM
----------------- -------- -------- -------- -------- --------
             Mean     8.83    32.95    15.80    12.45   224.63
          Std.Dev     0.91     5.35     2.34     1.05    49.27
              Min     5.74     2.00     2.00     8.37    22.10
               Q1     8.27    29.00    14.00    11.80   192.15
           Median     8.86    33.00    16.00    12.41   226.70
               Q3     9.39    37.00    18.00    13.16   256.70
              Max    12.78    49.00    22.00    16.62   358.40
              MAD     0.82     5.93     2.97     0.97    47.29
              IQR     1.12     8.00     4.00     1.36    64.47
               CV     0.10     0.16     0.15     0.08     0.22
         Skewness     0.13    -0.22     0.02    -0.26    -0.23
      SE.Skewness     0.10     0.10     0.10     0.10     0.10
         Kurtosis     0.88     1.05     1.54     0.90     0.22
          N.Valid   640.00   640.00   640.00   640.00   640.00
        Pct.Valid   100.00   100.00   100.00   100.00   100.00