install.packages("tidyverse")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
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.2.1
## ✔ 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
install.packages("summarytools")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(summarytools)
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## system might not have X11 capabilities; in case of errors when using dfSummary(), set st_options(use.x11 = FALSE)
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
##
## view
install.packages("readxl")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(readxl)
install.packages("BSDA")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(BSDA)
## Loading required package: lattice
##
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
##
## Orange
install.packages("EnvStats")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(EnvStats)
##
## Attaching package: 'EnvStats'
## The following objects are masked from 'package:stats':
##
## predict, predict.lm
## The following object is masked from 'package:base':
##
## print.default
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(ggplot2)
datos <- read_excel("PLAN_1CRIOLLA.xlsx")
datos <- read_excel("PLAN_2CLEM.xlsx")
criolla <- read_excel("PLAN_1CRIOLLA.xlsx")
# Leer datos de la variedad clementina
clementina <- read_excel("PLAN_2CLEM.xlsx")
colnames(datos)
## [1] "Especie" "ESP." "VARIEDAD" "N_FRUTO" "PESO"
## [6] "DIAMETRO" "NIVEL_DAÑO" "COLOR"
descr(criolla$PESO)
## Descriptive Statistics
## criolla$PESO
## N: 30
##
## PESO
## ----------------- --------
## Mean 86.70
## Std.Dev 20.09
## Min 44.00
## Q1 73.00
## Median 83.00
## Q3 102.00
## Max 129.00
## MAD 17.05
## IQR 28.00
## CV 0.23
## Skewness 0.19
## SE.Skewness 0.43
## Kurtosis -0.46
## N.Valid 30.00
## N 30.00
## Pct.Valid 100.00
descr(clementina$PESO)
## Descriptive Statistics
## clementina$PESO
## N: 30
##
## PESO
## ----------------- --------
## Mean 150.60
## Std.Dev 24.59
## Min 111.00
## Q1 131.00
## Median 149.50
## Q3 168.00
## Max 205.00
## MAD 27.43
## IQR 35.50
## CV 0.16
## Skewness 0.37
## SE.Skewness 0.43
## Kurtosis -0.73
## N.Valid 30.00
## N 30.00
## Pct.Valid 100.00
peso_criolla <- c(
91, 95, 78, 64, 81, 83, 73, 129, 77, 102,
83, 73, 93, 88, 88, 44, 102, 107, 108, 116,
81, 81, 103, 104, 59, 72, 62, 60, 77, 127
)
peso_clementina <- c(
199, 168, 161, 144, 156, 163, 131, 117, 117, 154,
132, 124, 171, 175, 129, 178, 183, 111, 152, 133,
155, 121, 147, 143, 127, 183, 145, 205, 154, 140
)
df_clementina <- data.frame(peso = peso_clementina, variedad = "Clementina")
df_criolla <- data.frame(peso = peso_criolla, variedad = "Criolla")
data <- rbind(df_clementina, df_criolla)
ggplot(data, aes(x = variedad, y = peso, fill = variedad)) +
geom_boxplot(alpha = 0.6) + # Boxplot con transparencia
stat_summary(
fun = mean,
geom = "point",
shape = 20, # punto sólido
size = 3, # tamaño del punto
color = "black" # color del punto de la media
) +
labs(
title = "Comparación del peso entre variedades de mandarina",
x = "Variedad",
y = "Peso (g)"
) +
theme_classic() +
theme(legend.position = "none") +
coord_flip()
# Función para calcular el IC del 95% para una variable cuantitativa
intervalo_confianza <- function(x, confianza = 0.95) {
n <- length(x)
media <- mean(x)
desv <- sd(x)
gl <- n - 1
error_estandar <- desv / sqrt(n)
alfa <- 1 - confianza
t_critico <- qt(1 - alfa/2, df = gl)
LI <- media - t_critico * error_estandar
LS <- media + t_critico * error_estandar
return(c(Media = media, LI = LI, LS = LS))
}
ic_clementina <- intervalo_confianza(clementina$PESO)
cat("IC 95% para la media de Clementina (peso):\n")
## IC 95% para la media de Clementina (peso):
print(round(ic_clementina, 2))
## Media LI LS
## 150.60 141.42 159.78
ic_criolla <- intervalo_confianza(criolla$PESO)
cat("IC 95% para la media de Criolla (peso):\n")
## IC 95% para la media de Criolla (peso):
print(round(ic_criolla, 2))
## Media LI LS
## 86.7 79.2 94.2
var.test(peso_clementina, peso_criolla, alternative = "two.sided", conf.level = 0.95)
##
## F test to compare two variances
##
## data: peso_clementina and peso_criolla
## F = 1.4972, num df = 29, denom df = 29, p-value = 0.2829
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.7126364 3.1457076
## sample estimates:
## ratio of variances
## 1.497246
#Como el p-valor (0.2829) es mayor que 0.05 (nivel de significancia), no hay evidencia suficiente para rechazar la hipótesis nula.
Es decir, no hay evidencia estadística para afirmar que las varianzas de peso entre criolla y clementina sean diferentes.
El intervalo de confianza incluye 1, lo que también indica que la razón de varianzas podría ser 1 (igualdad).
#REALIZAR PRUEBA DE HIPOTESIS PARA DOS MUESTRAS INDEPENDIENTES
t.test(peso_clementina, peso_criolla,
alternative = "greater",
mu = 0,
var.equal = FALSE,
conf.level = 0.95)
##
## Welch Two Sample t-test
##
## data: peso_clementina and peso_criolla
## t = 11.022, df = 55.788, p-value = 6.3e-16
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## 54.20261 Inf
## sample estimates:
## mean of x mean of y
## 150.6 86.7
#Sí, hay diferencia significativa en el peso entre las variedades. La clementina es más pesada que la criolla en promedio. La diferencia promedio estimada está entre 52 y 75 gramos a favor de la clementina, con un nivel de confianza del 95%.
descr(clementina$DIAMETRO)
## Descriptive Statistics
## clementina$DIAMETRO
## N: 30
##
## DIAMETRO
## ----------------- ----------
## Mean 67.70
## Std.Dev 4.87
## Min 59.00
## Q1 64.00
## Median 67.00
## Q3 71.00
## Max 78.00
## MAD 4.45
## IQR 6.75
## CV 0.07
## Skewness 0.30
## SE.Skewness 0.43
## Kurtosis -0.88
## N.Valid 30.00
## N 30.00
## Pct.Valid 100.00
descr(criolla$DIAMETRO)
## Descriptive Statistics
## criolla$DIAMETRO
## N: 30
##
## DIAMETRO
## ----------------- ----------
## Mean 57.00
## Std.Dev 5.12
## Min 43.00
## Q1 53.00
## Median 57.50
## Q3 61.00
## Max 65.00
## MAD 5.93
## IQR 7.50
## CV 0.09
## Skewness -0.63
## SE.Skewness 0.43
## Kurtosis -0.01
## N.Valid 30.00
## N 30.00
## Pct.Valid 100.00
intervalo_confianza <- function(x, confianza = 0.95) {
n <- length(x)
media <- mean(x)
desv <- sd(x)
gl <- n - 1
error_estandar <- desv / sqrt(n)
alfa <- 1 - confianza
t_critico <- qt(1 - alfa / 2, df = gl)
LI <- media - t_critico * error_estandar
LS <- media + t_critico * error_estandar
return(c(Media = media, LI = LI, LS = LS))
}
ic_clementina <- intervalo_confianza(clementina$DIAMETRO)
cat("IC 95% para la media de Clementina (peso):\n")
## IC 95% para la media de Clementina (peso):
print(round(ic_clementina, 2))
## Media LI LS
## 67.70 65.88 69.52
ic_criolla <- intervalo_confianza(criolla$DIAMETRO)
cat("IC 95% para la media de Criolla (peso):\n")
## IC 95% para la media de Criolla (peso):
print(round(ic_criolla, 2))
## Media LI LS
## 57.00 55.09 58.91
var.test(clementina$DIAMETRO, criolla$DIAMETRO, alternative = "two.sided", conf.level = 0.95)
##
## F test to compare two variances
##
## data: clementina$DIAMETRO and criolla$DIAMETRO
## F = 0.90566, num df = 29, denom df = 29, p-value = 0.7914
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.4310613 1.9027834
## sample estimates:
## ratio of variances
## 0.9056579
#Valor p = 0.7914 Esto es muy superior a cualquier nivel de significancia común (como α = 0.05 o 0.01). conclusión: No hay evidencia estadística suficiente para rechazar la hipótesis nula. Por tanto, se asume que las varianzas del diámetro en ambas variedades son homogéneas. Según la prueba F para comparar varianzas, no se encontraron diferencias significativas entre la varianza del diámetro de las variedades Clementina y Criolla (F = 0.906, p = 0.791). Por tanto, se asume homogeneidad de varianzas entre ambas muestras.
t.test(clementina$DIAMETRO, criolla$DIAMETRO, var.equal = TRUE)
##
## Two Sample t-test
##
## data: clementina$DIAMETRO and criolla$DIAMETRO
## t = 8.293, df = 58, p-value = 1.98e-11
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 8.117309 13.282691
## sample estimates:
## mean of x mean of y
## 67.7 57.0
#Según la prueba t para muestras independientes, se encontró una diferencia significativa entre los diámetros de las variedades Clementina y Criolla (t = 8.293, p < 0.05). La variedad Clementina presenta en promedio un diámetro mayor (67.7 mm) que Criolla (57.0 mm), con una diferencia estimada entre 8.12 mm y 13.28 mm con un 95% de confianza.
#NIVEL DE DAÑO
datos <- read_excel("COLOR.xlsx")
install.packages("janitor")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(janitor)
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
datos$TIPO <- as.factor(datos$TIPO)
datos$DAÑO <- as.factor(datos$DAÑO)
datos$DAÑO <- factor(datos$DAÑO,
levels = c(0, 1, 2, 3),
labels = c("Sin daño", "Leve", "Moderado", "Severo"))
ggplot(datos, aes(x = TIPO, fill = DAÑO)) +
geom_bar(position = "stack", color = "black") +
scale_y_continuous(breaks = seq(0, max(table(datos$TIPO)), by = 10)) + # Marca cada 10 unidades
labs(
title = "Distribucion del nivel de daño segun variedad",
x = "Tipo",
y = "Frecuencia",
fill = "Daño"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text.x = element_text(angle = 0),
legend.title = element_text(face = "bold")
)
datos %>%
filter(TIPO == "Clementina") %>%
tabyl(DAÑO)
## DAÑO n percent
## Sin daño 25 0.16666667
## Leve 92 0.61333333
## Moderado 25 0.16666667
## Severo 8 0.05333333
datos %>%
filter(TIPO == "Criolla") %>%
tabyl(DAÑO)
## DAÑO n percent
## Sin daño 25 0.1666667
## Leve 74 0.4933333
## Moderado 42 0.2800000
## Severo 9 0.0600000
qchisq(p = 0.95, df = 3)
## [1] 7.814728
prueba <- chisq.test(table(datos$TIPO, datos$DAÑO))
prueba$expected
##
## Sin daño Leve Moderado Severo
## Clementina 25 83 33.5 8.5
## Criolla 25 83 33.5 8.5
chisq.test(table(datos$TIPO, datos$DAÑO))
##
## Pearson's Chi-squared test
##
## data: table(datos$TIPO, datos$DAÑO)
## X-squared = 6.3241, df = 3, p-value = 0.09687
#Dado que el valor-p = 0.096 es mayor que el nivel de significancia, α=0.05, no se rechaza la hipótesis nula del test.
No hay evidencia estadísticamente significativa para afirmar que las distribuciones de los niveles de daño difieren entre las variedades de mandarina Clementina y Criolla.
Con base en los datos recolectados y el análisis realizado, se concluye que la variedad de mandarina no influye significativamente en el nivel de daño observado. Es decir, las proporciones de frutos con daño (o sin él) son estadísticamente similares entre las variedades Clementina y Criolla.
Aunque hay cierta diferencia en las frecuencias, estadísticamente no alcanza para concluir que el tipo de fruta influye en el tipo o presencia de daño. Es decir, el daño parece distribuirse de manera parecida entre los distintos tipos, dentro del margen de error asumido (5%).
datos$TIPO <- as.factor(datos$TIPO)
datos$ESC_COLOR <- as.factor(datos$ESC_COLOR)
datos$ESC_COLOR <- factor(datos$ESC_COLOR,
levels = c(1, 2, 3, 4, 5),
labels = c("Verde", "Amarillo", "Anaranjado", "Anaranjado intenso", "Rojizo"))
datos_torta <- datos %>%
group_by(TIPO, ESC_COLOR) %>%
summarise(Cuenta = n(), .groups = "drop") %>%
mutate(Proporcion = Cuenta / sum(Cuenta),
Porcentaje = round(Proporcion * 100, 1),
Etiqueta = paste0(Porcentaje, "%"))
ggplot(datos_torta, aes(x = "", y = Proporcion, fill = ESC_COLOR)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar(theta = "y") +
facet_wrap(~ TIPO) +
geom_text(aes(label = Etiqueta),
position = position_stack(vjust = 0.5), size = 3.5) +
labs(
title = "Distribución del color por variedad",
fill = "-"
) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.position = "bottom"
)
datos %>%
filter(TIPO == "Clementina") %>%
tabyl(ESC_COLOR)
## ESC_COLOR n percent
## Verde 44 0.29333333
## Amarillo 30 0.20000000
## Anaranjado 45 0.30000000
## Anaranjado intenso 20 0.13333333
## Rojizo 11 0.07333333
datos %>%
filter(TIPO == "Criolla") %>%
tabyl(ESC_COLOR)
## ESC_COLOR n percent
## Verde 54 0.36000000
## Amarillo 34 0.22666667
## Anaranjado 42 0.28000000
## Anaranjado intenso 16 0.10666667
## Rojizo 4 0.02666667
qchisq(p = 0.95, df = 4)
## [1] 9.487729
prueba <- chisq.test(table(datos$TIPO, datos$ESC_COLOR))
prueba$expected
##
## Verde Amarillo Anaranjado Anaranjado intenso Rojizo
## Clementina 49 32 43.5 18 7.5
## Criolla 49 32 43.5 18 7.5
chisq.test(table(datos$TIPO, datos$ESC_COLOR))
##
## Pearson's Chi-squared test
##
## data: table(datos$TIPO, datos$ESC_COLOR)
## X-squared = 5.085, df = 4, p-value = 0.2787
#Según la prueba de independencia de Chi-cuadrado, no se encontró evidencia significativa de asociación entre la variedad del fruto y su escala de color (X² = 5.085, gl = 4, p = 0.279). Por tanto, se concluye que la distribución del color es independiente del tipo de variedad analizado.
Dado que el valor calculado:
=5.085<9.488 esto significa que el estadístico no cae en la región crítica, por lo tanto:
No se rechaza la hipótesis nula.
Se concluye que no hay evidencia suficiente para afirmar que existe dependencia entre TIPO y ESC_COLOR.
datos <- read_excel("MANDARINA25.xlsx")
# Clementina
descr(datos$Porcent_jugo[datos$cultivar == "Clementina"])
## Descriptive Statistics
## datos$Porcent_jugo
## N: 10
##
## Porcent_jugo
## ----------------- --------------
## Mean 59.16
## Std.Dev 18.71
## Min 38.00
## Q1 46.80
## Median 56.00
## Q3 65.90
## Max 103.50
## MAD 14.16
## IQR 15.43
## CV 0.32
## Skewness 1.14
## SE.Skewness 0.69
## Kurtosis 0.43
## N.Valid 10.00
## N 10.00
## Pct.Valid 100.00
# Criolla
descr(datos$Porcent_jugo[datos$cultivar == "Criolla"])
## Descriptive Statistics
## datos$Porcent_jugo
## N: 10
##
## Porcent_jugo
## ----------------- --------------
## Mean 37.30
## Std.Dev 12.40
## Min 19.60
## Q1 24.90
## Median 40.05
## Q3 45.40
## Max 55.60
## MAD 14.31
## IQR 19.12
## CV 0.33
## Skewness -0.09
## SE.Skewness 0.69
## Kurtosis -1.68
## N.Valid 10.00
## N 10.00
## Pct.Valid 100.00
ggplot(datos, aes(x = Porcent_jugo, color = cultivar)) +
geom_freqpoly(binwidth = 5, size = 1) +
labs(
title = "Porcentaje de jugo por variedad",
x = "Porcentaje de jugo",
y = "Frecuencia"
) +
scale_color_manual(values = c("orange", "lightgreen")) +
scale_x_continuous(breaks = seq(10, 120, by = 10)) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
alpha <- 0.05
df1 <- 9
df2 <- 9
# Punto crítico inferior (cola izquierda)
f_lower <- qf(alpha / 2, df1, df2)
# Punto crítico superior (cola derecha)
f_upper <- qf(1 - alpha / 2, df1, df2)
f_lower
## [1] 0.2483859
f_upper
## [1] 4.025994
var.test(Porcent_jugo ~ cultivar, data = datos)
##
## F test to compare two variances
##
## data: Porcent_jugo by cultivar
## F = 2.2743, num df = 9, denom df = 9, p-value = 0.2368
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.5649054 9.1563414
## sample estimates:
## ratio of variances
## 2.274306
#Dado que el p-valor = 0.2368 > 0.05, no se rechaza la hipótesis nula. Esto significa que no hay evidencia suficiente para afirmar que las varianzas son distintas.
#valor del P.c para grafica unilateral derecha
qt(1 - 0.05, df = 18)
## [1] 1.734064
qt(0.95, df = 18)
## [1] 1.734064
t.test(Porcent_jugo ~ cultivar,
data = datos,
alternative = "greater",
var.equal = TRUE)
##
## Two Sample t-test
##
## data: Porcent_jugo by cultivar
## t = 3.0797, df = 18, p-value = 0.00323
## alternative hypothesis: true difference in means between group Clementina and group Criolla is greater than 0
## 95 percent confidence interval:
## 9.551644 Inf
## sample estimates:
## mean in group Clementina mean in group Criolla
## 59.16 37.30
#Con un nivel de significancia del 5%, y dado que el valor p = 0.00323 es menor a 0.05, se rechaza la hipótesis nula. Existe evidencia estadísticamente significativa para afirmar que el porcentaje promedio de jugo en la variedad Clementina es mayor que en la variedad Criolla.
jugo_clementina <- datos$Porcent_jugo[datos$cultivar == "Clementina"]
jugo_criolla <- datos$Porcent_jugo[datos$cultivar == "Criolla"]
datos_resumen <- data.frame(
Porcent_jugo = c(jugo_clementina, jugo_criolla),
Cultivar = c(rep("Clementina", length(jugo_clementina)),
rep("Criolla", length(jugo_criolla)))
)
stby(data = datos_resumen$Porcent_jugo, INDICES = datos_resumen$Cultivar, FUN = descr, stats = "common")
## Descriptive Statistics
## Porcent_jugo by Cultivar
## Data Frame: datos_resumen
## N: 20
##
## Clementina Criolla
## --------------- ------------ ---------
## Mean 59.16 37.30
## Std.Dev 18.71 12.40
## Min 38.00 19.60
## Median 56.00 40.05
## Max 103.50 55.60
## N.Valid 10.00 10.00
## N 10.00 10.00
## Pct.Valid 100.00 100.00
Criolla <- c(10.9, 10.5, 10.1, 10.2, 11, 11.5, 9.3, 10, 11, 11.5)
Clementina <- c(11.5, 12.1, 10.5, 10, 10, 10, 10.1, 9, 10.9, 10)
descr(Criolla)
## Descriptive Statistics
## Criolla
## N: 10
##
## Criolla
## ----------------- ---------
## Mean 10.60
## Std.Dev 0.71
## Min 9.30
## Q1 10.10
## Median 10.70
## Q3 11.00
## Max 11.50
## MAD 0.82
## IQR 0.88
## CV 0.07
## Skewness -0.28
## SE.Skewness 0.69
## Kurtosis -1.22
## N.Valid 10.00
## N 10.00
## Pct.Valid 100.00
st_options(lang = "es")
descr(Clementina)
## Estadísticas descriptivas
## Clementina
## N: 10
##
## Clementina
## ------------------ ------------
## Media 10.41
## Dev.std. 0.88
## Min 9.00
## Q1 10.00
## Mediana 10.05
## Q3 10.90
## Max 12.10
## DAP 0.37
## RI 0.80
## CV 0.09
## Asimetría 0.45
## ES-Asimetría 0.69
## Curtosis -0.77
## Num.Válido 10.00
## N 10.00
## Pct.Válido 100.00
st_options(lang = "es")
datos <- data.frame(
grados_brix = c(Criolla, Clementina),
Tipo = rep(c("Criolla", "Clementina"), each = 10)
)
boxplot(grados_brix ~ Tipo, data = datos,
main = "Comparación de grados Brix entre Criolla y Clementina",
ylab = "Grados Brix",
col = c("orange", "lightblue"))
medias <- tapply(datos$grados_brix, datos$Tipo, mean)
points(1:2, medias, col = "black", pch = 19, cex = 1.5)
var.test(Criolla, Clementina)
##
## F test to compare two variances
##
## data: Criolla and Clementina
## F = 0.63839, num df = 9, denom df = 9, p-value = 0.5143
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.1585667 2.5701481
## sample estimates:
## ratio of variances
## 0.6383884
t.test(Criolla, Clementina,
alternative = "greater",
var.equal = TRUE)
##
## Two Sample t-test
##
## data: Criolla and Clementina
## t = 0.5304, df = 18, p-value = 0.3012
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## -0.4311778 Inf
## sample estimates:
## mean of x mean of y
## 10.60 10.41
st_options(lang = "es")
```