CARGAMOS LA BASE DE DATOS

library(readxl)                    
data2 <-  read_excel("C:/Users/Drake/Desktop/TALLOS.xlsx")
View(data2) 
knitr::opts_chunk$set(echo = TRUE)

VISUALIZACIÓN

head(data2) #####  NOSMUESTRA LAS VARIABLES Y LOS PRIMEROS 6 DATOS
str(data2) #### MUESTRA LOS DATOS Y EL TIPO DE DATO(NUMERIC, INTEGER OR CARHATER)
## tibble [10 × 2] (S3: tbl_df/tbl/data.frame)
##  $ SIN NITROGENO: num [1:10] 0.32 0.53 0.28 0.37 0.47 0.43 0.36 0.42 0.38 0.43
##  $ CON NITROGENO: num [1:10] 0.26 0.43 0.47 0.49 0.52 0.75 0.79 0.86 0.62 0.46
summary(data2) # RESUME METRICAS DESCRIPTIVAS: POSICIÓN (MEDIA, MEDIANA, Q1, Q3, MAX Y MIN)
##  SIN NITROGENO    CON NITROGENO   
##  Min.   :0.2800   Min.   :0.2600  
##  1st Qu.:0.3625   1st Qu.:0.4625  
##  Median :0.4000   Median :0.5050  
##  Mean   :0.3990   Mean   :0.5650  
##  3rd Qu.:0.4300   3rd Qu.:0.7175  
##  Max.   :0.5300   Max.   :0.8600
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
subset <- data2%>%select("SIN NITROGENO")  ### FORMAR UN SUBCONJUNTO DE DATOS

library(ggpubr)
gghistogram(data2, x="SIN NITROGENO", bins = 4) ### HISTOGRAMA DE LOS DATOS, CON BINS OBTENEMOS LA CANTIDAD DE INTERVALOS

ggdensity(data2, x="SIN NITROGENO") ###3 GRAFICO DE DENSIDAD DE LOS DATOS

MEDIDAS DE TENDENCIA CENTRAL

mean(data2$`SIN NITROGENO`) ## MEDIA
## [1] 0.399
median(data2$`SIN NITROGENO`) ### MEDIANA 
## [1] 0.4
getmode <- function(v){  ### se genera la funcion como argumento el vector V
  uniqv <- unique(v) #### da los varoes del vector V sin duplicados
  uniqv[which.max(tabulate(match(v, uniqv)))] ####  extrae el valor único que tiene la mayor frecuencia.
}

getmode(data2$`SIN NITROGENO`) ### MODA
## [1] 0.43
v <- c(4, 2, 2, 3, 4, 4) ### VEXTOR
uniqv <- unique(v)  # Resultado: c(4, 2, 3) $$ DE VUELVE EL VALOR UNICO DE CADA ELEMENTO EN v
match(v, uniqv) # DEVUELVE LA POSICIÓN DE CADA ELEMENTO EN V 4= PRIMERO, 2=SEGUNDO, 3=TERCERO, 4=PRIMERO, 4=PRIMERO
## [1] 1 2 2 3 1 1
tabulate(c(1, 2, 2, 3, 1, 1))  # Resultado: c(3, 2, 1) # CUENTA CUANTAS VECES SE REPITE CADA NÚMERO EN V
## [1] 3 2 1
which.max(c(3, 2, 1))  # DA LE VALOR MAS FRECUENTE
## [1] 1
uniqv = c(4, 2, 3)
uniqv[1] = 4 ## DEVUELVE EL FRECUENTE

MEDIDAS DE POSICIÓN

quantile(data2$`SIN NITROGENO`) ##### cuartiles
##     0%    25%    50%    75%   100% 
## 0.2800 0.3625 0.4000 0.4300 0.5300
quantile(data2$`SIN NITROGENO`, c(0.15, 0.20, 0.50)) ### percentiles
##   15%   20%   50% 
## 0.334 0.352 0.400

MEDIDAS DE VARIABILIDAD

sd(data2$`SIN NITROGENO`) ## standard desviation
## [1] 0.07279347
sd(data2$`SIN NITROGENO`)^2 #### varianza
## [1] 0.005298889
max(data2$`SIN NITROGENO`)-min(data2$`SIN NITROGENO`) # RANGO DE LOS DATOS
## [1] 0.25
IQR(data2$`SIN NITROGENO`) ### rango intercuatilico Q3-Q1
## [1] 0.0675

BOXPLOT (DIAGRAMAS DE CAJA)

## PARA DETECTAR DATOS ATÍPICOS SE CALCULA EL INTERVALO
## LI = Q1 - 1.5*IQR
## LS = Q3+ 1.5* IQR

## CUALQUIER VALOR FUERA DE ESTE INTERVALO POR ABAJO O POR ARRIBA ES ATÍPICO


ggboxplot(data2, y="SIN NITROGENO", title = "Dagrama de caja", 
          xlab = "", color = "blue")

ggboxplot(data2, y="SIN NITROGENO", add = "violin",
          add.params = list(alpha=0.4))

ggviolin(data2, y="SIN NITROGENO", color = "blue", fill = "pink", title = "Diagrama de caja y violin", 
         add = "boxplot", add.params = list(fill="white"), xlab = "")