Verifique la estructura de los datos

Realice un resumen de la base de datos

Verificar valores faltantes en todo el DataFrame

Realizar un tratamiento a los datos faltantes

Identificar la presencia de valores atípicos

Eliminar los valores atípicos

Imputar valores con algoritmos de ML

Crear un gráfico exploratorio, como el del ejemplo

Instalo Paquetes

pacotes <- c("readr","readxl","esquisse", "knitr", "kableExtra", "ggplot2", "dplyr",
             "ggpubr", "GGally", "zoo", "scales", "mice", "agricolae", "outliers")

Script para instalar y cargar librerias y dependencias

if(sum(as.numeric(!pacotes %in% installed.packages())) != 0){
  instalador <- pacotes[!pacotes %in% installed.packages()]
  for(i in 1:length(instalador)) {
    install.packages(instalador, dependencies = T)
    break()}
  sapply(pacotes, require, character = T) 
} else {
  sapply(pacotes, require, character = T) 
}
## Loading required package: readr
## Loading required package: readxl
## Loading required package: esquisse
## Loading required package: knitr
## Loading required package: kableExtra
## Loading required package: ggplot2
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Loading required package: ggpubr
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: scales
## 
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
## Loading required package: mice
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
## Loading required package: agricolae
## Loading required package: outliers
##      readr     readxl   esquisse      knitr kableExtra    ggplot2      dplyr 
##       TRUE       TRUE       TRUE       TRUE       TRUE       TRUE       TRUE 
##     ggpubr     GGally        zoo     scales       mice  agricolae   outliers 
##       TRUE       TRUE       TRUE       TRUE       TRUE       TRUE       TRUE

Anexo la base de datos

df <- read_excel("C:/Users/PC/Desktop/Ing Agronomica/semestre 9/Software R/Clase 3/df_rendimiento_alturadePlanta.xlsx")
str(df)
## tibble [120 × 8] (S3: tbl_df/tbl/data.frame)
##  $ Fecha        : POSIXct[1:120], format: "2022-07-17" "2022-07-17" ...
##  $ Municipio    : chr [1:120] "Sandona" "Sandona" "Sandona" "Sandona" ...
##  $ Evaluacion   : num [1:120] 1 1 1 1 2 2 2 2 3 3 ...
##  $ Fertilización: chr [1:120] "DOSIS_50_N" "DOSIS_50_N" "DOSIS_50_N" "DOSIS_50_N" ...
##  $ Cultivo      : chr [1:120] "Cultivo1" "Cultivo1" "Cultivo1" "Cultivo1" ...
##  $ Rep          : num [1:120] 1 2 3 4 1 2 3 4 1 2 ...
##  $ Biomasa      : num [1:120] 8 7 12 15 12.7 12 15 NA 24 23 ...
##  $ Altura       : num [1:120] 2 2.5 NA 4.5 3.5 3.3 2.5 2.5 5 4.5 ...
class(df)
## [1] "tbl_df"     "tbl"        "data.frame"

Verificar valores faltantes en todo el DataFrame (con is.na) en un objeto llamado missing_values

missing_values <-  is.na(df)

Contar el número de valores faltantes en cada columna

missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             2             3             0             2             1 
##           Rep       Biomasa        Altura 
##             0             4             3

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             2             3             0             2             1 
##           Rep       Biomasa        Altura 
##             0             4             3

#Completando datos faltandes de la columna “Fecha”, utilizando el paquete “zoo” y la función “na.locf”

library(zoo)
df$Fecha <- na.locf(df$Fecha, na.rm = FALSE)

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             0             3             0             2             1 
##           Rep       Biomasa        Altura 
##             0             4             3

#imputando datos de mi columna fertilizacion, usando la MODA.

moda_fertilizacion <- as.character(names(sort(table(df$Fertilización), decreasing = TRUE)[1]))
df$Fertilización[is.na(df$Fertilización)] <- moda_fertilizacion

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             0             3             0             0             1 
##           Rep       Biomasa        Altura 
##             0             4             3

#calcular la moda de la columna cultivo

moda_cultivo <- as.character(names(sort(table(df$Cultivo), decreasing = TRUE)[1]))
df$Cultivo[is.na(df$Cultivo)] <- moda_cultivo

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             0             3             0             0             0 
##           Rep       Biomasa        Altura 
##             0             4             3

Calcular la moda de la columna de Municipio

moda_Municipio <- names(sort(table(df$Municipio), decreasing = TRUE))[1]

Reemplazar los valores faltantes con la moda

df$Municipio[is.na(df$Municipio)] <- moda_Municipio

#interpolando datos de biomasa usando na.approx

df$Biomasa <- as.character(na.approx(df$Biomasa))

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             0             0             0             0             0 
##           Rep       Biomasa        Altura 
##             0             0             3

#Interpolando con na.aprox

df$Altura <- as.character(na.approx(df$Altura))

#verificando datos faltantes nuevamente

missing_values <-  is.na(df)
missing_count <- colSums(missing_values)
print(missing_count)
##         Fecha     Municipio    Evaluacion Fertilización       Cultivo 
##             0             0             0             0             0 
##           Rep       Biomasa        Altura 
##             0             0             0

#Valores atipicos

Convierte las columnas “Biomasa” y “Altura” a formato numérico

df$Biomasa <- as.numeric(df$Biomasa)
df$Altura <- as.numeric(df$Altura)

#crenado gtrafico para detectar valores atipicos

library(ggplot2)

ggplot(df) +
 aes(x = Altura, y = Biomasa, colour = Cultivo) +
 geom_jitter(size = 1.5) +
 scale_color_manual(values = c(Cultivo1 = "#C51004", 
Cultivo2 = "#42039C")) +
 labs(x = "Altura", y = "Biomasa", title = "Relación Altura - Biomasa") +
 theme_dark()

Se observan valores atipicos tanto para biomasa como para altura

Identificar outliers usando una función específica de la libreria outlier

library(outliers)

outliersbiomasa<-outlier(df$Biomasa)
outliersbiomasa
## [1] 1950
df$Biomasa <- rm.outlier(df$Biomasa, fill = T)

#haciendo el proceso nuevamente para el proximo valor atipico

outliersbiomasa<-outlier(df$Biomasa)
outliersbiomasa
## [1] 1500
df$Biomasa <- rm.outlier(df$Biomasa, fill = T)

haciendo el prpceso para la columna Altura

outliersaltura<-outlier(df$Altura)
outliersaltura
## [1] 2500
df$Altura <- rm.outlier(df$Altura, fill = T, median = T)

outliersaltura<-outlier(df$Altura)
outliersaltura
## [1] 125
df$Altura <- rm.outlier(df$Altura, fill = T, median = T)

Grafico

library(ggplot2)

ggplot(df) +
 aes(x = Biomasa, y = Altura, colour = Cultivo) +
 geom_point(shape = "circle", size = 1.5) +
 scale_color_manual(values = c(Cultivo1 = "#D21508", Cultivo2 = "#04179A")) +
 labs(x = "Biomasa", 
 y = "Altura", title = "Relación Biomasa - Altura") +
 theme_minimal()

#grafico final

library(ggplot2)

ggplot(df) +
 aes(x = Evaluacion, y = Biomasa, colour = Fertilización) +
 geom_point(shape = "circle", 
 size = 1.5) +
 scale_color_manual(values = c(DOSIS_100_N = "#FF9700", DOSIS_150_N = "#FF2E2E", DOSIS_50_N = "#61DA06"
)) +
 labs(x = "Evaluación", y = "Rendimiento", title = "Segumiento de diferentes dosis de fertilizate en un cultivo") +
 theme_minimal()