UNIVERSIDAD NACIONAL AGRARIA LA MOLINA
FACULTAD DE
ECONOMÍA Y PLANIFICACIÓN
DEPARTAMENTO ACADÉMICO DE
ESTADÍSTICA INFORMÁTICA
Práctica Calificada 1
CURSO: Técnicas
Multivariadas
DOCENTE: Miranda Villagomez Clodomiro
Fernando
ALUMNOS:
Lopez Acuña, Victor Andreé -
20180206
Morales Morales, Flavio Oscar - 20170202
Mori Perez,
Luis Alberto - 20170058
Garces Quispe, Adryana Luisa - 20220764
Estrella Guerra, Danilo David - 20220763
Jimenez Ruiz, Alex
Fernando - 20210839
2025
library(nortest)
library(summarytools)
library(BSDA)
library(inferr)
library(mvnormtest)
library(MVTests)
library(MVN)
library(tidyverse)
library(ggstatsplot)
library(effectsize)
library(car)
library(reshape2)
library(ggthemes)
library(ggpubr)
library(ICSNP)
library(heplots)
library(biotools)
library(ergm)
library(rrcov)
library(Hotelling)
library(echarts4r)
library(gganimate)
library(hrbrthemes)
library(png)
library(gifski)
El siguiente caso muestra data de interés para investigación sobre las distintas enfermedadas dado un país . Las características en infraestructura y recursos frente a la incidencia , tasa de recuperación, mortalidad entre otros.
library(truncnorm)
set.seed(123) # para reproducibilidad
n <- 100 # número de filas
datos <- data.frame(
tasa_incidencia = rtruncnorm(5000, a=0, b=100, mean=50, sd=6),
tasa_mortalidad = rtruncnorm(5000, a=0, b=100, mean=15, sd=1.5),
tasa_recuperacion = rtruncnorm(5000, a=0, b=100, mean=50, sd=5),
indice_educacion = rtruncnorm(5000, a=0, b=100, mean=40, sd=10),
tasa_urbanizacion = rtruncnorm(5000, a=0, b=100, mean=55, sd=11),
cobertura_seguro = rtruncnorm(5000, a=0, b=100, mean=70, sd=8)
)
head(datos)
## tasa_incidencia tasa_mortalidad tasa_recuperacion indice_educacion
## 1 46.63715 14.25874 61.85363 26.46151
## 2 48.61894 16.69139 49.16594 34.20623
## 3 59.35225 13.27958 54.63481 31.38956
## 4 50.42305 17.22153 47.15924 49.72678
## 5 50.77573 16.37429 51.12545 46.19146
## 6 60.29039 15.50270 55.65993 53.85446
## tasa_urbanizacion cobertura_seguro
## 1 45.80074 60.91911
## 2 52.57370 74.64081
## 3 31.86134 74.14434
## 4 36.65412 71.66148
## 5 42.92241 66.13275
## 6 36.67817 66.91515
En esta sección se describen las primeras observaciones de los datos.
## tasa_incidencia tasa_mortalidad tasa_recuperacion indice_educacion
## Min. :31.18 Min. : 9.232 Min. :33.27 Min. : 5.113
## 1st Qu.:46.07 1st Qu.:13.975 1st Qu.:46.75 1st Qu.:32.841
## Median :49.95 Median :14.980 Median :50.05 Median :39.604
## Mean :50.00 Mean :14.994 Mean :50.04 Mean :39.736
## 3rd Qu.:53.97 3rd Qu.:16.032 3rd Qu.:53.53 3rd Qu.:46.326
## Max. :70.68 Max. :20.772 Max. :65.51 Max. :77.587
## tasa_urbanizacion cobertura_seguro
## Min. :16.00 Min. :42.02
## 1st Qu.:47.34 1st Qu.:64.61
## Median :54.95 Median :69.83
## Mean :54.88 Mean :69.96
## 3rd Qu.:62.52 3rd Qu.:75.48
## Max. :98.14 Max. :98.02
## Descriptive Statistics
## datos
## N: 5000
##
## cobertura_seguro indice_educacion tasa_incidencia tasa_mortalidad
## ----------------- ------------------ ------------------ ----------------- -----------------
## Mean 69.96 39.74 50.00 14.99
## Std.Dev 7.93 10.02 5.97 1.50
## Min 42.02 5.11 31.18 9.23
## Q1 64.61 32.84 46.07 13.97
## Median 69.83 39.60 49.95 14.98
## Q3 75.48 46.33 53.97 16.03
## Max 98.02 77.59 70.68 20.77
## MAD 8.04 10.00 5.86 1.52
## IQR 10.87 13.49 7.90 2.06
## CV 0.11 0.25 0.12 0.10
## Skewness 0.02 0.10 0.01 0.00
## SE.Skewness 0.03 0.03 0.03 0.03
## Kurtosis -0.13 0.02 0.00 0.02
## N.Valid 5000.00 5000.00 5000.00 5000.00
## N 5000.00 5000.00 5000.00 5000.00
## Pct.Valid 100.00 100.00 100.00 100.00
##
## Table: Table continues below
##
##
##
## tasa_recuperacion tasa_urbanizacion
## ----------------- ------------------- -------------------
## Mean 50.04 54.88
## Std.Dev 5.00 11.08
## Min 33.27 16.00
## Q1 46.75 47.33
## Median 50.05 54.95
## Q3 53.53 62.52
## Max 65.51 98.14
## MAD 5.02 11.25
## IQR 6.78 15.18
## CV 0.10 0.20
## Skewness -0.05 0.00
## SE.Skewness 0.03 0.03
## Kurtosis -0.05 -0.08
## N.Valid 5000.00 5000.00
## N 5000.00 5000.00
## Pct.Valid 100.00 100.00
Observaciones:
Todas las variables siguen distribuciones aproximadamente simétricas (skewness muy cercano a 0).
La kurtosis también está muy cerca de 0 en todas las variables → sugiere que no hay colas muy pesadas ni distribuciones muy puntiagudas, lo que es coherente con la generación de datos a partir de una truncated normal.
No hay valores fuera del rango esperado (0-100), lo que confirma que el truncamiento funcionó correctamente.
Índice de educación y tasa de urbanización presentan mayor variabilidad relativa (CV de 0.25 y 0.20) → reflejan poblaciones más heterogéneas.
Respecto al IQR:
Mayor dispersión en tasa de urbanización (IQR ≈ 15).
Dispersión media en índice de educación (IQR ≈ 13.5).
Menor dispersión en tasa de mortalidad (IQR ≈ 2)
Esta prueba se dará sobre tasa de mortalidad.
H₀: Se sigue una distribución normal
H₁: No sigue una distribución normal
library(nortest)
library(ggstatsplot)
library(dplyr)
tasa_mortalidad = datos$tasa_mortalidad
# Prueba de Shapiro-Wilk
shapiro.test(tasa_mortalidad)
##
## Shapiro-Wilk normality test
##
## data: tasa_mortalidad
## W = 0.99978, p-value = 0.9141
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: tasa_mortalidad
## D = 0.0078909, p-value = 0.6337
Resultados:
Shapiro-Wilk p-value > 0.05: tasa mortalidad tiene distribución normal.
Lilliefors p-value > 0.05: se confirma la normalidad.
H₀: μ = 49.9
H₁: μ ≠ 49.9
tasa_incidencia = datos$tasa_incidencia
# Lillie permite analizar más de 5000 datos
lillie.test(tasa_incidencia)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: tasa_incidencia
## D = 0.0061291, p-value = 0.9206
Conclusión: A un nivel de significancia de 0.05, no se rechaza H₀, por lo tanto los datos siguen una distribución normal.
## [1] "Prueba de hipotesis respecto a la media muestral (H0:mu = 49.9, H1:sigma2 != 49.92)"
##
## One-sample z-Test
##
## data: datos$tasa_incidencia
## z = 1.2417, p-value = 0.2143
## alternative hypothesis: true mean is not equal to 49.9
## 95 percent confidence interval:
## 49.84413 50.14903
## sample estimates:
## mean of x
## 49.99658
Conclusión: Con un nivel de significancia de 0.05 no se rechaza H₀, por lo tanto la media hipótetica (49.9) no es igual al valor de la media muestral.
Además a un nivel de confianza del 95% la media poblacional de la tasa de incidencia de una enfermeda se encuentra entre 49.84413 y 50.14903”
Así mismo 49.99658 es el valor real de la media poblacional
## [1] "Prueba de hipotesis respecto a una varianza (H0:sigma2 = 5.5^2, H1:sigma2 != 5.5^2)"
## One-Sample Statistics
## -------------------------------------------------------------------------------------
## Variable Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
## -------------------------------------------------------------------------------------
## tasa_incidencia 5000 49.9966 0.0844 5.9674 5.7402 6.2085
## -------------------------------------------------------------------------------------
##
## Two Tail Test
## ---------------
## Ho: sd(tasa_incidencia) = 5.5
## Ha: sd(tasa_incidencia) != 5.5
##
## Chi-Square Test for Variance
## ------------------------------------------------
## Variable c DF Sig
## ------------------------------------------------
## tasa_incidencia 5884.801 4999 0.0000
## ------------------------------------------------
Conclusión: A un nivel de significancia de 0.05, se rechaza H₀ por lo tanto la desviación estándar difiere del valor hipotético (5.5)
library(tidyr)
datos_long <- pivot_longer(datos,
cols = c(tasa_incidencia, tasa_mortalidad, tasa_recuperacion,
indice_educacion, tasa_urbanizacion, cobertura_seguro),
names_to = "Variable",
values_to = "Valor")
head(datos_long)
## # A tibble: 6 × 2
## Variable Valor
## <chr> <dbl>
## 1 tasa_incidencia 46.6
## 2 tasa_mortalidad 14.3
## 3 tasa_recuperacion 61.9
## 4 indice_educacion 26.5
## 5 tasa_urbanizacion 45.8
## 6 cobertura_seguro 60.9
library(ggplot2)
ggplot(datos_long, aes(x=Variable, y=Valor, fill=Variable)) +
geom_boxplot() +
theme_minimal() +
labs(title="Boxplot de varias variables de salud",
x="Variable",
y="Valor") +
theme(axis.text.x = element_text(angle=45, hjust=1))
Observación: Gráficamente los datos parecen simétricos, tienen una distribución normal,la mediana coincide con la media
Primero definimos nuestras hipótesis:
H₀: La muestra proviene de una distribucion normal hexavariada
H₁: La muestra no proviene de una distribucion normal hexavariada
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.99958, p-value = 0.3787
Conclusión: No se rechaza H₀, por lo tanto las 6 variables provienen de una distribución normal
n <- dim(datos)[1] # Tamaño de la muestra
p <- dim(datos)[2] # Número de variables
mu <- c(50,16,51,39.9,53.5,70) # Vector de medias hipotética
sigma <- matrix(c(
# tasa_incidencia
36.15, -0.055, 0.15, -0.36, 0.75, 0.42,
# tasa_mortalidad
-0.04, 2.27, 0.021, 0.11, 0.18, 0.24,
# tasa_recuperacion
0.15, 0.023, 25.09, -1.01, 0.37, -0.80,
# indice_educacion
-0.37, 0.105, -1.02, 99.87, -0.355, -1.189,
# tasa_urbanizacion
0.75, 0.18, 0.37, -0.36, 122.45, 0.74,
# cobertura_seguro
0.42, 0.24, -0.80, -1.19, 0.74, 63.12
), nrow = 6, ncol = 6, byrow = TRUE) # Matriz de varianza-covarianza hipotéticas
## tasa_incidencia tasa_mortalidad tasa_recuperacion indice_educacion
## 49.99658 14.99374 50.04085 39.73616
## tasa_urbanizacion cobertura_seguro
## 54.88291 69.96434
# Calcular la estadística Z^2
Z2 <- t(media_muestral - mu) %*% solve(sigma/n) %*% (media_muestral - mu);Z2
## [,1]
## [1,] 2500.298
# Comparar con la distribución chi-cuadrado con p grados de libertad
p_valor <- 1 - pchisq(Z2, df = p);p_valor
## [,1]
## [1,] 0
# Decisión
if (p_valor < 0.05) {
cat("Rechazar H0: el vector de medias es diferente del vector de medias hipotético.\n")
} else {
cat("No se puede rechazar H0: no hay suficiente evidencia para decir que el vector de medias es diferente del vector de medias hipotético.\n")
}
## Rechazar H0: el vector de medias es diferente del vector de medias hipotético.
## [1] 0.01127841
H₀: la matriz de covarianza es igual a la Matriz dada (sigma)
H₁: la matriz de covarianza no es igual a la Matriz dada (sigma)
## Bartlett's Test for One Sample Covariance Matrix
##
## Chi-Squared Value = 0.7174076 , df = 21 and p-value: 1
Conclusión: No se rechaza H₀, no hay evidencia estadística para rechazar la hipótesis nula de esfericidad. No se encuentra evidencia de correlación significativa entre las variables.
rm(list = ls())
library(nortest)
library(summarytools)
library(BSDA)
library(inferr)
library(mvnormtest)
library(MVTests)
library(MVN)
library(tidyverse)
library(ggstatsplot)
library(effectsize)
library(car)
library(reshape2)
library(ggthemes)
library(ggpubr)
library(ICSNP)
library(heplots)
library(biotools)
library(ergm)
library(rrcov)
library(Hotelling)
library(echarts4r)
library(gganimate)
library(hrbrthemes)
library(png)
library(gifski)
En el contexto de la creciente prevalencia de Diabetes Tipo 2 a nivel mundial, los programas de intervención nutricional se han posicionado como una estrategia fundamental para mejorar los indicadores clínicos y bioquímicos en pacientes diagnosticados. Este estudio tiene como objetivo evaluar el impacto de un programa de intervención nutricional de 12 semanas en 964 pacientes con Diabetes Tipo 2. A lo largo de este período, se registraron cambios en varias variables clave que son fundamentales para el control y tratamiento de la diabetes
Glucosa en ayunas (mg/dL):
Un valor elevado de glucosa en ayunas indica un mal control de la
glucosa, lo que puede llevar a complicaciones como daño a los vasos
sanguíneos, riñones y nervios.
Hemoglobina glicosilada HbA1c (%):
Un valor elevado de HbA1c refleja un control insuficiente de la glucosa
a largo plazo, aumentando el riesgo de complicaciones cardiovasculares y
renales en pacientes con diabetes.
Triglicéridos (mg/dL):
Niveles elevados de triglicéridos están asociados con un mayor riesgo de
enfermedad cardiovascular, especialmente en pacientes con diabetes tipo
2, y reflejan un control deficiente de los lípidos en sangre.
Colesterol HDL (mg/dL):
Un nivel bajo de colesterol HDL (el “colesterol bueno”) aumenta el
riesgo de enfermedades cardíacas, ya que no se está eliminando
adecuadamente el colesterol malo (LDL) de la sangre.
Peso corporal (kg):
El sobrepeso y la obesidad aumentan la resistencia a la insulina, lo que
empeora el control de la glucosa y aumenta el riesgo de complicaciones
metabólicas, como enfermedades cardiovasculares.
Circunferencia de cintura (cm):
Una circunferencia de cintura elevada es un marcador de grasa abdominal,
la cual está estrechamente relacionada con un mayor riesgo de
resistencia a la insulina, diabetes tipo 2 y enfermedades
cardiovasculares.
El diseño del estudio es pareado, lo que implica que cada paciente fue medido en dos momentos distintos: antes y después de la intervención nutricional. Este diseño permite un análisis más preciso de los efectos de la intervención, dado que las mediciones de cada individuo sirven como su propio control.
El objetivo principal de este estudio es evaluar el impacto de un programa de intervención nutricional en pacientes con Diabetes Tipo 2, mediante la comparación de las mediciones Antes y Después de un período de 12 semanas. Para ello, se empleará la prueba \(T^2\) de Hotelling para muestras dependientes, con el propósito de contrastar dos hipótesis principales sobre los cambios en las variables clínicas y bioquímicas evaluadas:
\[ \\ H_0 : D = 0 \] Esta hipótesis establece que no existe ningún cambio significativo entre las mediciones Antes y Después de la intervención. En este caso, se supone que las diferencias entre las mediciones para cada variable son iguales a cero, es decir, \(D = 0\). Este enfoque evalúa si los valores de las variables permanecen constantes a lo largo del tratamiento.
\[ H_0 : D = \mu_0^* \] Esta hipótesis plantea que se esperan cambios específicos en las variables que se están midiendo (como una reducción en glucosa y triglicéridos, o un aumento de HDL). En este caso, el vector de diferencias \(D\) se compara con un vector de cambios esperados \(\mu_0^*\). Este vector es específico a tu intervención nutricional y refleja las expectativas clínicas basadas en lo que se espera lograr con la intervención.
Por ejemplo, el vector esperado podría ser algo como: \[ \mu_0^* = (−10,−0.5,−15,5,−2,−3) \]
Donde:
\(-10\) representa una reducción esperada de glucosa en ayunas.
\(-0.5\) representa una reducción esperada de HbA1c.
\(-15\) representa una reducción esperada de triglicéridos.
\(5\) representa un aumento esperado de HDL.
\(-2\) representa una reducción esperada de peso corporal.
\(-3\) representa una reducción esperada de circunferencia de cintura.
El análisis de los cambios observados se realiza mediante dos enfoques diferentes:
Hipótesis nula clásica (sin cambio esperado): Esta prueba evalúa si no hay diferencias significativas entre las mediciones Antes y Después, considerando la ausencia de cambio como hipótesis nula.
Hipótesis nula sustantiva (con cambio esperado): Este enfoque permite comparar las diferencias observadas con un vector de cambios clínicamente relevantes, permitiendo así verificar si los efectos de la intervención coinciden con los cambios esperados en las variables de salud.
El uso de ambos enfoques permitirá evaluar de manera integral si la intervención nutricional ha tenido efectos significativos en las variables clínico-bioquímicas y si esos efectos coinciden con las expectativas clínicamente definidas.
Antes de aplicar la prueba de Hotelling T² es fundamental realizar un análisis exploratorio de los datos. El objetivo es observar el comportamiento de las variables en los dos momentos de medición (Antes y Después), así como explorar las distribuciones de las diferencias \( \).
En esta sección se realizarán las siguientes tareas:
Este análisis preliminar permite verificar la presencia de cambios aparentes, consistencia de los signos esperados en las diferencias y relaciones entre variables.
## Descriptive Statistics
## antes
## N: 964
##
## Glucose_Before HbA1c_Before HDL_Before Triglycerides_Before Waist_Before
## ----------------- ---------------- -------------- ------------ ---------------------- --------------
## Mean 154.61 7.77 44.02 204.88 103.34
## Std.Dev 35.50 1.10 9.93 70.61 11.80
## Min 7.25 4.29 11.52 -0.30 66.80
## Q1 130.58 7.04 37.45 157.40 95.34
## Median 154.18 7.75 43.94 204.68 103.69
## Q3 179.09 8.55 50.39 252.94 110.99
## Max 274.49 11.38 72.83 426.73 136.92
## MAD 35.88 1.11 9.61 71.36 11.61
## IQR 48.49 1.51 12.94 95.47 15.61
## CV 0.23 0.14 0.23 0.34 0.11
## Skewness -0.05 -0.05 -0.02 0.07 0.02
## SE.Skewness 0.08 0.08 0.08 0.08 0.08
## Kurtosis 0.23 -0.01 0.05 -0.02 -0.21
## N.Valid 964.00 964.00 964.00 964.00 964.00
## N 964.00 964.00 964.00 964.00 964.00
## Pct.Valid 100.00 100.00 100.00 100.00 100.00
##
## Table: Table continues below
##
##
##
## Weight_Before
## ----------------- ---------------
## Mean 81.82
## Std.Dev 13.66
## Min 45.53
## Q1 72.40
## Median 81.87
## Q3 91.27
## Max 124.44
## MAD 14.01
## IQR 18.85
## CV 0.17
## Skewness 0.01
## SE.Skewness 0.08
## Kurtosis -0.30
## N.Valid 964.00
## N 964.00
## Pct.Valid 100.00
## Descriptive Statistics
## despues
## N: 964
##
## Glucose_After HbA1c_After HDL_After Triglycerides_After Waist_After
## ----------------- --------------- ------------- ----------- --------------------- -------------
## Mean 136.27 7.08 47.32 178.30 100.46
## Std.Dev 34.63 1.09 9.88 70.82 11.74
## Min 2.00 3.87 15.14 -47.83 64.95
## Q1 113.77 6.35 40.83 133.39 92.80
## Median 135.88 7.14 46.89 178.33 100.46
## Q3 159.92 7.80 53.45 222.32 108.12
## Max 239.73 10.53 78.95 424.12 133.16
## MAD 34.41 1.09 9.27 65.95 11.37
## IQR 46.12 1.44 12.62 88.83 15.31
## CV 0.25 0.15 0.21 0.40 0.12
## Skewness -0.08 -0.11 0.03 0.06 -0.03
## SE.Skewness 0.08 0.08 0.08 0.08 0.08
## Kurtosis 0.11 -0.07 0.15 0.04 0.02
## N.Valid 964.00 964.00 964.00 964.00 964.00
## N 964.00 964.00 964.00 964.00 964.00
## Pct.Valid 100.00 100.00 100.00 100.00 100.00
##
## Table: Table continues below
##
##
##
## Weight_After
## ----------------- --------------
## Mean 79.85
## Std.Dev 13.75
## Min 41.50
## Q1 71.17
## Median 79.69
## Q3 88.95
## Max 131.35
## MAD 13.52
## IQR 17.78
## CV 0.17
## Skewness 0.02
## SE.Skewness 0.08
## Kurtosis 0.06
## N.Valid 964.00
## N 964.00
## Pct.Valid 100.00
## Glucose_Before HbA1c_Before Triglycerides_Before
## Glucose_Before 1.0000000 0.62324873 0.3115070
## HbA1c_Before 0.6232487 1.00000000 0.2656492
## Triglycerides_Before 0.3115070 0.26564917 1.0000000
## HDL_Before -0.1488529 -0.08600147 -0.3419480
## Weight_Before 0.2391773 0.22495084 0.2778796
## Waist_Before 0.3266062 0.29743215 0.3387045
## HDL_Before Weight_Before Waist_Before
## Glucose_Before -0.14885294 0.2391773 0.3266062
## HbA1c_Before -0.08600147 0.2249508 0.2974322
## Triglycerides_Before -0.34194795 0.2778796 0.3387045
## HDL_Before 1.00000000 -0.1726858 -0.1884130
## Weight_Before -0.17268581 1.0000000 0.7440283
## Waist_Before -0.18841302 0.7440283 1.0000000
corrplot(corr_matrix_antes, method = "circle", order = "hclust",
addCoef.col = "black", number.cex = 0.7, tl.col = "black", tl.srt = 45,
col = pal, title = "Correlación de Variables (Antes)")
## Glucose_After HbA1c_After Triglycerides_After HDL_After
## Glucose_After 1.0000000 0.58466079 0.3115585 -0.13554299
## HbA1c_After 0.5846608 1.00000000 0.2663321 -0.07728487
## Triglycerides_After 0.3115585 0.26633206 1.0000000 -0.33324952
## HDL_After -0.1355430 -0.07728487 -0.3332495 1.00000000
## Weight_After 0.2099390 0.20265761 0.2656570 -0.17210247
## Waist_After 0.3018464 0.28607236 0.3434995 -0.17737212
## Weight_After Waist_After
## Glucose_After 0.2099390 0.3018464
## HbA1c_After 0.2026576 0.2860724
## Triglycerides_After 0.2656570 0.3434995
## HDL_After -0.1721025 -0.1773721
## Weight_After 1.0000000 0.7624495
## Waist_After 0.7624495 1.0000000
corrplot(corr_matrix_despues, method = "circle", order = "hclust",
addCoef.col = "black", number.cex = 0.7, tl.col = "black", tl.srt = 45,
col = pal, title = "Correlación de Variables (Después)")
## D_Glucose.x D_HbA1c.x D_Triglycerides.x D_HDL.x
## D_Glucose.x 1.0000000 0.63503118 0.3899700 -0.12836249
## D_HbA1c.x 0.6350312 1.00000000 0.2991254 -0.08302215
## D_Triglycerides.x 0.3899700 0.29912541 1.0000000 -0.30233319
## D_HDL.x -0.1283625 -0.08302215 -0.3023332 1.00000000
## D_Weight.x 0.3060526 0.20079450 0.2856718 -0.19798360
## D_Waist.x 0.3449289 0.26711886 0.3263711 -0.15942728
## D_Weight.x D_Waist.x
## D_Glucose.x 0.3060526 0.3449289
## D_HbA1c.x 0.2007945 0.2671189
## D_Triglycerides.x 0.2856718 0.3263711
## D_HDL.x -0.1979836 -0.1594273
## D_Weight.x 1.0000000 0.7002951
## D_Waist.x 0.7002951 1.0000000
corrplot(corr_matrix_diferencias, method = "circle", order = "hclust",
addCoef.col = "black", number.cex = 0.7, tl.col = "black", tl.srt = 45,
col = pal, title = "Correlación de Diferencias (D)")
Antes vs. Después
library(ggplot2)
library(reshape2)
# Histograma y gráfico de densidad para las variables "Antes"
ggplot(melt(antes), aes(x = value, fill = variable)) +
geom_histogram(aes(y = ..density..), bins = 30, alpha = 0.6, color = "black") +
geom_density(alpha = 0.3, fill = "blue") +
facet_wrap(~variable, scales = "free") +
labs(title = "Distribución de las Variables Antes de la Intervención", x = "Valor", y = "Densidad") +
theme_minimal()
## No id variables; using all as measure variables
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Histograma y gráfico de densidad para las variables "Después"
ggplot(melt(despues), aes(x = value, fill = variable)) +
geom_histogram(aes(y = ..density..), bins = 30, alpha = 0.6, color = "black") +
geom_density(alpha = 0.3, fill = "red") +
facet_wrap(~variable, scales = "free") +
labs(title = "Distribución de las Variables Después de la Intervención", x = "Valor", y = "Densidad") +
theme_minimal()
## No id variables; using all as measure variables
##
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(tidyr)
library(dplyr)
# Crear los boxplots para cada variable (6 variables)
p1 <- data.frame(Valor= c(antes$Glucose_Before, despues$Glucose_After),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
p1.1 <- ggplot(p1,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("Glucosa: Antes vs Después")
p2 <- data.frame(Valor= c(antes$HbA1c_Before, despues$HbA1c_After),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
p2.1 <- ggplot(p2,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("HbA1c: Antes vs Después")
p3 <- data.frame(Valor= c(antes$Triglycerides_Before, despues$Triglycerides_After),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
p3.1 <- ggplot(p3,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("Triglycerides: Antes vs Después")
p4 <- data.frame(Valor= c(antes$HDL_Before, despues$HDL_After),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
p4.1 <- ggplot(p4,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("HDL: Antes vs Después")
p5 <- data.frame(Valor= c(antes$Weight_Before, despues$Weight_Before),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
## Warning: Unknown or uninitialised column: `Weight_Before`.
p5.1 <- ggplot(p5,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("Weight: Antes vs Después")
p6 <- data.frame(Valor= c(antes$Waist_Before,despues$Waist_After),
Grupo= rep(c("Antes","Después"), each=nrow(antes))
)
p6.1 <- ggplot(p6,aes(x=Grupo,y=Valor,fill=Grupo))+
geom_boxplot()+
theme_minimal()+
ggtitle("Waist: Antes vs Después")
Además de los supuesto, se hará un diagnóstico multivariado.
La presencia de valores atípicos puede afectar significativamente los resultados de las pruebas estadísticas, como la prueba \(T^2\) de Hotelling. Por lo tanto, antes de realizar el análisis, es crucial identificar y gestionar los valores atípicos para garantizar la fiabilidad de los resultados. En este estudio, se utilizaron dos métodos principales para detectar los valores atípicos:
La distancia de Mahalanobis es una medida multivariada que calcula la distancia de cada observación respecto a la media del conjunto de datos, teniendo en cuenta las correlaciones entre las variables. Los puntos con distancias de Mahalanobis extremadamente altas pueden considerarse como valores atípicos. Este método es particularmente útil cuando se trabaja con datos multivariantes, como en el caso de las diferencias entre las mediciones “Antes” y “Después” en este estudio.
# Calcular la distancia de Mahalanobis
library(MASS)
library(MVN)
# Calcular las distancias de Mahalanobis para las diferencias
mahalanobis_distances <- mahalanobis(diferencias, center = colMeans(diferencias), cov = cov(diferencias))
mahal_dist <- mahalanobis(diferencias, center = colMeans(diferencias), cov = cov(diferencias))
# Identificar valores atípicos (umbral típico 95% de la distribución chi-cuadrado)
outliers <- mahal_dist > qchisq(0.95, df = ncol(diferencias)) # df = número de variables
# Contar el número de outliers (valores TRUE)
num_outliers <- sum(outliers)
# Contar el número de no outliers (valores FALSE)
num_no_outliers <- sum(!outliers)
# Mostrar los resultados
cat("Número de outliers:", num_outliers, "\n")
## Número de outliers: 21
## Número de no outliers: 943
Para complementar la distancia de Mahalanobis, se utilizaron gráficos de dispersión para observar visualmente cualquier punto que se desvíe significativamente de la distribución general de los datos. Los gráficos de dispersión proporcionan una forma intuitiva de identificar patrones inusuales y valores extremos que podrían no ser evidentes mediante otras métricas.
# Crear un vector de colores y formas para los gráficos
colores <- ifelse(outliers, "red", "black") # Rojo para outliers, negro para no outliers
formas <- ifelse(outliers, 16, 1) # Forma 16 (punto) para outliers y 1 (círculo) para no outliers
# Crear los gráficos de dispersión
pairs(diferencias,
main = "Gráficos de dispersión para detectar valores atípicos",
pch = formas, # Cambiar las formas
col = colores) # Cambiar los colores
threshold <- qchisq(0.95, df = ncol(diferencias)) # El umbral para el 95% de la distribución chi-cuadrado
ggplot(data = data.frame(Mahalanobis = mahal_dist), aes(sample = mahal_dist)) +
stat_qq(distribution = qchisq, dparams = list(df = ncol(diferencias)), geom = "point") + # Puntos para el QQ-Plot
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + # Diagonal de referencia
geom_hline(yintercept = threshold, linetype = "dashed", color = "blue") + # Umbral de chi-cuadrado
labs(title = "QQ-Plot de Distancias de Mahalanobis",
subtitle = paste("Umbral de outliers en chi-cuadrado: ", threshold),
x = "Distancia Mahalanobis",
y = "Chi-Square Quantile") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplot(data = data.frame(Mahalanobis = mahal_dist), aes(sample = mahal_dist)) +
stat_qq(distribution = qchisq, dparams = list(df = ncol(diferencias)), geom = "point") + # Puntos para el QQ-Plot
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + # Diagonal de referencia
geom_hline(yintercept = threshold, linetype = "dashed", color = "blue") + # Umbral de chi-cuadrado
geom_text(aes(x = max(mahalanobis_distances)*0.8, y = threshold, label = paste("Umbral: ", round(threshold, 2))),
color = "blue", hjust = 0, vjust = -0.5, size = 4) + # Añadir texto del umbral
labs(title = "QQ-Plot de Distancias de Mahalanobis",
subtitle = paste("Umbral de outliers en chi-cuadrado: ", threshold),
x = "Distancia Mahalanobis",
y = "Chi-Square Quantile") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
xlim(10, 25) + # Ajustar el límite del eje x para zoom
ylim(10, 15)
## Warning: Removed 845 rows containing missing values or values outside the scale range
## (`geom_point()`).
Definimos nuestras hipótesis nula y alterna:
Las diferencias siguen una distribución normal multivariada.
\[ H_0: \mathbf{D} \sim \mathcal{N}(\mu, \Sigma) \] En este caso, se espera que las diferencias observadas entre las mediciones para todas las variables (Glucosa en ayunas, HbA1c, Triglicéridos, HDL, Peso y Circunferencia de cintura) sigan una distribución normal conjunta. La validez de este supuesto es fundamental para asegurar que la prueba T² de Hotelling sea apropiada.
Las diferencias no siguen una distribución normal
multivariada.
\[
H_1: \mathbf{D} \not\sim \mathcal{N}(\mu, \Sigma)
\]
Si se rechaza la hipótesis nula, se concluye que las diferencias no
siguen una distribución normal multivariada, lo que invalidaría el uso
de la prueba T² de Hotelling. En ese caso, sería necesario recurrir a
métodos alternativos, como las pruebas no paramétricas o
transformaciones de los datos, para poder continuar con el análisis.
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.99807, p-value = 0.341
#Test MVN de Royston
library(MVN)
royston <- mvn(data = diferencias, mvnTest = "royston")
royston$multivariateNormality
## Test H p value MVN
## 1 Royston 4.056806 0.6670362 YES
#Test MVN de Mardia
mardia <- mvn(data = diferencias, mvnTest = "mardia")
mardia$multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 38.4902515103507 0.964270971504137 YES
## 2 Mardia Kurtosis -4.34539849184044 1.39023050345077e-05 NO
## 3 MVN <NA> <NA> NO
## Test HZ p value MVN
## 1 Henze-Zirkler 0.9368738 0.7988659 YES
## Test E df p value MVN
## 1 Doornik-Hansen 1539.181 12 1.333977e-322 NO
#Test MVN de Szekely-Rizzo
energy <- mvn(data = diferencias, mvnTest = "energy")
energy$multivariateNormality
## Test Statistic p value MVN
## 1 E-statistic 1.231604 0.497 YES
##
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
# Crear dataframe con resultados de normalidad
normalidad_tests <- data.frame(
Test = c(
"Shapiro-Wilk Multivariado",
"Royston",
"Mardia (Skewness)",
"Mardia (Kurtosis)",
"Henze-Zirkler",
"Doornik-Hansen",
"Szekely-Rizzo (Energy)"
),
Estadistico = c(0.99807, 4.057, 38.490, -4.345, 0.937, 1539.181, 1.232),
P_value = c(0.341, 0.667, 0.964, "<0.001", 0.799, "<0.001", 0.533),
Cumple_Normalidad = c("Normal", "Normal", "Normal", "No Normal", "Normal", "No Normal", "Normal"),
Interpretacion = c(
"Los datos multivariados siguen aproximadamente una distribución normal.",
"No hay evidencia de desviación de normalidad multivariada.",
"La asimetría multivariada es aceptable; no hay sesgo.",
"La curtosis indica que los datos son más picudos o aplanados de lo normal.",
"Confirma normalidad multivariada según la distancia funcional.",
"Detecta desviaciones de normalidad multivariada, probablemente por la curtosis.",
"Normalidad aceptable según la estadística basada en energía."
),
stringsAsFactors = FALSE
)
# Crear tabla HTML estilo APA
kable(normalidad_tests,
format = "html",
caption = "Pruebas de Normalidad Multivariada",
align = c("l", "r", "r", "c", "l")) %>%
kable_styling(full_width = FALSE, position = "center", font_size = 12) %>%
row_spec(0, bold = TRUE) %>% # encabezado en negrita
kable_classic(full_width = FALSE, html_font = "Times New Roman") # estilo APA clásico
Test | Estadistico | P_value | Cumple_Normalidad | Interpretacion |
---|---|---|---|---|
Shapiro-Wilk Multivariado | 0.99807 | 0.341 | Normal | Los datos multivariados siguen aproximadamente una distribución normal. |
Royston | 4.05700 | 0.667 | Normal | No hay evidencia de desviación de normalidad multivariada. |
Mardia (Skewness) | 38.49000 | 0.964 | Normal | La asimetría multivariada es aceptable; no hay sesgo. |
Mardia (Kurtosis) | -4.34500 | <0.001 | No Normal | La curtosis indica que los datos son más picudos o aplanados de lo normal. |
Henze-Zirkler | 0.93700 | 0.799 | Normal | Confirma normalidad multivariada según la distancia funcional. |
Doornik-Hansen | 1539.18100 | <0.001 | No Normal | Detecta desviaciones de normalidad multivariada, probablemente por la curtosis. |
Szekely-Rizzo (Energy) | 1.23200 | 0.533 | Normal | Normalidad aceptable según la estadística basada en energía. |
“Se evaluó la normalidad multivariada de las diferencias entre las mediciones Antes y Después del programa nutricional utilizando múltiples pruebas: Shapiro-Wilk multivariado, Royston, Mardia (asimetría y curtosis), Henze-Zirkler, Doornik-Hansen y Szekely-Rizzo. La mayoría de los tests (Shapiro-Wilk, Royston, Henze-Zirkler, Mardia Skewness y Energy) indican que los datos cumplen con normalidad multivariada. Sin embargo, la curtosis según Mardia y el test de Doornik-Hansen muestran desviaciones significativas. En términos prácticos, estas leves desviaciones no comprometen la aplicación de la prueba de Hotelling T², dada la robustez de esta prueba frente a violaciones menores de normalidad y el tamaño muestral grande.”
Este es el siguiente paso en tu análisis. La prueba T² de Hotelling nos permitirá determinar si hay diferencias significativas entre las medias de las variables Antes y Después.
Para esto, tenemos que definir las siguientes hipótesis:
\[ H_0: \, \mu_D = (−10,−0.5,−15,5,−2,−3) \] Esto significa que se espera que las diferencias entre las mediciones sean exactamente iguales a esos valores específicos (por ejemplo, una reducción de -10 mg/dL en glucosa, una reducción de -0.5% en HbA1c, etc.).
\[ H_1: \, \mu_D \neq (−10,−0.5,−15,5,−2,−3) \] Esto implica que las diferencias observadas no coinciden con los valores esperados (es decir, el cambio observado es diferente del que se anticipaba).
# T² de Hotelling a las diferencias ICSNP
mu <- c(-10, -0.5, -15, 5, -2, -3)
# Aplicar la prueba T² de Hotelling a las diferencias
(hotelling_icsnp <- HotellingsT2(diferencias,mu = mu))
##
## Hotelling's one sample T2-test
##
## data: diferencias
## T.2 = 596.88, df1 = 6, df2 = 958, p-value < 2.2e-16
## alternative hypothesis: true location is not equal to c(-10,-0.5,-15,5,-2,-3)
Estadístico T² = 596.88: Este valor elevado del estadístico T² indica que las diferencias observadas entre las mediciones “Antes” y “Después” son considerablemente más grandes de lo que se esperaría por casualidad. Conclusión: Las diferencias entre las mediciones son significativas y no son producto del azar, lo que sugiere que la intervención sí ha tenido un efecto.
p-valor < 2.2e-16: Un p-valor extremadamente pequeño, mucho menor que el umbral de 0.05, confirma que podemos rechazar la hipótesis nula de que no hay diferencias entre las mediciones “Antes” y “Después”. Conclusión: La probabilidad de que los cambios observados se deban al azar es prácticamente nula, lo que respalda la idea de que la intervención ha tenido un impacto significativo.
Grados de libertad (df1 = 6 y df2 = 958): Los grados de libertad indican que el análisis se ha hecho correctamente, considerando las 6 variables y el tamaño de muestra adecuado de 1010 pacientes. Conclusión: La prueba se ha realizado con una muestra suficientemente grande y un número adecuado de variables, lo que aumenta la fiabilidad de los resultados.
Conclusión:
La intervención nutricional ha tenido un impacto significativo en las variables estudiadas, ya que las diferencias entre las mediciones Antes y Después son estadísticamente significativas. Esto indica una mejora real en las condiciones de los pacientes.
\[ H_0: \, \mu_D = 0 \] Es decir, no se espera ningún cambio entre las mediciones “Antes” y “Después”.
\[ H_1: \, \mu_D \neq 0 \] Esto sugiere que las diferencias observadas entre las mediciones son lo suficientemente grandes como para ser estadísticamente significativas.
xbar <-colMeans(diferencias)
S_D <- cov(diferencias) # Calcular la matriz de covarianza de las diferencias
n <- nrow(diferencias) # Número de observaciones (pacientes)
T2 <- n * t(xbar) %*% solve(S_D) %*% xbar # Calcular T² de Hotelling
T2 # Mostrar el valor de T²
## [,1]
## [1,] 1015.201
# Aplicar la prueba T² de Hotelling con MVTests
result_mvtest <- Mpaired(T1 = antes, T2 = despues)
summary(result_mvtest)
## Multivariate Paired Hotelling T Square Test
##
## Hotelling T Sqaure Statistic = 1015.151
## F value = 168.313 , df1 = 6 , df2 = 958 , p-value: <2e-16
##
## Descriptive Statistics (The First Treatment)
##
## Glucose_Before HbA1c_Before Triglycerides_Before HDL_Before Weight_Before
## Means 154.60707 7.773384 204.88441 44.023807 81.82103
## Sd 35.50497 1.098754 70.61039 9.930412 13.65779
## Waist_Before
## Means 103.3403
## Sd 11.7954
##
##
## Descriptive Statistics (The Second Treatment)
##
## Glucose_After HbA1c_After Triglycerides_After HDL_After Weight_After
## Means 136.26868 7.081835 178.30167 47.321324 79.85397
## Sd 34.62744 1.087330 70.82252 9.875455 13.75161
## Waist_After
## Means 100.46286
## Sd 11.73797
##
##
## Descriptive Statistics (The Differences)
##
## Glucose_After HbA1c_After Triglycerides_After HDL_After Weight_After
## Means -18.33839 -0.6915488 -26.58274 3.297517 -1.967066
## Sd 24.54727 0.7774130 46.95067 6.715286 9.245086
## Waist_After
## Means -2.877483
## Sd 7.798459
Resultados clave de la prueba T² de Hotelling:
Este es el valor del estadístico T² de Hotelling, que mide la magnitud de las diferencias entre las mediciones “Antes” y “Después”. Un valor grande sugiere que las diferencias son sustanciales y no deben ser ignoradas.
Conclusión: La diferencia entre las mediciones es considerable, lo que indica que la intervención ha tenido un impacto significativo en las variables.
El valor F se deriva de la distribución F y se utiliza para determinar la significancia de la prueba. Este valor es bastante grande, lo que indica que las diferencias entre las mediciones “Antes” y “Después” son mucho mayores de lo que se esperaría por azar.
Conclusión: Un valor F grande respalda la idea de que hay una diferencia significativa entre las mediciones “Antes” y “Después”.
df1 = 6: Número de variables en el análisis (6 variables: Glucosa, HbA1c, Triglicéridos, HDL, Peso, Cintura).
df2 = 958: Grados de libertad del denominador, basados en el tamaño de la muestra (964 pacientes, restando 1).
Conclusión: La prueba se realizó con un número adecuado de variables y un tamaño de muestra suficientemente grande para garantizar resultados precisos y confiables.
Este p-valor extremadamente bajo indica que la probabilidad de que los cambios observados sean debidos al azar es prácticamente nula.
Conclusión: Con un p-valor menor que 0.05, rechazamos la hipótesis nula de que no hay diferencias entre las mediciones “Antes” y “Después”. Esto significa que hay un cambio significativo entre las mediciones.
Conclusión
Los resultados de la prueba T² de Hotelling, con un estadístico T² de 1015.151 y un p-valor < 2e-16, indican que hay diferencias significativas entre las mediciones “Antes” y “Después” de la intervención nutricional. Las estadísticas descriptivas muestran que varias de las variables clave, como la Glucosa en ayunas y HbA1c, experimentaron cambios sustanciales, confirmando que la intervención tuvo un impacto significativo en los pacientes con Diabetes Tipo 2.
En el presente estudio, se realizaron dos pruebas T² de Hotelling para evaluar el impacto de la intervención nutricional en pacientes con Diabetes Tipo 2. La primera prueba utilizó un vector esperado de cambios en las variables, y la segunda prueba comparó las diferencias observadas con la hipótesis nula de “sin cambio”.
Ambas pruebas, tanto la realizada con el vector esperado como la realizada sin el vector esperado, muestran que la intervención nutricional ha tenido un impacto significativo en las variables clave relacionadas con el control de la Diabetes Tipo 2. Los resultados indican que las mediciones Antes y Después de la intervención son estadísticamente diferentes, lo que respalda la efectividad de la intervención en la mejora de los indicadores de salud en los pacientes estudiados.
library(dplyr)
library(ggplot2)
library(summarytools)
library(Hotelling)
library(ggstatsplot)
library(ggplot2)
library(ggpubr)
library(MVN)
library(ICSNP)
En el distrito de Oxapampa (Pasco, Perú), un equipo de investigadores del área de producción agrícola está evaluando dos variedades de manzana cultivadas en la región: Variedad Delicia Roja (Variedad A) y Variedad Golden Andina (Variedad B).
El objetivo del estudio es determinar si estas dos variedades presentan diferencias significativas en peso (g) y diámetro ecuatorial (mm) de los frutos. Los investigadores cuentan con un vector de diferencias esperado de (5 g, −2 mm) entre Variedad B y Variedad A.
Se tomaron muestras independientes de cada variedad:
15 frutos de la Variedad A
17 frutos de la Variedad B
y se midió en cada fruto el peso y el diámetro.
set.seed(123)
# Variedad A (Delicia Roja)
nA <- 15
pesoA <- rnorm(nA, mean = 150, sd = 5) # peso en gramos
diamA <- rnorm(nA, mean = 70, sd = 3) # diámetro en mm
VarA <- data.frame(Variedad="A", Peso=pesoA, Diametro=diamA)
# Variedad B (Golden Andina)
nB <- 17
pesoB <- rnorm(nB, mean = 155, sd = 5)
diamB <- rnorm(nB, mean = 68, sd = 3)
VarB <- data.frame(Variedad="B", Peso=pesoB, Diametro=diamB)
# Combinar datos
datos <- rbind(VarA, VarB)
datos
## Variedad Peso Diametro
## 1 A 147.1976 75.36074
## 2 A 148.8491 71.49355
## 3 A 157.7935 64.10015
## 4 A 150.3525 72.10407
## 5 A 150.6464 68.58163
## 6 A 158.5753 66.79653
## 7 A 152.3046 69.34608
## 8 A 143.6747 66.92199
## 9 A 146.5657 67.81333
## 10 A 147.7717 68.12488
## 11 A 156.1204 64.93992
## 12 A 151.7991 72.51336
## 13 A 152.0039 70.46012
## 14 A 150.5534 66.58559
## 15 A 147.2208 73.76144
## 16 B 157.1323 66.60003
## 17 B 153.5246 70.33990
## 18 B 159.4756 67.74989
## 19 B 159.3907 68.75996
## 20 B 159.1079 67.91436
## 21 B 158.4432 67.87139
## 22 B 157.7696 72.10581
## 23 B 154.6904 67.32269
## 24 B 153.4702 72.54941
## 25 B 153.0976 63.35374
## 26 B 151.5265 69.75384
## 27 B 153.9604 68.37156
## 28 B 148.6730 68.64782
## 29 B 165.8448 69.13892
## 30 B 161.0398 66.49303
## 31 B 149.3845 67.00038
## 32 B 152.9856 64.94427
Se creó un dataset con dos grupos independientes. Cada grupo tiene valores de peso y diámetro generados de forma aleatoria, pero siguiendo medias y desviaciones estándar plausibles para cada variedad. Esto permite aplicar la prueba de Hotelling sobre diferencias de medias.
Para visualizar diferencias entre las variedades, usamos
ggbetweenstats
, que combina boxplots con información
estadística (p-values y tamaño del efecto).
ggbetweenstats(
data = datos,
x = Variedad,
y = Peso,
type = "p",
var.equal = TRUE,
title = "Comparación de Peso entre Variedades",
xlab = "Variedad",
ylab = "Peso (g)"
)
El gráfico muestra la distribución del peso de las manzanas según la variedad. Cada caja representa la mediana y el rango intercuartílico, mientras que los puntos indican los valores individuales. Visualmente, se observa que una variedad tiende a tener pesos mayores que la otra.
El efecto de la variedad sobre el peso, medido con Hedges’ g, es grande y negativo (-1.14), lo que indica que la primera variedad pesa significativamente menos que la segunda. El intervalo de confianza al 95% [-1.87, -0.40] refuerza que esta diferencia es estadísticamente significativa. El número de observaciones total es 32.
Conclusión: En conjunto, esto sugiere que la variedad es un factor importante que influye en el peso de las manzanas en esta localidad de Oxapampa.
ggbetweenstats(
data = datos,
x = Variedad,
y = Diametro,
type = "p",
var.equal = TRUE,
title = "Comparación de Diámetro entre Variedades",
xlab = "Variedad",
ylab = "Diámetro (mm)")
El gráfico muestra la distribución del diámetro de las manzanas según la variedad. A diferencia del peso, las cajas y la dispersión de los datos indican que las diferencias en diámetro entre variedades son más pequeñas.
El efecto de la variedad sobre el diámetro, medido con Hedges’ g, es pequeño (0.37) y su intervalo de confianza al 95% [-0.32, 1.06] incluye cero. Esto indica que, aunque puede existir una ligera diferencia, no es estadísticamente significativa en esta muestra.
En conclusión, la variedad parece influir más sobre el peso que sobre el diámetro de las manzanas en Oxapampa.
Hasta ahora, hemos analizado cada variable de manera independiente. Sin embargo, el peso y el diámetro de las manzanas pueden estar correlacionados, es decir, no son completamente independientes entre sí.
Calcular las distancias de Mahalanobis dentro de cada grupo usando las dos variables.
# Filtrar variables de interés (Peso y Diámetro)
grupoA <- datos %>% filter(Variedad == "A") %>% dplyr::select(Peso, Diametro)
grupoB <- datos %>% filter(Variedad == "B") %>% dplyr::select(Peso, Diametro)
# Calcular distancia de Mahalanobis para cada grupo
mahalA <- mahalanobis(grupoA,
colMeans(grupoA),
cov(grupoA))
mahalB <- mahalanobis(grupoB,
colMeans(grupoB),
cov(grupoB))
# Umbral para detectar outliers (p=2, alfa=0.975)
umbral <- qchisq(0.975, df = 2)
# Identificar posibles outliers
outliersA <- which(mahalA > umbral)
outliersB <- which(mahalB > umbral)
# Mostrar resultados
cat("Grupo A - posibles outliers:", outliersA, "\n")
## Grupo A - posibles outliers:
## Grupo B - posibles outliers:
Objetivo: Detectar observaciones atípicas multivariadas que puedan influir en el análisis.
Método: Se calcularon las distancias de Mahalanobis de cada observación respecto a la media multivariada de su grupo, utilizando la matriz de covarianza muestral. Luego se compararon estas distancias con los percentiles de una distribución χ2 con𝑝=2 grados de libertad (por las dos variables analizadas).
Interpretación: Las observaciones que superan el umbral 𝜒2(2,0.975) se consideran posibles outliers. En el Q-Q Plot, estos puntos aparecen alejados de la línea teórica (roja). Si existen, podrían afectar la prueba de Hotelling T² y se recomienda analizarlas antes de continuar.
# Graficar Q-Q Plot de Chi-cuadrado para Grupo A
dfA <- data.frame(Distancia = sort(mahalA),
Cuantiles = qchisq(ppoints(length(mahalA)), df = 2))
ggplot(dfA, aes(x = Cuantiles, y = Distancia)) +
geom_point(color = "steelblue") +
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
geom_hline(yintercept = umbral, color = "tomato", linetype = "dotted") +
labs(title = "Q-Q Plot Chi-cuadrado - Grupo A",
x = expression(paste(chi^2, " teórico")),
y = "Distancia de Mahalanobis") +
theme_minimal()
# Graficar Q-Q Plot para Grupo B (igual procedimiento)
dfB <- data.frame(Distancia = sort(mahalB),
Cuantiles = qchisq(ppoints(length(mahalB)), df = 2))
ggplot(dfB, aes(x = Cuantiles, y = Distancia)) +
geom_point(color = "steelblue") +
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
geom_hline(yintercept = umbral, color = "tomato", linetype = "dotted") +
labs(title = "Q-Q Plot Chi-cuadrado - Grupo B",
x = expression(paste(chi^2, " teórico")),
y = "Distancia de Mahalanobis") +
theme_minimal()
Evaluación de Outliers Multivariados:
Se calcularon las distancias de Mahalanobis para cada observación en los grupos A y B considerando las variables Peso y Diámetro. Estas distancias se compararon con el valor crítico de la distribución 𝜒2(2,0.975)=7.3778.
Ninguna observación superó este umbral en ninguno de los grupos, por lo que no se detectaron outliers multivariados. Esto permite continuar con el análisis de Hotelling T² sin necesidad de depuración de datos.
La prueba de Hotelling T² compara de manera multivariante los vectores de medias entre dos grupos independientes.
Es decir, los vectores de medias de Peso y Diámetro son iguales en las dos variedades. No hay diferencias multivariadas entre A y B.
Al menos una de las medias (Peso o Diámetro) es diferente o la combinación de ambas medias es distinta entre variedades.
# Definir X como la matriz de variables (Peso y Diámetro) para la variedad A.
X <- datos %>% filter(Variedad=="A") %>% dplyr::select(Peso, Diametro)
# Definir Y como la matriz para la variedad B.
Y <- datos %>% filter(Variedad=="B") %>% dplyr::select(Peso, Diametro)
hot <- HotellingsT2(X, Y)
hot
##
## Hotelling's two sample T2-test
##
## data: X and Y
## T.2 = 5.3374, df1 = 2, df2 = 29, p-value = 0.01062
## alternative hypothesis: true location difference is not equal to c(0,0)
Se aplicó la prueba de Hotelling T² para comparar simultáneamente las medias de Peso y Diámetro entre las variedades A y B.
El estadístico obtenido fue T² = 5.34, con df1=2 y df2=29, y un p-valor = 0.0106.
Conclusión: Este resultado confirma que las variedades presentan diferencias no solo en el peso, sino también en el patrón combinado de peso y diámetro.
Se tiene un vector de diferencias esperado (5,−2), podemos evaluar si las diferencias observadas coinciden con ese vector.
La diferencia real de medias entre las variedades es exactamente igual a (5, −2). Es decir, se espera que B tenga 5 g más de peso y 2 mm menos de diámetro que A.
La diferencia observada no coincide con el vector hipotético, al menos en una de las variables.
##
## Hotelling's two sample T2-test
##
## data: X and Y
## T.2 = 22.127, df1 = 2, df2 = 29, p-value = 1.461e-06
## alternative hypothesis: true location difference is not equal to c(5,-2)
Prueba de Hotelling T² con vector de medias hipotético:
Además de verificar la igualdad de medias, se evaluó si la diferencia de medias entre las variedades era igual a mu_o = (5,-2), donde se esperaba que la variedad B presentara 5 g más de peso y 2 mm menos de diámetro en comparación con la variedad A.
El estadístico obtenido fue T²= 22.13, con un p-valor = 1.46 × 10⁻⁶, por lo que se rechaza la hipótesis nula.
Se concluye que la diferencia observada en los datos no coincide con la diferencia hipotética propuesta, lo que indica que el patrón real de diferencias entre las variedades es distinto al esperado
library(nortest)
library(summarytools)
library(BSDA)
library(inferr)
library(mvnormtest)
library(MVTests)
library(MVN)
library(tidyverse)
library(ggstatsplot)
library(effectsize)
library(car)
library(reshape2)
library(ggthemes)
library(ggpubr)
library(ICSNP)
library(heplots)
library(biotools)
library(ergm)
library(rrcov)
library(Hotelling)
library(echarts4r)
library(gganimate)
library(hrbrthemes)
library(png)
library(gifski)
Contexto del problema
Se busca comparar el rendimiento de vehículos pertenecientes a cinco marcas reconocidas del mercado automotriz: Toyota, Ford, Hyundai, Chevrolet y Volkswagen. Se evaluaron 350 autos en total, distribuidos equitativamente entre las marcas . El objetivo es determinar si existen diferencias significativas entre las marcas en cuanto a múltiples características técnicas y económicas de los vehículos. Para ello, se aplicó un análisis MANOVA, que permite evaluar simultáneamente varias variables de respuesta.
Velocidad máxima: velocidad alcanzada por el vehículo (km/h)
Consumo: rendimiento de combustible (km/l)
Aceleración: tiempo de 0 a 100 km/h
Precio: valor comercial estimado (miles de dólares)
Emisiones: dióxido de carbono emitido por kilómetro (g/km)
Marca: fabricante del vehículo
set.seed(123)
# Marcas y repeticiones
marcas <- rep(c("Toyota", "Ford", "Hyundai", "Chevrolet", "Volkswagen"), each = 70)
# Variables dependientes simuladas
velocidad <- rnorm(350, mean = rep(c(190, 200, 185, 195, 188), each = 70), sd = 10)
consumo <- rnorm(350, mean = rep(c(16, 14, 17, 15, 16.5), each = 70), sd = 1.5)
aceleracion <- rnorm(350, mean = rep(c(9.5, 8.8, 10.2, 9.3, 9.0), each = 70), sd = 0.6)
precio <- rnorm(350, mean = rep(c(30, 28, 25, 27, 29), each = 70), sd = 3)
emisiones <- rnorm(350, mean = rep(c(120, 130, 115, 125, 118), each = 70), sd = 10)
# Data frame final
autos <- data.frame(
Marca = marcas,
Velocidad_max = round(velocidad, 1),
Consumo = round(consumo, 2),
Aceleracion = round(aceleracion, 2),
Precio = round(precio, 1),
Emisiones = round(emisiones, 1)
)
Hipótesis de Shapiro-Wilk multivariado
H₀: Los datos provienen de una distribución normal multivariada.
H₁: Los datos NO provienen de una normal multivariada.
library(tidyverse)
toyota = autos %>% filter(Marca == "Toyota") %>%
dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
ford = autos %>% filter(Marca == "Ford") %>%
dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
hyundai = autos %>% filter(Marca == "Hyundai") %>%
dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
chevrolet = autos %>% filter(Marca == "Chevrolet") %>%
dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
volkswagen = autos %>% filter(Marca == "Volkswagen") %>%
dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
#Ejecutamos el test de normalidad multivariada
library(mvnormtest)
mshapiro.test(t(toyota))
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.96508, p-value = 0.04803
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.92552, p-value = 0.0004645
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.94714, p-value = 0.005153
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.96199, p-value = 0.03229
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.9522, p-value = 0.009468
conclusion:
Como en todas las marcas p< 0.05, rechazamos H₀. A un nivel de significación del 0.5%, existe suficiente evidencia estadística para afirmar que los datos no cumplen el supuesto de normalidad multivariada.
Sin embargo, debido a que contamos con un tamaño de muestra grande (n = 350, 70 por grupo), el Teorema Central del Límite (TCL) nos respalda: al aumentar el tamaño muestral.
H₀: Las matrices de varianzas-covarianzas son iguales entre los grupos (marcas).
H₁: Al menos una matriz de varianzas-covarianzas difiere entre los grupos.
En este caso se evaluaron 3 pruebas para evaluar este supuesto:
# MANOVA con 5 respuestas: Velocidad, Consumo, Aceleración, Precio, Emisiones
res <- boxM(autos[, -1], autos$Marca)
res
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: autos[, -1]
## Chi-Sq (approx.) = 36.548, df = 60, p-value = 0.9928
## Summary for Box's M-test of Equality of Covariance Matrices
##
## Chi-Sq: 36.54757
## df: 60
## p-value: 0.9928
##
## log of Covariance determinants:
## Chevrolet Ford Hyundai Toyota Volkswagen
## 11.13877 10.72263 10.93171 10.75061 11.48488
##
## Eigenvalues:
## Chevrolet Ford Hyundai Toyota Volkswagen pooled
## 1 123.5055709 97.9369713 109.3741906 91.5285303 121.6573435 102.8216093
## 2 80.6349734 79.4242280 89.7329031 77.2978375 105.1141321 92.2590158
## 3 8.7326293 7.7449957 9.2115855 8.5522379 8.1838240 8.6009040
## 4 2.4113255 2.2995390 1.6776331 2.1567286 2.2290557 2.1821441
## 5 0.3280159 0.3275034 0.3687094 0.3575441 0.4168155 0.3772915
##
## Statistics based on eigenvalues:
## Chevrolet Ford Hyundai Toyota Volkswagen
## product 6.878691e+04 4.537090e+04 55921.925473 4.665829e+04 9.723453e+04
## sum 2.156125e+02 1.877332e+02 210.365022 1.798929e+02 2.376012e+02
## precision 2.779049e-01 2.747109e-01 0.290944 2.940041e-01 3.347068e-01
## max 1.235056e+02 9.793697e+01 109.374191 9.152853e+01 1.216573e+02
## pooled
## product 6.717346e+04
## sum 2.062410e+02
## precision 3.081126e-01
## max 1.028216e+02
Conclución: Como el p-valor=0.9928 > 0.05, no se rechaza Ho, existe suficiente evidencia estadística para afirmar que se cumple el supuesto de homogeneidad de las matrices de varianzas-covarianzas entre las cinco marcas de vehículos.
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: autos[, -1]
## Chi-Sq (approx.) = 36.548, df = 60, p-value = 0.9928
Con la anterior prueba tambien cumple el supuestro de homogeneidad de varianzas.
Y con esta prueba de WRAPER
## **************************************************************************************************
## DFA.CANCOR 0.3.6
##
## Please contact Brian O'Connor at brian.oconnor@ubc.ca if you have questions or suggestions.
## **************************************************************************************************
HOMOGENEITY(data = autos,
groups = 'Marca',
variables = c('Velocidad_max','Consumo','Aceleracion','Precio','Emisiones'))
##
## Covariance matrix for GroupToyota
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 84.58 -0.17 -0.04 -3.02 -12.56
## Consumo -0.17 2.42 -0.37 0.31 2.53
## Aceleracion -0.04 -0.37 0.40 -0.01 -1.20
## Precio -3.02 0.31 -0.01 8.84 0.27
## Emisiones -12.56 2.53 -1.20 0.27 119.37
##
## Covariance matrix for GroupFord
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 87.25 -0.08 0.29 4.52 9.23
## Consumo -0.08 2.36 -0.06 0.44 -1.74
## Aceleracion 0.29 -0.06 0.34 0.24 0.09
## Precio 4.52 0.44 0.24 7.98 -0.58
## Emisiones 9.23 -1.74 0.09 -0.58 89.81
##
## Covariance matrix for GroupHyundai
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 102.05 -0.74 -0.73 -0.86 -9.52
## Consumo -0.74 1.81 0.06 0.71 -2.29
## Aceleracion -0.73 0.06 0.39 0.25 -0.76
## Precio -0.86 0.71 0.25 9.15 -0.42
## Emisiones -9.52 -2.29 -0.76 -0.42 96.97
##
## Covariance matrix for GroupChevrolet
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 82.52 -1.91 1.10 -2.82 6.78
## Consumo -1.91 2.24 -0.11 0.47 -1.47
## Aceleracion 1.10 -0.11 0.38 0.00 -0.30
## Precio -2.82 0.47 0.00 8.71 -2.58
## Emisiones 6.78 -1.47 -0.30 -2.58 86.05
##
## Covariance matrix for GroupVolkswagen
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 105.23 -0.81 1.42 -0.51 1.53
## Consumo -0.81 2.26 -0.04 0.34 -0.88
## Aceleracion 1.42 -0.04 0.44 -0.11 -0.03
## Precio -0.51 0.34 -0.11 8.19 1.72
## Emisiones 1.53 -0.88 -0.03 1.72 121.48
##
##
## Bartlett test of HOMOGENEITY of variances (parametric):
##
## Bartlett's K-squared =2446.808 df =4 p value =0
##
##
## Fligner-Killeen test of HOMOGENEITY of variances (non parametric):
##
## Fligner-Killeen chi-squared =869.084 df =4 p value =0
##
##
## Pooled within groups covariance matrix from SPSS:
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 92.325 -0.741 0.409 -0.540 -0.909
## Consumo -0.741 2.219 -0.104 0.457 -0.768
## Aceleracion 0.409 -0.104 0.388 0.075 -0.441
## Precio -0.540 0.457 0.075 8.573 -0.317
## Emisiones -0.909 -0.768 -0.441 -0.317 102.735
##
##
## Pooled within groups correlation matrix from SPSS:
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 1.000 -0.052 0.068 -0.019 -0.009
## Consumo -0.052 1.000 -0.112 0.105 -0.051
## Aceleracion 0.068 -0.112 1.000 0.041 -0.070
## Precio -0.019 0.105 0.041 1.000 -0.011
## Emisiones -0.009 -0.051 -0.070 -0.011 1.000
##
##
## Box Test of equality of covariance matrices:
##
## Log determinants:
## Log Determinant
## Toyota 11.139
## Ford 10.723
## Hyundai 10.932
## Chevrolet 10.751
## Volkswagen 11.485
## Pooled 11.115
##
##
## M = 37.714 F = 0.609 df1 = 60 df2 = 238906.29 p = 0.99278
H₀: Las variables dependientes no están correlacionadas (matriz identidad)
H₁: Las variables dependientes están correlacionadas
##
## Adjuntando el paquete: 'psych'
## The following object is masked from 'package:car':
##
## logit
## The following object is masked from 'package:effectsize':
##
## phi
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
options(scipen = 0)
# Bartlett sobre la matriz de correlación de las variables dependientes
cortest.bartlett(cor(autos[, -1]), n = nrow(autos[, -1]))
## $chisq
## [1] 127.8793
##
## $p.value
## [1] 1.264207e-22
##
## $df
## [1] 10
Conclución:Dado que el p-valor < 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística significativa para afirmar que las variables dependientes están correlacionadas entre sí, lo que valida el supuesto de correlación necesario para aplicar un análisis MANOVA.
## Bartlett's Sphericity Test
##
## Chi-Squared Value = 127.8793 , df = 10 and p-value: <2e-16
##
## Correlation Matrix
##
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 1.00000000 -0.293988633 -0.2101076 0.047949543 0.22523062
## Consumo -0.29398863 1.000000000 0.2257921 0.001177129 -0.31740846
## Aceleracion -0.21010757 0.225792120 1.0000000 -0.136911411 -0.29881962
## Precio 0.04794954 0.001177129 -0.1369114 1.000000000 0.04294112
## Emisiones 0.22523062 -0.317408461 -0.2988196 0.042941115 1.00000000
Además,la matriz de correlación muestra relaciones moderadas entre algunas variables, como por ejemplo:
Velocidad máxima y Consumo: correlación negativa (-0.29)
Consumo y Emisiones: correlación negativa (-0.32)
Velocidad máxima y Emisiones: correlación positiva (0.23)
Estas correlaciones confirman que las variables no son independientes
modelo <- manova(cbind(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones) ~ Marca,
data = autos)
A continuación en la salida se muestran amabas matrices
Matrices = summary(modelo)$SS
F = Matrices$Marca # Variabilidad explicada por el factor Marca
W = Matrices$Residuals # Variabilidad residual (dentro de cada marca)
T = F + W # Variabilidad total
F
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 8611.6367 -1719.9534 -794.1877 795.6666 10219.0869
## Consumo -1719.9534 350.4071 152.3376 -155.0666 -2053.2561
## Aceleracion -794.1877 152.3376 104.9375 -159.4726 -857.6446
## Precio 795.6666 -155.0666 -159.4726 1034.4562 702.6053
## Emisiones 10219.0869 -2053.2561 -857.6446 702.6053 12357.0519
## Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max 31852.2023 -255.68800 141.01897 -186.23114 -313.5566
## Consumo -255.6880 765.65421 -35.76323 157.55137 -265.0955
## Aceleracion 141.0190 -35.76323 133.89877 25.78241 -152.0174
## Precio -186.2311 157.55137 25.78241 2957.80957 -109.4071
## Emisiones -313.5566 -265.09546 -152.01743 -109.40714 35443.5680
## [1] 0.7692905
Conclusión: El 76.9% de la variabilidad total está explicada por las diferencias entre los grupos (Marca),indica efecto fuerte del factor Marca sobre las variables dependientes.
Lo que se quiere probar es lo siguiente:
H₀:μ1=μ2=μ3=μ4=μ5
H₁: al menos un μi es diferente a los demás
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 4 1.0182 23.492 20 1376 < 2.2e-16 ***
## Residuals 345
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Hotelling-Lawley approx F num Df den Df Pr(>F)
## Marca 4 2.3386 39.699 20 1358 < 2.2e-16 ***
## Residuals 345
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Roy approx F num Df den Df Pr(>F)
## Marca 4 1.8748 128.99 5 344 < 2.2e-16 ***
## Residuals 345
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión: Dado que todas las pruebas (Pillai, Hotelling, Roy) son significativas con p < 0.05, podemos afirmar que:Existe suficiente evidencia estadística para rechazar la hipótesis nula Ho, los vectores de medias de las variables dependientes difieren entre las marcas de autos.
Por lo tanto, el factor Marca tiene un efecto significativo sobre el conjunto de variables dependientes.
## Response Velocidad_max :
## Df Sum Sq Mean Sq F value Pr(>F)
## Marca 4 8612 2152.91 23.319 < 2.2e-16 ***
## Residuals 345 31852 92.33
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Consumo :
## Df Sum Sq Mean Sq F value Pr(>F)
## Marca 4 350.41 87.602 39.473 < 2.2e-16 ***
## Residuals 345 765.65 2.219
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Aceleracion :
## Df Sum Sq Mean Sq F value Pr(>F)
## Marca 4 104.94 26.2344 67.595 < 2.2e-16 ***
## Residuals 345 133.90 0.3881
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Precio :
## Df Sum Sq Mean Sq F value Pr(>F)
## Marca 4 1034.5 258.614 30.165 < 2.2e-16 ***
## Residuals 345 2957.8 8.573
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Emisiones :
## Df Sum Sq Mean Sq F value Pr(>F)
## Marca 4 12357 3089.26 30.07 < 2.2e-16 ***
## Residuals 345 35444 102.73
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión: De la salida se puede apreciar que todas las variables aportan para que se rechace la hipotesis nula H₀, es decir que contribuyen para que se esta hipótesis se rechace, esto se debe que cada uno de los p-valores son menores al nivel de significación alfa.
Primero generamos un modelo lineal
modelo1 = manova(cbind(Velocidad_max, Consumo, Aceleracion,Precio, Emisiones) ~ Marca, data = autos,
subset = Marca %in% c("Toyota","Ford"))
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.59459 39.305 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Wilks approx F num Df den Df Pr(>F)
## Marca 1 0.40541 39.305 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Hotelling-Lawley approx F num Df den Df Pr(>F)
## Marca 1 1.4666 39.305 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Roy approx F num Df den Df Pr(>F)
## Marca 1 1.4666 39.305 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Como en todos los casos el p-valor < 0.05, rechazamos H₀. Se puede afirmar que con las distintas pruebas de pillai,willks,hotelling y roy, en todas ellas rechazamos H₀, es decir podemos afirmar que el vector de promedios de las marcas “Toyota” y “Ford” no son iguales. Es decir las 5 variables dicen que hay diferencias entre los promedios de las marcas “Toyota” y “Ford”.
# H0:los 2 vectores de promedios son iguales
# H1:los 2 vectores de promedios difieren
# Hipótesis:
# H0: los 2 vectores de promedios (de las variables respuesta) son iguales
# H1: los 2 vectores de promedios difieren
# Definir los grupos de comparación
Marcas <- c("Toyota", "Ford", "Hyundai", "Chevrolet", "Volkswagen")
# Crear todas las combinaciones posibles de pares de marcas
comb <- t(combn(length(Marcas), 2))
# Comparación general por pares
for(i in 1:nrow(comb)){
modelo.comp = manova(cbind(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones) ~ Marca,
data = autos,
subset = Marca %in% Marcas[comb[i,]])
cat("Comparación entre:", Marcas[comb[i,]][1], "y", Marcas[comb[i,]][2], "\n")
print(summary(modelo.comp, test = "Pillai"))
cat("\n-------------------------------------\n\n")
}
## Comparación entre: Toyota y Ford
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.59459 39.305 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Toyota y Hyundai
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.62557 44.775 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Toyota y Chevrolet
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.37394 16.008 5 134 2.376e-12 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Toyota y Volkswagen
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.23155 8.0756 5 134 1.101e-06 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Ford y Hyundai
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.80654 111.73 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Ford y Chevrolet
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.27808 10.323 5 134 2.173e-08 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Ford y Volkswagen
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.55347 33.219 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Hyundai y Chevrolet
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.70518 64.104 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Hyundai y Volkswagen
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.6167 43.118 5 134 < 2.2e-16 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
##
## Comparación entre: Chevrolet y Volkswagen
## Df Pillai approx F num Df den Df Pr(>F)
## Marca 1 0.37657 16.188 5 134 1.811e-12 ***
## Residuals 138
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -------------------------------------
Interpretación: El test de Pillai muestra que todas las comparaciones arrojan p < 0.05, lo que implica diferencias estadísticamente significativas entre cada par de marcas.
Por lo tanto, podemos concluir:
Existe suficiente evidencia estadística para afirmar que los vectores de medias de Velocidad máxima, Consumo, Aceleración, Precio y Emisiones difieren entre todas las marcas comparadas. Ninguna pareja de marcas tiene vectores de medias iguales.
La productividad de los trabajadores en entornos de oficina está determinada por diversos factores, como la modalidad de trabajo y las herramientas digitales empleadas para la gestión de tareas. En un contexto organizacional, resulta relevante identificar qué combinaciones de estas condiciones favorecen un mejor rendimiento laboral, optimizan el tiempo de respuesta y disminuyen la carga asociada al uso intensivo de pantallas.
Para responder a esta problemática, se implementó un diseño factorial 3×4 en bloques completos al azar (DBCA)
Los factores principales fueron:
Estrategia de trabajo: Híbrido, Teletrabajo y Presencial.
Herramienta digital: Google Drive, Microsoft Excel, Microsoft Teams y Microsoft Outlook.
Bloque:
Con el propósito de controlar la variabilidad atribuible a esta característica y obtener estimaciones más precisas de los efectos de los factores de interés.
Unidad experimental:
Las variables de respuesta registradas fueron:
Tareas completadas : número de actividades finalizadas por trabajador en la jornada laboral.
Horas de pantalla (horas/día) : tiempo de exposición frente al computador.
Tiempo de respuesta a tareas (minutos) : rapidez promedio en atender y resolver solicitudes laborales.
#Cargar librería para leer archivos Excel
library(readxl)
# Importar los datos desde el archivo Excel "productividad_oficinas.xlsx"
datos <- read_excel("productividad_oficinas_ajustada_v10.xlsx")
datos
## # A tibble: 1,000 × 6
## Estrategia_Trabajo Herramienta_Digital Tareas_Completadas Horas_Pantalla
## <chr> <chr> <dbl> <dbl>
## 1 Híbrido Google Drive 11 8.07
## 2 Híbrido Microsoft Excel 10 9.19
## 3 Híbrido Microsoft Teams 9 9.64
## 4 Presencial Microsoft Excel 9 7.48
## 5 Híbrido Google Drive 12 7.91
## 6 Presencial Google Drive 10 7.27
## 7 Presencial Google Drive 11 7.68
## 8 Presencial Microsoft Outlook 10 7.40
## 9 Híbrido Microsoft Teams 9 8.00
## 10 Teletrabajo Microsoft Outlook 8 5.44
## # ℹ 990 more rows
## # ℹ 2 more variables: Tiempo_Respuesta_Tareas <dbl>, Genero <chr>
## tibble [1,000 × 6] (S3: tbl_df/tbl/data.frame)
## $ Estrategia_Trabajo : chr [1:1000] "Híbrido" "Híbrido" "Híbrido" "Presencial" ...
## $ Herramienta_Digital : chr [1:1000] "Google Drive" "Microsoft Excel" "Microsoft Teams" "Microsoft Excel" ...
## $ Tareas_Completadas : num [1:1000] 11 10 9 9 12 10 11 10 9 8 ...
## $ Horas_Pantalla : num [1:1000] 8.07 9.19 9.64 7.48 7.91 ...
## $ Tiempo_Respuesta_Tareas: num [1:1000] 41.8 43.1 40 39.5 42.2 ...
## $ Genero : chr [1:1000] "Masculino" "Femenino" "Masculino" "Femenino" ...
# Convertir variables categóricas en factores
datos$Estrategia_Trabajo = as.factor(datos$Estrategia_Trabajo)
datos$Herramienta_Digital = as.factor(datos$Herramienta_Digital)
datos$Genero = as.factor(datos$Genero)
# Verificar nuevamente la estructura para confirmar los cambios
str(datos)
## tibble [1,000 × 6] (S3: tbl_df/tbl/data.frame)
## $ Estrategia_Trabajo : Factor w/ 3 levels "Híbrido","Presencial",..: 1 1 1 2 1 2 2 2 1 3 ...
## $ Herramienta_Digital : Factor w/ 4 levels "Google Drive",..: 1 2 4 2 1 1 1 3 4 3 ...
## $ Tareas_Completadas : num [1:1000] 11 10 9 9 12 10 11 10 9 8 ...
## $ Horas_Pantalla : num [1:1000] 8.07 9.19 9.64 7.48 7.91 ...
## $ Tiempo_Respuesta_Tareas: num [1:1000] 41.8 43.1 40 39.5 42.2 ...
## $ Genero : Factor w/ 2 levels "Femenino","Masculino": 2 1 2 1 2 2 2 1 2 1 ...
## # A tibble: 6 × 6
## Estrategia_Trabajo Herramienta_Digital Tareas_Completadas Horas_Pantalla
## <fct> <fct> <dbl> <dbl>
## 1 Híbrido Google Drive 11 8.07
## 2 Híbrido Microsoft Excel 10 9.19
## 3 Híbrido Microsoft Teams 9 9.64
## 4 Presencial Microsoft Excel 9 7.48
## 5 Híbrido Google Drive 12 7.91
## 6 Presencial Google Drive 10 7.27
## # ℹ 2 more variables: Tiempo_Respuesta_Tareas <dbl>, Genero <fct>
## # A tibble: 1,000 × 6
## Estrategia_Trabajo Herramienta_Digital Tareas_Completadas Horas_Pantalla
## <fct> <fct> <dbl> <dbl>
## 1 Híbrido Google Drive 11 8.07
## 2 Híbrido Microsoft Excel 10 9.19
## 3 Híbrido Microsoft Teams 9 9.64
## 4 Presencial Microsoft Excel 9 7.48
## 5 Híbrido Google Drive 12 7.91
## 6 Presencial Google Drive 10 7.27
## 7 Presencial Google Drive 11 7.68
## 8 Presencial Microsoft Outlook 10 7.40
## 9 Híbrido Microsoft Teams 9 8.00
## 10 Teletrabajo Microsoft Outlook 8 5.44
## # ℹ 990 more rows
## # ℹ 2 more variables: Tiempo_Respuesta_Tareas <dbl>, Genero <fct>
Hipótesis de Shapiro-Wilk multivariado
H₀: Los datos provienen de una distribución normal multivariada.
H₁: Los datos NO provienen de una normal multivariada.
# Cargamos tidyverse para manipulación de datos
library(tidyverse)
# Tratamiento 1: Teletrabajo con Microsoft Outlook
trat1 = datosc %>%
filter(Estrategia_Trabajo == "Teletrabajo", Herramienta_Digital == "Microsoft Outlook") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 2: Teletrabajo con Microsoft Excel
trat2 = datosc %>%
filter(Estrategia_Trabajo == "Teletrabajo", Herramienta_Digital == "Microsoft Excel") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 3: Presencial con Microsoft Outlook
trat3 = datosc %>%
filter(Estrategia_Trabajo == "Presencial", Herramienta_Digital == "Microsoft Outlook") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 4: Presencial con Microsoft Excel
trat4 = datosc %>%
filter(Estrategia_Trabajo == "Presencial", Herramienta_Digital == "Microsoft Excel") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 5: Teletrabajo con Google Drive
trat5 = datosc %>%
filter(Estrategia_Trabajo == "Teletrabajo", Herramienta_Digital == "Google Drive") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 6: Teletrabajo con Microsoft Teams
trat6 = datosc %>%
filter(Estrategia_Trabajo == "Teletrabajo", Herramienta_Digital == "Microsoft Teams") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 7: Presencial con Google Drive
trat7 = datosc %>%
filter(Estrategia_Trabajo == "Presencial", Herramienta_Digital == "Google Drive") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 8: Presencial con Microsoft Teams
trat8 = datosc %>%
filter(Estrategia_Trabajo == "Presencial", Herramienta_Digital == "Microsoft Teams") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 9: Híbrido con Microsoft Outlook
trat9 = datosc %>%
filter(Estrategia_Trabajo == "Híbrido", Herramienta_Digital == "Microsoft Outlook") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 10: Híbrido con Microsoft Excel
trat10 = datosc %>%
filter(Estrategia_Trabajo == "Híbrido", Herramienta_Digital == "Microsoft Excel") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 11: Híbrido con Google Drive
trat11 = datosc %>%
filter(Estrategia_Trabajo == "Híbrido", Herramienta_Digital == "Google Drive") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Tratamiento 12: Híbrido con Microsoft Teams
trat12 = datosc %>%
filter(Estrategia_Trabajo == "Híbrido", Herramienta_Digital == "Microsoft Teams") %>%
dplyr::select(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas)
# Usamos la prueba de Shapiro-Wilk multivariada (mshapiro.test)
# Se necesita transponer (t) porque la función espera variables en filas
library(mvnormtest)
mshapiro.test(t(trat1)) # normalidad para el tratamiento 1
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.97972, p-value = 0.2075
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.98594, p-value = 0.479
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.97575, p-value = 0.08065
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.98305, p-value = 0.4941
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.95902, p-value = 0.01713
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.98755, p-value = 0.6183
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.982, p-value = 0.3467
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.98784, p-value = 0.5417
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.97889, p-value = 0.2438
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.9527, p-value = 0.001342
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.99043, p-value = 0.7981
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.98435, p-value = 0.3945
Conclusión:
De los 12 tratamientos analizados, 10 presentan p > 0.05, por lo que no se rechaza H₀ de normalidad multivariada en la mayoría de los casos. Sin embargo, en 2 tratamientos el supuesto no se cumple (p ≤ 0.05).
Conclusión: A un nivel de significación del 5%, se puede afirmar que la mayor parte de los datos cumplen con el supuesto de normalidad multivariada, aunque existen algunas excepciones que deben considerarse.
NOTA: Esto sugiere que el uso de MANOVA es en general válido, pero se recomienda cautela en la interpretación de los resultados o considerar métodos robustos que toleren leves desviaciones de normalidad.
H₀: Las matrices de varianzas-covarianzas son iguales entre los grupos (tratamientos).
H₁: Al menos una matriz de varianzas-covarianzas difiere entre los grupos.
# Supuesto de homogeneidad de matrices varianza-covarianza
# Usamos la prueba de Box M (heplots::boxM)
# Compara si las matrices de varianza-covarianza son iguales entre grupos
library(heplots)
heplots::boxM(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
Estrategia_Trabajo * Herramienta_Digital, data = datos)
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: Y
## Chi-Sq (approx.) = 57.323, df = 66, p-value = 0.768
Conclusión:
Como el p-valor = 0.768 > 0.05, no se rechaza H₀. Existe suficiente evidencia estadística para afirmar que se cumple el supuesto de homogeneidad de las matrices de varianzas-covarianzas entre los 12 tratamientos (combinaciones de Estrategia de trabajo y Herramienta digital).
H₀: Las variables dependientes no están correlacionadas(matriz identidad)
H₁: Las variables dependientes están correlacionadas
# Supuesto de variables dependientes correlacionadas. Prueba de esfericidad de Bartlett
# Usamos la prueba de esfericidad de Bartlett
# Verifica si la matriz de correlaciones es distinta de la identidad
# (es decir, si las variables dependientes están correlacionadas)
datos1 = datos[3:5] # seleccionamos las 3 variables dependientes
head(datos1)
## # A tibble: 6 × 3
## Tareas_Completadas Horas_Pantalla Tiempo_Respuesta_Tareas
## <dbl> <dbl> <dbl>
## 1 11 8.07 41.8
## 2 10 9.19 43.1
## 3 9 9.64 40.0
## 4 9 7.48 39.5
## 5 12 7.91 42.2
## 6 10 7.27 39.2
library(psych)
options(scipen=0) #permitirá que aparezcan números en notación científica cuando lo considere conveniente
cortest.bartlett(cor(datos1), n = nrow(datos1))
## $chisq
## [1] 696.6452
##
## $p.value
## [1] 1.120669e-150
##
## $df
## [1] 3
Conclusión: Dado que el p-valor< 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística significativa para afirmar que las variables dependientes están correlacionadas entre sí, lo que valida el supuesto de correlación necesario para aplicar un análisis MANOVA.
# Determinación de matrices factoriales en MANOVA
# Se construye el modelo MANOVA con:
# - Variables dependientes: Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas
# - Factores: Estrategia_Trabajo, Herramienta_Digital, Género
modelo = manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
Estrategia_Trabajo * Herramienta_Digital + Genero, data = datos)
modelo
## Call:
## manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
## Estrategia_Trabajo * Herramienta_Digital + Genero, data = datos)
##
## Terms:
## Estrategia_Trabajo Herramienta_Digital Genero
## Tareas_Completadas 210.6747 198.6889 1.2494
## Horas_Pantalla 138.2371 129.5508 2.0105
## Tiempo_Respuesta_Tareas 834.6436 747.8737 3.5815
## Deg. of Freedom 2 3 1
## Estrategia_Trabajo:Herramienta_Digital Residuals
## Tareas_Completadas 140.2031 677.5838
## Horas_Pantalla 175.1527 639.6014
## Tiempo_Respuesta_Tareas 707.1468 624.7199
## Deg. of Freedom 6 987
##
## Residual standard errors: 0.828558 0.8050004 0.7955804
## Estimated effects may be unbalanced
## Tareas_Completadas
## (Intercept) 10.98699671
## Estrategia_TrabajoPresencial -0.79123551
## Estrategia_TrabajoTeletrabajo -1.37166599
## Herramienta_DigitalMicrosoft Excel -0.07250708
## Herramienta_DigitalMicrosoft Outlook -1.27265077
## Herramienta_DigitalMicrosoft Teams -0.39301630
## GeneroMasculino -0.04147226
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -0.54687475
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.89651714
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook 0.04586897
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook 0.66516398
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 0.74725895
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.31184016
## Horas_Pantalla
## (Intercept) 8.79330324
## Estrategia_TrabajoPresencial -0.63521255
## Estrategia_TrabajoTeletrabajo -0.73113511
## Herramienta_DigitalMicrosoft Excel -0.29009112
## Herramienta_DigitalMicrosoft Outlook -0.85983564
## Herramienta_DigitalMicrosoft Teams -0.58782685
## GeneroMasculino -0.02685689
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -0.51168550
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.30886404
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook -0.08386567
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook -0.28753587
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 1.29928716
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.62874025
## Tiempo_Respuesta_Tareas
## (Intercept) 41.749185978
## Estrategia_TrabajoPresencial -1.874431035
## Estrategia_TrabajoTeletrabajo -2.486308704
## Herramienta_DigitalMicrosoft Excel 0.382629408
## Herramienta_DigitalMicrosoft Outlook -2.352888107
## Herramienta_DigitalMicrosoft Teams -0.745433221
## GeneroMasculino 0.009831585
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -1.615450960
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.843336101
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook -0.348959011
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook 1.761059213
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 2.214663986
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.219016740
## Df Pillai approx F num Df den Df
## Estrategia_Trabajo 2 0.69577 175.335 6 1972
## Herramienta_Digital 3 0.66099 92.973 9 2961
## Genero 1 0.01084 3.597 3 985
## Estrategia_Trabajo:Herramienta_Digital 6 0.68209 48.407 18 2961
## Residuals 987
## Pr(>F)
## Estrategia_Trabajo < 2e-16 ***
## Herramienta_Digital < 2e-16 ***
## Genero 0.01324 *
## Estrategia_Trabajo:Herramienta_Digital < 2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Extracción de matrices de sumas de cuadrados y productos cruzados
#Permite ver la contribución de cada factor y de los residuos
Matrices = summary(modelo)$SS #Aquí se guarda en Matrices la lista de matrices SSP (Sum of Squares and Products) que genera el manova.
Matrices
## $Estrategia_Trabajo
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 210.6747 165.7106
## Horas_Pantalla 165.7106 138.2371
## Tiempo_Respuesta_Tareas 406.2929 299.4951
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 406.2929
## Horas_Pantalla 299.4951
## Tiempo_Respuesta_Tareas 834.6436
##
## $Herramienta_Digital
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 198.6889 149.7183
## Horas_Pantalla 149.7183 129.5508
## Tiempo_Respuesta_Tareas 378.7997 285.3265
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 378.7997
## Horas_Pantalla 285.3265
## Tiempo_Respuesta_Tareas 747.8737
##
## $Genero
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 1.249438 1.584934
## Horas_Pantalla 1.584934 2.010518
## Tiempo_Respuesta_Tareas 2.115382 2.683401
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 2.115382
## Horas_Pantalla 2.683401
## Tiempo_Respuesta_Tareas 3.581485
##
## $`Estrategia_Trabajo:Herramienta_Digital`
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 140.2031 141.2186
## Horas_Pantalla 141.2186 175.1527
## Tiempo_Respuesta_Tareas 292.9234 305.0940
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 292.9234
## Horas_Pantalla 305.0940
## Tiempo_Respuesta_Tareas 707.1468
##
## $Residuals
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 677.5838227 -0.6715254
## Horas_Pantalla -0.6715254 639.6013548
## Tiempo_Respuesta_Tareas 1.8676226 -17.9051263
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 1.867623
## Horas_Pantalla -17.905126
## Tiempo_Respuesta_Tareas 624.719901
#Variabilidad explicada por el factor (Estrategia). Matriz suma de cuadrados y productos cruzados del factor (SCOCFEstrategia)
FEstrategia = Matrices$Estrategia_Trabajo
FEstrategia
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 210.6747 165.7106
## Horas_Pantalla 165.7106 138.2371
## Tiempo_Respuesta_Tareas 406.2929 299.4951
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 406.2929
## Horas_Pantalla 299.4951
## Tiempo_Respuesta_Tareas 834.6436
#Variabilidad explicada por el factor Herramienta. Matriz suma de cuadrados y productos cruzados del factor(SCOCHerramienta)
FHerramienta = Matrices$Herramienta_Digital
FHerramienta
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 198.6889 149.7183
## Horas_Pantalla 149.7183 129.5508
## Tiempo_Respuesta_Tareas 378.7997 285.3265
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 378.7997
## Horas_Pantalla 285.3265
## Tiempo_Respuesta_Tareas 747.8737
#Variabilidad explicada por la interaccion Estrategia*Herramienta. Matriz suma de cuadrados y productos cruzados de la interaccion Estrategia*Herramienta (SCOCEstrategia*Herramienta)
FEstrategiaHerramienta = Matrices$`Estrategia_Trabajo:Herramienta_Digital`
FEstrategiaHerramienta
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 140.2031 141.2186
## Horas_Pantalla 141.2186 175.1527
## Tiempo_Respuesta_Tareas 292.9234 305.0940
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 292.9234
## Horas_Pantalla 305.0940
## Tiempo_Respuesta_Tareas 707.1468
#Variabilidad explicada por el Bloque. Matriz suma de cuadrados y productos cruzados del Bloque (SCOCBloque)
FBloque = Matrices$Genero
FBloque
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 1.249438 1.584934
## Horas_Pantalla 1.584934 2.010518
## Tiempo_Respuesta_Tareas 2.115382 2.683401
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 2.115382
## Horas_Pantalla 2.683401
## Tiempo_Respuesta_Tareas 3.581485
#Variabilidad residual. Matriz suma de cuadrados y productos cruzados del residual (SCOCR)
W = Matrices$Residuals
W
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 677.5838227 -0.6715254
## Horas_Pantalla -0.6715254 639.6013548
## Tiempo_Respuesta_Tareas 1.8676226 -17.9051263
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 1.867623
## Horas_Pantalla -17.905126
## Tiempo_Respuesta_Tareas 624.719901
#Variabilidad Total. Matriz suma de cuadrados y productos cruzados total (SCOCT) del factor
T = FEstrategia + FHerramienta + FEstrategiaHerramienta + FBloque + W
T
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 1228.400 457.5610
## Horas_Pantalla 457.561 1084.5524
## Tiempo_Respuesta_Tareas 1081.999 874.6938
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 1081.9990
## Horas_Pantalla 874.6938
## Tiempo_Respuesta_Tareas 2917.9655
#Bondad de ajuste. Un valor proximo a 1 indica que la mayor parte de la variabilidad total puede atribuirse al factorial, mientras que un valor proximo a 0 significa que el factor explica muy poco de esa variabilidad total.
eta2 = 1 - det(FBloque+W)/det(T)
eta2
## [1] 0.8585265
Conclusión:
Esto significa que aproximadamente el 85.9% de la variabilidad total en las variables de respuesta (tareas completadas, horas de pantalla y tiempo de respuesta) puede explicarse por el modelo factorial. Este resultado confirma que los factores considerados en el experimento tienen un efecto fuerte y consistente sobre las respuestas, garantizando la validez del modelo para describir los datos.
Lo que se quiere probar es lo siguiente:
H₀:μ1=μ2=μ3=μ4=…=μ12
H₁: al menos un μi es diferente a los demás
# Pruebas de hipotesis del modelo
# Prueba de Pillai
# Evalúa la hipótesis nula de que los vectores de medias poblacionales de las variables dependientes son iguales entre los niveles de los factores.
# Es considerada una de las más robustas frente a violaciones de supuestos.
summary(modelo, test = "Pillai")
## Df Pillai approx F num Df den Df
## Estrategia_Trabajo 2 0.69577 175.335 6 1972
## Herramienta_Digital 3 0.66099 92.973 9 2961
## Genero 1 0.01084 3.597 3 985
## Estrategia_Trabajo:Herramienta_Digital 6 0.68209 48.407 18 2961
## Residuals 987
## Pr(>F)
## Estrategia_Trabajo < 2e-16 ***
## Herramienta_Digital < 2e-16 ***
## Genero 0.01324 *
## Estrategia_Trabajo:Herramienta_Digital < 2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Prueba de Wilks' Lambda
# Contrasta la misma hipótesis que Pillai, pero a través de la razón de verosimilitud.
# Valores pequeños de Lambda indican que el modelo explica gran parte de la variabilidad.
summary(modelo, test = "Wilks")
## Df Wilks approx F num Df den Df
## Estrategia_Trabajo 2 0.33544 238.569 6 1970.0
## Herramienta_Digital 3 0.36029 138.816 9 2397.4
## Genero 1 0.98916 3.597 3 985.0
## Estrategia_Trabajo:Herramienta_Digital 6 0.36232 66.847 18 2786.5
## Residuals 987
## Pr(>F)
## Estrategia_Trabajo < 2e-16 ***
## Herramienta_Digital < 2e-16 ***
## Genero 0.01324 *
## Estrategia_Trabajo:Herramienta_Digital < 2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Prueba de Hotelling-Lawley
# Basada en la traza de la matriz, es más sensible cuando las diferencias entre grupos se concentran en unas pocas combinaciones lineales de las variables dependientes.
summary(modelo, test = "Hotelling-Lawley")
## Df Hotelling-Lawley approx F num Df
## Estrategia_Trabajo 2 1.88812 309.652 6
## Herramienta_Digital 3 1.71676 187.635 9
## Genero 1 0.01095 3.597 3
## Estrategia_Trabajo:Herramienta_Digital 6 1.63905 89.571 18
## Residuals 987
## den Df Pr(>F)
## Estrategia_Trabajo 1968 < 2e-16 ***
## Herramienta_Digital 2951 < 2e-16 ***
## Genero 985 0.01324 *
## Estrategia_Trabajo:Herramienta_Digital 2951 < 2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Prueba de Roy
# Utiliza el mayor valor propio de la matriz de hipótesis/residuos.
# Es muy sensible si el efecto está concentrado en una sola dimensión.
summary(modelo, test = "Roy")
## Df Roy approx F num Df den Df
## Estrategia_Trabajo 2 1.83748 603.92 3 986
## Herramienta_Digital 3 1.68213 553.42 3 987
## Genero 1 0.01095 3.60 3 985
## Estrategia_Trabajo:Herramienta_Digital 6 1.56331 257.16 6 987
## Residuals 987
## Pr(>F)
## Estrategia_Trabajo < 2e-16 ***
## Herramienta_Digital < 2e-16 ***
## Genero 0.01324 *
## Estrategia_Trabajo:Herramienta_Digital < 2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusiones:
Dado que todas las pruebas multivariadas (Pillai, Wilks, Hotelling, Roy) resultaron significativas con p < 0.05, se concluye que: Existe suficiente evidencia estadística para rechazar la hipótesis nula (H₀). Los vectores de medias de las variables dependientes (tareas completadas, horas de pantalla y tiempo de respuesta) difieren entre los tratamientos definidos por la combinación de estrategia de trabajo y herramienta digital. Por lo tanto, estos factores tienen un efecto significativo sobre el conjunto de variables de productividad en los trabajadores de oficina.
# Descompone el MANOVA en ANOVAs individuales, mostrando los efectos de los factores
# y sus interacciones sobre cada variable dependiente (Tareas_Completadas,
# Horas_Pantalla y Tiempo_Respuesta_Tareas).
summary.aov(modelo)
## Response Tareas_Completadas :
## Df Sum Sq Mean Sq F value Pr(>F)
## Estrategia_Trabajo 2 210.67 105.337 153.439 <2e-16 ***
## Herramienta_Digital 3 198.69 66.230 96.473 <2e-16 ***
## Genero 1 1.25 1.249 1.820 0.1776
## Estrategia_Trabajo:Herramienta_Digital 6 140.20 23.367 34.038 <2e-16 ***
## Residuals 987 677.58 0.687
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Horas_Pantalla :
## Df Sum Sq Mean Sq F value Pr(>F)
## Estrategia_Trabajo 2 138.24 69.119 106.6602 < 2e-16 ***
## Herramienta_Digital 3 129.55 43.184 66.6387 < 2e-16 ***
## Genero 1 2.01 2.011 3.1025 0.07848 .
## Estrategia_Trabajo:Herramienta_Digital 6 175.15 29.192 45.0478 < 2e-16 ***
## Residuals 987 639.60 0.648
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Tiempo_Respuesta_Tareas :
## Df Sum Sq Mean Sq F value Pr(>F)
## Estrategia_Trabajo 2 834.64 417.32 659.3301 < 2e-16 ***
## Herramienta_Digital 3 747.87 249.29 393.8572 < 2e-16 ***
## Genero 1 3.58 3.58 5.6584 0.01756 *
## Estrategia_Trabajo:Herramienta_Digital 6 707.15 117.86 186.2045 < 2e-16 ***
## Residuals 987 624.72 0.63
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión:
De la salida se puede apreciar que todas las variables aportan para que se rechace la hipotesis nula H₀, es decir que contribuyen para que esta hipótesis se rechace, esto se debe que cada uno de los p-valores son menores al nivel de significación alfa igual a 0.05
Cuando la interacción SÍ es significativa)
# Modelo MANOVA completo con interacción Estrategia_Trabajo * Herramienta_Digital
# Prueba de hipótesis usando el estadístico de Roy
modelo_manova <- manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~ Estrategia_Trabajo * Herramienta_Digital, data = datos)
summary(modelo_manova, test = "Pillai")
## Df Pillai approx F num Df den Df
## Estrategia_Trabajo 2 0.69572 175.492 6 1974
## Herramienta_Digital 3 0.66095 93.060 9 2964
## Estrategia_Trabajo:Herramienta_Digital 6 0.68325 48.563 18 2964
## Residuals 988
## Pr(>F)
## Estrategia_Trabajo < 2.2e-16 ***
## Herramienta_Digital < 2.2e-16 ***
## Estrategia_Trabajo:Herramienta_Digital < 2.2e-16 ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión:
Tanto la Estrategia de trabajo, la Herramienta digital y, sobre todo, su Interacción influyen significativamente en el desempeño de los trabajadores medido a través de las tres variables de respuesta.
library(dplyr)
# Para cada herramienta (Excel, Outlook, Teams, etc.):
# 1. Filtramos el dataset por la herramienta en cuestión.
# 2. Ajustamos un MANOVA considerando únicamente Estrategia_Trabajo como factor.
# 3. Evaluamos la significancia mediante el test de Roy.
levels(datos$Herramienta_Digital) %>% lapply(function(nivel) {
cat("\n--- Análisis para Herramienta =", nivel, "---\n")
subdatos <- filter(datos, Herramienta_Digital == nivel)
summary(manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~ Estrategia_Trabajo, data = subdatos), test = "Pillai")
})
##
## --- Análisis para Herramienta = Google Drive ---
##
## --- Análisis para Herramienta = Microsoft Excel ---
##
## --- Análisis para Herramienta = Microsoft Outlook ---
##
## --- Análisis para Herramienta = Microsoft Teams ---
## [[1]]
## Df Pillai approx F num Df den Df Pr(>F)
## Estrategia_Trabajo 2 0.71972 43.286 6 462 < 2.2e-16 ***
## Residuals 232
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [[2]]
## Df Pillai approx F num Df den Df Pr(>F)
## Estrategia_Trabajo 2 0.78707 53.642 6 496 < 2.2e-16 ***
## Residuals 249
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [[3]]
## Df Pillai approx F num Df den Df Pr(>F)
## Estrategia_Trabajo 2 0.85167 61.31 6 496 < 2.2e-16 ***
## Residuals 249
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [[4]]
## Df Pillai approx F num Df den Df Pr(>F)
## Estrategia_Trabajo 2 0.89728 69.707 6 514 < 2.2e-16 ***
## Residuals 258
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión:
Para la herramienta Google Drive, existe evidencia estadística significativa para rechazar la hipótesis nula de igualdad de vectores de medias(no son iguales). Esto indica que la estrategia de trabajo influye en el conjunto de variables de productividad (tareas completadas, horas de pantalla y tiempo de respuesta).
# Para cada estrategia (Presencial, Híbrido, Teletrabajo):
# 1. Filtramos el dataset por la estrategia en cuestión.
# 2. Ajustamos un MANOVA considerando únicamente Herramienta_Digital como factor.
# 3. Evaluamos la significancia mediante el test de Roy.
levels(datos$Estrategia_Trabajo) %>% lapply(function(nivel) {
cat("\n--- Análisis para Estrategia =", nivel, "---\n")
subdatos <- filter(datos, Estrategia_Trabajo == nivel)
summary(manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
Herramienta_Digital, data = subdatos), test = "Pillai")
})
##
## --- Análisis para Estrategia = Híbrido ---
##
## --- Análisis para Estrategia = Presencial ---
##
## --- Análisis para Estrategia = Teletrabajo ---
## [[1]]
## Df Pillai approx F num Df den Df Pr(>F)
## Herramienta_Digital 3 0.72794 36.204 9 1017 < 2.2e-16 ***
## Residuals 339
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [[2]]
## Df Pillai approx F num Df den Df Pr(>F)
## Herramienta_Digital 3 0.89611 46.426 9 981 < 2.2e-16 ***
## Residuals 327
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [[3]]
## Df Pillai approx F num Df den Df Pr(>F)
## Herramienta_Digital 3 0.78466 38.017 9 966 < 2.2e-16 ***
## Residuals 322
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión:
Dentro de la estrategia de trabajo (Híbrido), existe suficiente evidencia estadística para rechazar la hipótesis de igualdad de vectores de medias. Esto indica que el tipo de herramienta digital utilizada afecta significativamente el conjunto de variables de productividad.
Visualización
# Visualización
promedios <- datos %>%
dplyr::group_by(Estrategia_Trabajo, Herramienta_Digital) %>%
dplyr::summarise(Tareas_Completadas = mean(Tareas_Completadas), Horas_Pantalla = mean(Horas_Pantalla), Tiempo_Respuesta_Tareas = mean(Tiempo_Respuesta_Tareas), .groups = "drop")
ggplot(promedios, aes(x = Herramienta_Digital, y = Tareas_Completadas, group = Estrategia_Trabajo, color = Estrategia_Trabajo)) +
geom_line() + geom_point(size = 2) +
labs(title = "Interacción Estrategia*Herramienta sobre Tareas_Completadas")
Interpretación
En Híbrido (rojo), se completan más tareas en general, especialmente con Google Drive y Excel.
En Presencial (verde), el rendimiento baja con Excel y Outlook, pero sube bastante con Teams.
En Teletrabajo (azul), el número de tareas es más bajo y estable, sin grandes picos, siendo menor con Outlook y Teams.
El efecto de la herramienta digital sobre las tareas completadas depende de la estrategia de trabajo → hay una clara interacción: no todas las herramientas funcionan igual en cada modalidad laboral.
ggplot(promedios, aes(x = Herramienta_Digital, y = Horas_Pantalla, group = Estrategia_Trabajo, color = Estrategia_Trabajo)) +
geom_line() + geom_point(size = 2) +
labs(title = "Interacción Estrategia*Herramienta sobre Horas_Pantalla")
Interpretación
En Híbrido (rojo), las horas de pantalla son siempre más altas (8–8.8 h), aunque disminuyen con Outlook.
En Presencial (verde), bajan con Excel y Outlook, pero aumentan fuertemente con Teams (máximo ~8.8 h).
En Teletrabajo (azul), las horas de pantalla son las más bajas y estables, cerca de 7–7.2 h, sin grandes cambios.
library(dplyr)
library(tibble)
# Inicializamos listas para guardar resultados
efecto_Estrategia_en_Herramienta <- list()
efecto_Herramienta_en_Estrategia <- list()
# ---------------------------------------------------------
# Efecto de la Estrategia de Trabajo dentro de cada nivel de Herramienta Digital
# ---------------------------------------------------------
for (nivel_herramienta in levels(datos$Herramienta_Digital)) {
subdatos <- filter(datos, Herramienta_Digital == nivel_herramienta)
manova_mod <- manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
Estrategia_Trabajo, data = subdatos)
pval <- summary(manova_mod, test = "Pillai")$stats["Estrategia_Trabajo", "Pr(>F)"]
efecto_Estrategia_en_Herramienta[[nivel_herramienta]] <- pval
}
# ---------------------------------------------------------
# Efecto de la Herramienta Digital dentro de cada nivel de Estrategia de Trabajo
# ---------------------------------------------------------
for (nivel_estrategia in levels(datos$Estrategia_Trabajo)) {
subdatos <- filter(datos, Estrategia_Trabajo == nivel_estrategia)
manova_mod <- manova(cbind(Tareas_Completadas, Horas_Pantalla, Tiempo_Respuesta_Tareas) ~
Herramienta_Digital, data = subdatos)
pval <- summary(manova_mod, test = "Pillai")$stats["Herramienta_Digital", "Pr(>F)"]
efecto_Herramienta_en_Estrategia[[nivel_estrategia]] <- pval
}
# ---------------------------------------------------------
# Convertir resultados en tablas
# ---------------------------------------------------------
tabla_efecto_Estrategia_en_Herramienta <- tibble(
`Herramienta Digital` = names(efecto_Estrategia_en_Herramienta),
`p-valor efecto de Estrategia` = unlist(efecto_Estrategia_en_Herramienta)
)
tabla_efecto_Herramienta_en_Estrategia <- tibble(
`Estrategia de Trabajo` = names(efecto_Herramienta_en_Estrategia),
`p-valor efecto de Herramienta` = unlist(efecto_Herramienta_en_Estrategia)
)
# Mostrar tablas de efectos simples
print(tabla_efecto_Estrategia_en_Herramienta)
## # A tibble: 4 × 2
## `Herramienta Digital` `p-valor efecto de Estrategia`
## <chr> <dbl>
## 1 Google Drive 6.32e-42
## 2 Microsoft Excel 6.68e-51
## 3 Microsoft Outlook 9.95e-57
## 4 Microsoft Teams 2.40e-63
## # A tibble: 3 × 2
## `Estrategia de Trabajo` `p-valor efecto de Herramienta`
## <chr> <dbl>
## 1 Híbrido 7.81e-56
## 2 Presencial 8.79e-70
## 3 Teletrabajo 5.06e-58
Conclusiones:
La estrategia de trabajo influye significativamente en los resultados, independientemente de la herramienta digital utilizada, aunque el tamaño del efecto parece más fuerte en herramientas de comunicación y colaboración (Teams, Outlook) que en las de almacenamiento o cálculo (Drive, Excel).
La elección de la herramienta digital afecta el rendimiento en todas las estrategias de trabajo. Es decir, incluso dentro de cada modalidad (híbrido, presencial o teletrabajo), las diferencias entre Google Drive, Excel, Outlook y Teams son estadísticamente significativas.
Contrastes lineales
library(car)
linearHypothesis(modelo, "Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel") #Contraste individual de interacción
##
## Sum of squares and products for the hypothesis:
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 5.985609 5.600459
## Horas_Pantalla 5.600459 5.240091
## Tiempo_Respuesta_Tareas 17.681303 16.543580
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 17.68130
## Horas_Pantalla 16.54358
## Tiempo_Respuesta_Tareas 52.23002
##
## Sum of squares and products for error:
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 677.5838227 -0.6715254
## Horas_Pantalla -0.6715254 639.6013548
## Tiempo_Respuesta_Tareas 1.8676226 -17.9051263
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 1.867623
## Horas_Pantalla -17.905126
## Tiempo_Respuesta_Tareas 624.719901
##
## Multivariate Tests:
## Df test stat approx F num Df den Df Pr(>F)
## Pillai 1 0.0926015 33.50694 3 985 < 2.22e-16 ***
## Wilks 1 0.9073985 33.50694 3 985 < 2.22e-16 ***
## Hotelling-Lawley 1 0.1020516 33.50694 3 985 < 2.22e-16 ***
## Roy 1 0.1020516 33.50694 3 985 < 2.22e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Tareas_Completadas
## (Intercept) 10.98699671
## Estrategia_TrabajoPresencial -0.79123551
## Estrategia_TrabajoTeletrabajo -1.37166599
## Herramienta_DigitalMicrosoft Excel -0.07250708
## Herramienta_DigitalMicrosoft Outlook -1.27265077
## Herramienta_DigitalMicrosoft Teams -0.39301630
## GeneroMasculino -0.04147226
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -0.54687475
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.89651714
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook 0.04586897
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook 0.66516398
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 0.74725895
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.31184016
## Horas_Pantalla
## (Intercept) 8.79330324
## Estrategia_TrabajoPresencial -0.63521255
## Estrategia_TrabajoTeletrabajo -0.73113511
## Herramienta_DigitalMicrosoft Excel -0.29009112
## Herramienta_DigitalMicrosoft Outlook -0.85983564
## Herramienta_DigitalMicrosoft Teams -0.58782685
## GeneroMasculino -0.02685689
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -0.51168550
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.30886404
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook -0.08386567
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook -0.28753587
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 1.29928716
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.62874025
## Tiempo_Respuesta_Tareas
## (Intercept) 41.749185978
## Estrategia_TrabajoPresencial -1.874431035
## Estrategia_TrabajoTeletrabajo -2.486308704
## Herramienta_DigitalMicrosoft Excel 0.382629408
## Herramienta_DigitalMicrosoft Outlook -2.352888107
## Herramienta_DigitalMicrosoft Teams -0.745433221
## GeneroMasculino 0.009831585
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Excel -1.615450960
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Excel 0.843336101
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Outlook -0.348959011
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Outlook 1.761059213
## Estrategia_TrabajoPresencial:Herramienta_DigitalMicrosoft Teams 2.214663986
## Estrategia_TrabajoTeletrabajo:Herramienta_DigitalMicrosoft Teams -0.219016740
lh.out <- linearHypothesis(modelo, hypothesis.matrix =
c("Estrategia_TrabajoPresencial = 0",
"Herramienta_DigitalMicrosoft Excel = 0")) #Contraste conjunto (bloque) de hipótesis
lh.out
##
## Sum of squares and products for the hypothesis:
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 30.66418 20.36450
## Horas_Pantalla 20.36450 16.18991
## Tiempo_Respuesta_Tareas 82.81166 48.62335
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 82.81166
## Horas_Pantalla 48.62335
## Tiempo_Respuesta_Tareas 238.87814
##
## Sum of squares and products for error:
## Tareas_Completadas Horas_Pantalla
## Tareas_Completadas 677.5838227 -0.6715254
## Horas_Pantalla -0.6715254 639.6013548
## Tiempo_Respuesta_Tareas 1.8676226 -17.9051263
## Tiempo_Respuesta_Tareas
## Tareas_Completadas 1.867623
## Horas_Pantalla -17.905126
## Tiempo_Respuesta_Tareas 624.719901
##
## Multivariate Tests:
## Df test stat approx F num Df den Df Pr(>F)
## Pillai 2 0.3194481 62.47469 6 1972 < 2.22e-16 ***
## Wilks 2 0.6839937 68.66523 6 1970 < 2.22e-16 ***
## Hotelling-Lawley 2 0.4569699 74.94306 6 1968 < 2.22e-16 ***
## Roy 2 0.4456794 146.47998 3 986 < 2.22e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
No todas las herramientas digitales son igual de efectivas bajo las distintas estrategias de trabajo. La productividad y eficiencia dependen fuertemente de esa interacción, lo cual es clave para la toma de decisiones en políticas laborales o tecnológicas.
Se presenta un análisis MANCOVA en un Diseño en Bloques Completos al Azar (DBCA), aplicado a un conjunto de datos simulados. El objetivo es determinar si el tipo de fertilizante (F1, F2 y F3) tiene un efecto multivariado significativo sobre la altura de las plantas y el número de frutos, controlando por la humedad inicial del suelo y el peso inicial de las plantas, en un diseño de bloques completos al azar.
set.seed(123)
# Factores
Fertilizante <- factor(rep(c("F1","F2","F3"), each=12)) # 12 plantas por fertilizante
Bloque <- factor(rep(1:4, times=9)) # 4 bloques
# Covariables simuladas
HUMEDAD <- round(rnorm(36, mean=60, sd=5), 1)
PESOINI <- round(rnorm(36, mean=15, sd=2), 1)
# Efecto del fertilizante en variables respuesta
# (F3 es el mejor, F1 el peor)
media_ALTURA <- c(F1=50, F2=55, F3=62)
media_FRUTOS <- c(F1=10, F2=13, F3=16)
ALTURA <- rnorm(36, mean=media_ALTURA[Fertilizante] + 0.1*(HUMEDAD-60) + 0.5*(PESOINI-15), sd=3)
FRUTOS <- rpois(36, lambda=media_FRUTOS[Fertilizante] + 0.05*(HUMEDAD-60))
# Data frame final
datos <- data.frame(Fertilizante, Bloque, HUMEDAD, PESOINI, ALTURA, FRUTOS)
head(datos)
## Fertilizante Bloque HUMEDAD PESOINI ALTURA FRUTOS
## 1 F1 1 57.2 16.1 53.28722 9
## 2 F1 2 58.8 14.9 47.70240 9
## 3 F1 3 67.8 14.4 48.41597 13
## 4 F1 4 60.4 14.2 52.71671 8
## 5 F1 1 60.6 13.6 48.50568 11
## 6 F1 2 68.6 14.6 46.99785 5
## Fertilizante Bloque HUMEDAD PESOINI ALTURA
## F1:12 1:9 Min. :50.20 Min. :10.40 Min. :47.00
## F2:12 2:9 1st Qu.:57.12 1st Qu.:14.07 1st Qu.:51.52
## F3:12 3:9 Median :60.60 Median :14.90 Median :55.65
## 4:9 Mean :60.28 Mean :15.02 Mean :55.88
## 3rd Qu.:63.65 3rd Qu.:15.95 3rd Qu.:59.00
## Max. :68.90 Max. :19.30 Max. :68.65
## FRUTOS
## Min. : 5.00
## 1st Qu.: 9.75
## Median :13.50
## Mean :13.19
## 3rd Qu.:16.00
## Max. :25.00
H₀: Las variables dependientes siguen una distribución normal multivariada dentro de cada combinación de tratamiento (fertilizante) y bloque.
H₁: Al menos en un grupo (combinación de fertilizante y bloque), las variables dependientes no siguen una distribución normal multivariada.
La siguiente funcion (mshapiro.test
) se aplica grupo a
grupo, por lo tanto primero es necesario dividir la base de datos en los
grupos, en nuestro caso 3.
## Fertilizante Bloque HUMEDAD PESOINI ALTURA FRUTOS
## 1 F1 1 57.2 16.1 53.28722 9
## 2 F1 2 58.8 14.9 47.70240 9
## 3 F1 3 67.8 14.4 48.41597 13
## 4 F1 4 60.4 14.2 52.71671 8
## 5 F1 1 60.6 13.6 48.50568 11
## 6 F1 2 68.6 14.6 46.99785 5
## 7 F1 3 62.3 12.5 49.52391 10
## 8 F1 4 53.7 19.3 51.10333 14
## 9 F1 1 56.6 17.4 50.87729 11
## 10 F1 2 57.8 12.8 49.83584 9
## 11 F1 3 66.1 14.2 49.09802 10
## 12 F1 4 61.8 14.1 51.66313 8
## 13 F2 1 62.0 16.6 55.33854 10
## 14 F2 2 60.6 14.8 55.95535 16
## 15 F2 3 57.2 15.5 58.26052 14
## 16 F2 4 68.9 14.9 57.14554 14
## 17 F2 1 62.5 14.9 54.22221 15
## 18 F2 2 50.2 17.7 58.81642 19
## 19 F2 3 63.5 14.5 58.08051 15
## 20 F2 4 57.6 18.0 57.90519 10
## 21 F2 1 54.7 11.9 53.63620 13
## 22 F2 2 58.9 16.2 53.60628 9
## 23 F2 3 54.9 15.2 58.67196 16
## 24 F2 4 56.4 15.4 53.03922 17
## 25 F3 1 56.9 15.8 68.65200 22
## 26 F3 2 51.6 14.0 65.25783 16
## 27 F3 3 64.2 14.3 61.36290 14
## 28 F3 4 60.8 13.0 58.00074 20
## 29 F3 1 54.3 12.9 58.24878 9
## 30 F3 2 66.3 15.6 63.70065 18
## 31 F3 3 62.1 15.9 61.91992 15
## 32 F3 4 58.5 15.1 60.85737 17
## 33 F3 1 64.5 16.8 60.49514 11
## 34 F3 2 64.4 19.1 64.35492 25
## 35 F3 3 64.1 14.0 59.55529 6
## 36 F3 4 63.4 10.4 55.03617 17
library(tidyverse)
trat1 = datosc %>% filter(Fertilizante == "F1") %>%
dplyr::select(ALTURA, FRUTOS)
trat2 = datosc %>% filter(Fertilizante == "F2") %>%
dplyr::select(ALTURA, FRUTOS)
trat3 = datosc %>% filter(Fertilizante == "F3") %>%
dplyr::select(ALTURA, FRUTOS)
# Ejecutamos el test
library(mvnormtest)
mshapiro.test(t(trat1))
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.90802, p-value = 0.2012
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.96417, p-value = 0.8413
##
## Shapiro-Wilk normality test
##
## data: Z
## W = 0.92249, p-value = 0.3072
La prueba de Shapiro-Wilk aplicada a cada tratamiento indica que todos los tratamientos (Fertilizantes) sobre las variables dependientes cumplen con la normalidad multivariada (valores de p > α = 0.05).
Conclusión: A un nivel de significancia del 5%, existe suficiente evidencia estadística para afirmar que las variables dependientes siguen una distribución normal multivariada en los 3 tratamientos.
H₀: Las matrices de varianza-covarianza de las variables dependientes son iguales en todos los tratamientos.
H₁: Al menos una de las matrices de varianza-covarianza difiere entre los tratamientos.
## 'data.frame': 36 obs. of 6 variables:
## $ Fertilizante: Factor w/ 3 levels "F1","F2","F3": 1 1 1 1 1 1 1 1 1 1 ...
## $ Bloque : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## $ HUMEDAD : num 57.2 58.8 67.8 60.4 60.6 68.6 62.3 53.7 56.6 57.8 ...
## $ PESOINI : num 16.1 14.9 14.4 14.2 13.6 14.6 12.5 19.3 17.4 12.8 ...
## $ ALTURA : num 53.3 47.7 48.4 52.7 48.5 ...
## $ FRUTOS : int 9 9 13 8 11 5 10 14 11 9 ...
## Fertilizante Bloque HUMEDAD PESOINI ALTURA FRUTOS
## 1 F1 1 57.2 16.1 53.28722 9
## 2 F1 2 58.8 14.9 47.70240 9
## 3 F1 3 67.8 14.4 48.41597 13
## 4 F1 4 60.4 14.2 52.71671 8
## 5 F1 1 60.6 13.6 48.50568 11
## 6 F1 2 68.6 14.6 46.99785 5
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: datosc[, 5:6]
## Chi-Sq (approx.) = 10.974, df = 6, p-value = 0.08917
## Summary for Box's M-test of Equality of Covariance Matrices
##
## Chi-Sq: 10.97435
## df: 6
## p-value: 0.08917
##
## log of Covariance determinants:
## F1 F2 F3
## 3.090107 3.712221 5.731208
##
## Eigenvalues:
## F1 F2 F3 pooled
## 1 5.746389 9.922473 33.015471 16.19210
## 2 3.824911 4.126456 9.339307 5.79957
##
## Statistics based on eigenvalues:
## F1 F2 F3 pooled
## product 21.979427 40.944649 308.341627 93.907210
## sum 9.571300 14.048929 42.354778 21.991669
## precision 2.296389 2.914432 7.279973 4.270127
## max 5.746389 9.922473 33.015471 16.192099
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: Y
## Chi-Sq (approx.) = 10.974, df = 6, p-value = 0.08917
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: datos[, 5:6]
## Chi-Sq (approx.) = 10.974, df = 6, p-value = 0.08917
Podemos observar que el p_valor = 0.08917 > 0.05 No se rechaza la H₀
Conclusión: A un nivel de significancia del 5%, existe suficiente evidencia estadística para afirmar que las matrices varianza-covarianza de las variables dependientes son iguales en todos los tratamientos; es decir, existe homogeneidad.
tomates <- unique(datosc$Fertilizante)
tomates1 <- lapply(tomates,
function(x){as.matrix(datosc[datosc$Fertilizante == x, 5:6])}
)
names(tomates1) <- tomates
Ahmad2017(tomates1)
##
## Ahmad 2017 Homogeneity of Covariance Matrices Test
##
## data: F1, F2 and F3
## Standard Normal = 2187.1, Mean = 0, Variance = 1, p-value < 2.2e-16
## alternative hypothesis: true difference in covariance matrices is not equal to 0
Se observa que el p_valor < 2.2e-16 < 0.05 Se rechaza la H₀
NOTA: Este test es muy sensible a violaciones leves y a tamaños de muestra grandes. Podría estar detectando diferencias pequeñas que no afectan tanto el análisis.
Conclusión: No hay homogeneidad de matrices varianza-covarianza.
data = datosc[, c("Fertilizante", "ALTURA", "FRUTOS")]
homogeneityCovariances(data, group = Fertilizante, covTest = BoxesM)
## Warning: `invoke()` is deprecated as of rlang 0.4.0.
## Please use `exec()` or `inject()` instead.
## This warning is displayed once every 8 hours.
##
## Boxes' M Homogeneity of Covariance Matrices Test
##
## data: F1, F2 and F3
## Chi-Squared = 12.027, df = 156, p-value = 1
## alternative hypothesis: true difference in covariance matrices is not equal to 0
Tenemos un p_valor = 1 > 0.05 No se rechaza la H0
Conclusión: Hay homogeneidad de matrices varianza-covarianza.
Hipótesis para cada uno:
Bartlett’s Test:
H₀: Igualdad de las matrices de covarianza.
H₁: Diferencia entre al menos una matriz.
Fligner-Killeen (robusto):
H₀: Igual dispersión (varianzas).
H₁: Diferencias en la dispersión.
# Bartlett test of HOMOGENEITY of variances (parametric):
# Bartlett's K-squared =1.175 df =1 p value =0.27847
# Fligner-Killeen test of HOMOGENEITY of variances (non parametric):
# Fligner-Killeen chi-squared =1.646 df =1 p value =0.19954
library(DFA.CANCOR)
HOMOGENEITY(data = datosc[c(1,5,6)],groups = 'Fertilizante',
variables = c('ALTURA', 'FRUTOS'))
##
## Covariance matrix for GroupF1
## ALTURA FRUTOS
## ALTURA 3.91 0.40
## FRUTOS 0.40 5.66
##
## Covariance matrix for GroupF2
## ALTURA FRUTOS
## ALTURA 4.78 1.83
## FRUTOS 1.83 9.27
##
## Covariance matrix for GroupF3
## ALTURA FRUTOS
## ALTURA 13.48 8.99
## FRUTOS 8.99 28.88
##
##
## Bartlett test of HOMOGENEITY of variances (parametric):
##
## Bartlett's K-squared =1.175 df =1 p value =0.27847
##
##
## Fligner-Killeen test of HOMOGENEITY of variances (non parametric):
##
## Fligner-Killeen chi-squared =1.646 df =1 p value =0.19954
##
##
## Pooled within groups covariance matrix from SPSS:
## ALTURA FRUTOS
## ALTURA 7.388 3.740
## FRUTOS 3.740 14.604
##
##
## Pooled within groups correlation matrix from SPSS:
## ALTURA FRUTOS
## ALTURA 1.00 0.36
## FRUTOS 0.36 1.00
##
##
## Box Test of equality of covariance matrices:
##
## Log determinants:
## Log Determinant
## F1 3.090
## F2 3.712
## F3 5.731
## Pooled 4.542
##
##
## M = 12.027 F = 1.829 df1 = 6 df2 = 27141.23 p = 0.0893
Tanto el Test de Bartlett como el de Fligner-Killeen rechaza la H₀.
Conclusión general: A un nivel de significancia del 5%, existe suficiente evidencia para considerar que las matrices de varianza-covarianza son homogéneas entre los tratamientos. El resultado de Ahmad2017 debe interpretarse con precaución, ya que puede ser demasiado sensible.
H₀:La matriz de correlación es una matriz identidad (las variables no están correlacionadas)
H₁: Al menos una correlación es diferente de 0 (hay correlación entre las variables dependientes).
## Fertilizante Bloque HUMEDAD PESOINI ALTURA FRUTOS
## 1 F1 1 57.2 16.1 53.28722 9
## 2 F1 2 58.8 14.9 47.70240 9
## 3 F1 3 67.8 14.4 48.41597 13
## 4 F1 4 60.4 14.2 52.71671 8
## 5 F1 1 60.6 13.6 48.50568 11
## 6 F1 2 68.6 14.6 46.99785 5
## ALTURA FRUTOS
## 1 53.28722 9
## 2 47.70240 9
## 3 48.41597 13
## 4 52.71671 8
## 5 48.50568 11
## 6 46.99785 5
## 7 49.52391 10
## 8 51.10333 14
## 9 50.87729 11
## 10 49.83584 9
## 11 49.09802 10
## 12 51.66313 8
## 13 55.33854 10
## 14 55.95535 16
## 15 58.26052 14
## 16 57.14554 14
## 17 54.22221 15
## 18 58.81642 19
## 19 58.08051 15
## 20 57.90519 10
## 21 53.63620 13
## 22 53.60628 9
## 23 58.67196 16
## 24 53.03922 17
## 25 68.65200 22
## 26 65.25783 16
## 27 61.36290 14
## 28 58.00074 20
## 29 58.24878 9
## 30 63.70065 18
## 31 61.91992 15
## 32 60.85737 17
## 33 60.49514 11
## 34 64.35492 25
## 35 59.55529 6
## 36 55.03617 17
## $chisq
## [1] 17.32741
##
## $p.value
## [1] 3.146165e-05
##
## $df
## [1] 1
Conclusión: A un nivel de significancia del 5%, existe suficiente evidencia estadística para afirmar que si hay correlación entre las variables dependientes.
Dado esto podemos continuar con el MANCOVA en DBCA
## Fertilizante Bloque HUMEDAD PESOINI ALTURA FRUTOS
## 1 F1 1 57.2 16.1 53.28722 9
## 2 F1 2 58.8 14.9 47.70240 9
## 3 F1 3 67.8 14.4 48.41597 13
## 4 F1 4 60.4 14.2 52.71671 8
## 5 F1 1 60.6 13.6 48.50568 11
## 6 F1 2 68.6 14.6 46.99785 5
## 7 F1 3 62.3 12.5 49.52391 10
## 8 F1 4 53.7 19.3 51.10333 14
## 9 F1 1 56.6 17.4 50.87729 11
## 10 F1 2 57.8 12.8 49.83584 9
## 11 F1 3 66.1 14.2 49.09802 10
## 12 F1 4 61.8 14.1 51.66313 8
## 13 F2 1 62.0 16.6 55.33854 10
## 14 F2 2 60.6 14.8 55.95535 16
## 15 F2 3 57.2 15.5 58.26052 14
## 16 F2 4 68.9 14.9 57.14554 14
## 17 F2 1 62.5 14.9 54.22221 15
## 18 F2 2 50.2 17.7 58.81642 19
## 19 F2 3 63.5 14.5 58.08051 15
## 20 F2 4 57.6 18.0 57.90519 10
## 21 F2 1 54.7 11.9 53.63620 13
## 22 F2 2 58.9 16.2 53.60628 9
## 23 F2 3 54.9 15.2 58.67196 16
## 24 F2 4 56.4 15.4 53.03922 17
## 25 F3 1 56.9 15.8 68.65200 22
## 26 F3 2 51.6 14.0 65.25783 16
## 27 F3 3 64.2 14.3 61.36290 14
## 28 F3 4 60.8 13.0 58.00074 20
## 29 F3 1 54.3 12.9 58.24878 9
## 30 F3 2 66.3 15.6 63.70065 18
## 31 F3 3 62.1 15.9 61.91992 15
## 32 F3 4 58.5 15.1 60.85737 17
## 33 F3 1 64.5 16.8 60.49514 11
## 34 F3 2 64.4 19.1 64.35492 25
## 35 F3 3 64.1 14.0 59.55529 6
## 36 F3 4 63.4 10.4 55.03617 17
Se calcularon las matrices de suma de cuadrados y productos cruzados
(SSCP) para cada fuente de variación, y se usó la razón de determinantes
para estimar el TAMAÑO DE EFECTO (BONDAD DE AJUSTE)
(eta²
).
## List of 13
## $ coefficients : num [1:8, 1:2] 48.089 5.515 11.539 0.167 1.137 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:8] "(Intercept)" "FertilizanteF2" "FertilizanteF3" "Bloque2" ...
## .. ..$ : chr [1:2] "ALTURA" "FRUTOS"
## $ residuals : num [1:36, 1:2] 2.126 -2.551 -1.159 3.676 -0.408 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:36] "1" "2" "3" "4" ...
## .. ..$ : chr [1:2] "ALTURA" "FRUTOS"
## $ effects : num [1:36, 1:2] -335.31 1.44 28.11 1.26 1.23 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:36] "(Intercept)" "FertilizanteF2" "FertilizanteF3" "Bloque2" ...
## .. ..$ : chr [1:2] "ALTURA" "FRUTOS"
## $ rank : int 8
## $ fitted.values: num [1:36, 1:2] 51.2 50.3 49.6 49 48.9 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:36] "1" "2" "3" "4" ...
## .. ..$ : chr [1:2] "ALTURA" "FRUTOS"
## $ assign : int [1:8] 0 1 1 2 2 2 3 4
## $ qr :List of 5
## ..$ qr : num [1:36, 1:8] -6 0.167 0.167 0.167 0.167 ...
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:36] "1" "2" "3" "4" ...
## .. .. ..$ : chr [1:8] "(Intercept)" "FertilizanteF2" "FertilizanteF3" "Bloque2" ...
## .. ..- attr(*, "assign")= int [1:8] 0 1 1 2 2 2 3 4
## .. ..- attr(*, "contrasts")=List of 2
## .. .. ..$ Fertilizante: chr "contr.treatment"
## .. .. ..$ Bloque : chr "contr.treatment"
## ..$ qraux: num [1:8] 1.17 1.1 1.16 1.1 1.14 ...
## ..$ pivot: int [1:8] 1 2 3 4 5 6 7 8
## ..$ tol : num 1e-07
## ..$ rank : int 8
## ..- attr(*, "class")= chr "qr"
## $ df.residual : int 28
## $ contrasts :List of 2
## ..$ Fertilizante: chr "contr.treatment"
## ..$ Bloque : chr "contr.treatment"
## $ xlevels :List of 2
## ..$ Fertilizante: chr [1:3] "F1" "F2" "F3"
## ..$ Bloque : chr [1:4] "1" "2" "3" "4"
## $ call : language manova(cbind(ALTURA, FRUTOS) ~ Fertilizante + Bloque + HUMEDAD + PESOINI, data = datos)
## $ terms :Classes 'terms', 'formula' language cbind(ALTURA, FRUTOS) ~ Fertilizante + Bloque + HUMEDAD + PESOINI
## .. ..- attr(*, "variables")= language list(cbind(ALTURA, FRUTOS), Fertilizante, Bloque, HUMEDAD, PESOINI)
## .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
## .. .. ..- attr(*, "dimnames")=List of 2
## .. .. .. ..$ : chr [1:5] "cbind(ALTURA, FRUTOS)" "Fertilizante" "Bloque" "HUMEDAD" ...
## .. .. .. ..$ : chr [1:4] "Fertilizante" "Bloque" "HUMEDAD" "PESOINI"
## .. ..- attr(*, "term.labels")= chr [1:4] "Fertilizante" "Bloque" "HUMEDAD" "PESOINI"
## .. ..- attr(*, "order")= int [1:4] 1 1 1 1
## .. ..- attr(*, "intercept")= int 1
## .. ..- attr(*, "response")= int 1
## .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
## .. ..- attr(*, "predvars")= language list(cbind(ALTURA, FRUTOS), Fertilizante, Bloque, HUMEDAD, PESOINI)
## .. ..- attr(*, "dataClasses")= Named chr [1:5] "nmatrix.2" "factor" "factor" "numeric" ...
## .. .. ..- attr(*, "names")= chr [1:5] "cbind(ALTURA, FRUTOS)" "Fertilizante" "Bloque" "HUMEDAD" ...
## $ model :'data.frame': 36 obs. of 5 variables:
## ..$ cbind(ALTURA, FRUTOS): num [1:36, 1:2] 53.3 47.7 48.4 52.7 48.5 ...
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : NULL
## .. .. ..$ : chr [1:2] "ALTURA" "FRUTOS"
## ..$ Fertilizante : Factor w/ 3 levels "F1","F2","F3": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ Bloque : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## ..$ HUMEDAD : num [1:36] 57.2 58.8 67.8 60.4 60.6 68.6 62.3 53.7 56.6 57.8 ...
## ..$ PESOINI : num [1:36] 16.1 14.9 14.4 14.2 13.6 14.6 12.5 19.3 17.4 12.8 ...
## ..- attr(*, "terms")=Classes 'terms', 'formula' language cbind(ALTURA, FRUTOS) ~ Fertilizante + Bloque + HUMEDAD + PESOINI
## .. .. ..- attr(*, "variables")= language list(cbind(ALTURA, FRUTOS), Fertilizante, Bloque, HUMEDAD, PESOINI)
## .. .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
## .. .. .. ..- attr(*, "dimnames")=List of 2
## .. .. .. .. ..$ : chr [1:5] "cbind(ALTURA, FRUTOS)" "Fertilizante" "Bloque" "HUMEDAD" ...
## .. .. .. .. ..$ : chr [1:4] "Fertilizante" "Bloque" "HUMEDAD" "PESOINI"
## .. .. ..- attr(*, "term.labels")= chr [1:4] "Fertilizante" "Bloque" "HUMEDAD" "PESOINI"
## .. .. ..- attr(*, "order")= int [1:4] 1 1 1 1
## .. .. ..- attr(*, "intercept")= int 1
## .. .. ..- attr(*, "response")= int 1
## .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
## .. .. ..- attr(*, "predvars")= language list(cbind(ALTURA, FRUTOS), Fertilizante, Bloque, HUMEDAD, PESOINI)
## .. .. ..- attr(*, "dataClasses")= Named chr [1:5] "nmatrix.2" "factor" "factor" "numeric" ...
## .. .. .. ..- attr(*, "names")= chr [1:5] "cbind(ALTURA, FRUTOS)" "Fertilizante" "Bloque" "HUMEDAD" ...
## - attr(*, "class")= chr [1:5] "manova" "maov" "aov" "mlm" ...
## $Fertilizante
## ALTURA FRUTOS
## ALTURA 792.2814 423.7898
## FRUTOS 423.7898 233.7222
##
## $Bloque
## ALTURA FRUTOS
## ALTURA 4.962023 -2.675496
## FRUTOS -2.675496 20.527778
##
## $HUMEDAD
## ALTURA FRUTOS
## ALTURA 20.01189 13.925858
## FRUTOS 13.92586 9.690715
##
## $PESOINI
## ALTURA FRUTOS
## ALTURA 57.35264 37.08445
## FRUTOS 37.08445 23.97896
##
## $Residuals
## ALTURA FRUTOS
## ALTURA 161.48186 75.07664
## FRUTOS 75.07664 427.71922
F = Matrices$Fertilizante
Bloque = Matrices$Bloque
X1 = Matrices$HUMEDAD
X2 = Matrices$PESOINI
W=Matrices$Residuals
# Variabilidad explicada por el factor (Fertilizante).
# Matriz suma de cuadrados y productos cruzados del factor (SCOCF)
F
## ALTURA FRUTOS
## ALTURA 792.2814 423.7898
## FRUTOS 423.7898 233.7222
# Variabilidad explicada por el Bloque.
# Matriz suma de cuadrados y productos cruzados del Bloque (SCOCBloque)
Bloque
## ALTURA FRUTOS
## ALTURA 4.962023 -2.675496
## FRUTOS -2.675496 20.527778
# Variabilidad de la covariable 1.
# Matriz suma de cuadrados y productos cruzados de la covariable 1 (SCOCX1)
X1
## ALTURA FRUTOS
## ALTURA 20.01189 13.925858
## FRUTOS 13.92586 9.690715
# Variabilidad de la covariable 2.
# Matriz suma de cuadrados y productos cruzados de la covariable 2 (SCOCX2)
X2
## ALTURA FRUTOS
## ALTURA 57.35264 37.08445
## FRUTOS 37.08445 23.97896
## ALTURA FRUTOS
## ALTURA 161.48186 75.07664
## FRUTOS 75.07664 427.71922
# Variabilidad Total.
# Matriz suma de cuadrados y productos cruzados total (SCOCT)
T = F + Bloque + X1 + X2 + W
T
## ALTURA FRUTOS
## ALTURA 1036.0898 547.2012
## FRUTOS 547.2012 715.6389
## Bondad de ajuste
# Un valor proximo a 1 indica que la mayor parte de la variabilidad total puede
# atribuirse al Fertilizante, mientras que un valor proximo a 0 significa que el
# factor explica muy poco de esa variabilidad total.
eta2 = 1 - det(Bloque + X1 + X2 + W)/det(T)
eta2
## [1] 0.7686507
Este resultado de bondad de ajuste significa que el 76.87% de la variabilidad conjunta de las variables dependientes (ALTURA, FRUTOS) se explica por los efectos incluidos en el modelo.
Conclusión: Este resultado indica que los fertilizantes explican, en conjunto, gran parte de la variación en la altura de la planta y el número de frutos por planta, incluso después de controlar por las covariables y el efecto de bloque.
H₀: Una vez controlado el efecto de las covariables (HUMEDAD, PESOINI) y del bloque, los vectores de medias de ALTURA y FRUTOS son iguales en los tres fertilizantes.
H₁: Una vez controlado el efecto de las covariables y del bloque, al menos un vector de medias es diferente entre los fertilizantes.
H₀: No existen diferencias en los vectores de medias de ALTURA y FRUTOS entre los bloques.
H₁: Al menos un bloque difiere en su vector de medias.
H₀: No existe relación lineal entre HUMEDAD y el vector de variables dependientes (ALTURA, FRUTOS).
H₁: Existe relación lineal significativa entre HUMEDAD y el vector de variables dependientes.
H₀: No existe relación lineal entre PESOINI y el vector de variables dependientes (ALTURA, FRUTOS).
H₁: Existe relación lineal significativa entre PESOINI y el vector de variables dependientes.
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 2 0.84854 10.3170 4 56 2.489e-06 ***
## Bloque 3 0.08691 0.4240 6 56 0.85994
## HUMEDAD 1 0.11241 1.7097 2 27 0.19993
## PESOINI 1 0.26470 4.8598 2 27 0.01575 *
## Residuals 28
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Wilks approx F num Df den Df Pr(>F)
## Fertilizante 2 0.16606 19.6287 4 54 5.057e-10 ***
## Bloque 3 0.91446 0.4115 6 54 0.86819
## HUMEDAD 1 0.88759 1.7097 2 27 0.19993
## PESOINI 1 0.73530 4.8598 2 27 0.01575 *
## Residuals 28
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Hotelling-Lawley approx F num Df den Df Pr(>F)
## Fertilizante 2 4.9341 32.072 4 52 1.783e-13 ***
## Bloque 3 0.0920 0.399 6 52 0.87639
## HUMEDAD 1 0.1266 1.710 2 27 0.19993
## PESOINI 1 0.3600 4.860 2 27 0.01575 *
## Residuals 28
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Roy approx F num Df den Df Pr(>F)
## Fertilizante 2 4.9162 68.827 2 28 1.554e-11 ***
## Bloque 3 0.0710 0.663 3 28 0.58179
## HUMEDAD 1 0.1266 1.710 2 27 0.19993
## PESOINI 1 0.3600 4.860 2 27 0.01575 *
## Residuals 28
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Response ALTURA :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 2 792.28 396.14 68.6885 1.591e-11 ***
## Bloque 3 4.96 1.65 0.2868 0.834514
## HUMEDAD 1 20.01 20.01 3.4699 0.073016 .
## PESOINI 1 57.35 57.35 9.9446 0.003829 **
## Residuals 28 161.48 5.77
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response FRUTOS :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 2 233.72 116.861 7.6501 0.002235 **
## Bloque 3 20.53 6.843 0.4479 0.720704
## HUMEDAD 1 9.69 9.691 0.6344 0.432452
## PESOINI 1 23.98 23.979 1.5697 0.220607
## Residuals 28 427.72 15.276
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Respecto a Fertilizantes: p_valores < 0.05 Rechaza la H0
Respecto al bloque: p_valores > 0.05 No rechaza la H0
Respecto a HUMEDAD (Humedad, covariable): p_valores > 0.05 No rechaza la H0
Respecto a PESOINI (peso inicial, covariable): p_valores < 0.05 Rechaza la H0
Consideramos Pillai (más robusto)
El fertilizantes (F1,F2,F3) influye de manera conjunta en la altura de la planta y el número de frutos por planta.
La humedad inicial del suelo (HUMEDAD) no tiene un efecto significativo.
El peso incial de la planta parece influir significativamente.
modelo1 = manova(cbind(ALTURA, FRUTOS) ~
Fertilizante + Bloque + HUMEDAD + PESOINI, data = datos,
subset = Fertilizante %in% c("F1", "F3"))
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.87225 54.621 2 16 7.095e-08 ***
## Bloque 3 0.21571 0.685 6 34 0.66285
## HUMEDAD 1 0.13755 1.276 2 16 0.30612
## PESOINI 1 0.30127 3.449 2 16 0.05682 .
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Wilks approx F num Df den Df Pr(>F)
## Fertilizante 1 0.12775 54.621 2 16 7.095e-08 ***
## Bloque 3 0.79492 0.649 6 32 0.69087
## HUMEDAD 1 0.86245 1.276 2 16 0.30612
## PESOINI 1 0.69873 3.449 2 16 0.05682 .
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Hotelling-Lawley approx F num Df den Df Pr(>F)
## Fertilizante 1 6.8276 54.621 2 16 7.095e-08 ***
## Bloque 3 0.2446 0.612 6 30 0.71917
## HUMEDAD 1 0.1595 1.276 2 16 0.30612
## PESOINI 1 0.4312 3.449 2 16 0.05682 .
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Roy approx F num Df den Df Pr(>F)
## Fertilizante 1 6.8276 54.621 2 16 7.095e-08 ***
## Bloque 3 0.1621 0.919 3 17 0.45283
## HUMEDAD 1 0.1595 1.276 2 16 0.30612
## PESOINI 1 0.4312 3.449 2 16 0.05682 .
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En la comparación específica entre los fertilizantes F1 y F3
La MANCOVA te dice que hay diferencias multivariadas, pero los ANOVA te dicen en qué variable ocurre.
## Response ALTURA :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 1 790.22 790.22 115.8864 5.2e-09 ***
## Bloque 3 14.94 4.98 0.7304 0.54795
## HUMEDAD 1 17.54 17.54 2.5721 0.12718
## PESOINI 1 42.87 42.87 6.2867 0.02261 *
## Residuals 17 115.92 6.82
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response FRUTOS :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 1 222.042 222.042 12.5916 0.00247 **
## Bloque 3 28.458 9.486 0.5379 0.66264
## HUMEDAD 1 0.217 0.217 0.0123 0.91292
## PESOINI 1 51.460 51.460 2.9182 0.10578
## Residuals 17 299.781 17.634
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Para ALTURA:
Fertilizante: p = 5.2e-09 → sí es significativa
Bloque: p = 0.54795 → no es significativa
HUMEDAD: p = 0.12718 → no es significativa
PESOINI: p = 0.02261 → sí es significativa
Para FRUTOS:
Fertilizante: p = 0.00247 → sí es significativa
Bloque: p = 0.66264 → no es significativa
HUMEDAD: p = 0.91292 → no es significativa
PESOINI: p = 0.10578 → no es significativa
Esto confirma que el efecto global detectado por la MANCOVA proviene principalmente de la variable dependiente ALTURA.
Conclusión: El resultado multivariado de la MANCOVA se debe principalmente a las diferencias en ALTURA, aunque FRUTOS también contribuye en menor medida. El peso inicial de la planta (PESOINI) afecta significativamente la altura pero no el número de frutos, por lo que es apropiado mantenerla como covariable para ajustar el modelo.
H₀: los 2 vectores son iguales.
H₁: los 2 vectores difieren.
Ferti <- c("F1", "F2", "F3")
comb<-t(combn(length(Ferti), 2))
for(i in 1:nrow(comb)){
modelo.comp = manova(cbind(ALTURA, FRUTOS) ~
Fertilizante + Bloque + HUMEDAD + PESOINI,
data=datos,
subset=Fertilizante %in% Ferti[comb[i,]])
print(paste("Trat: ",Ferti[comb[i,]][1], "y",Ferti[comb[i,]][2]))
print(summary(modelo.comp, test = "Pillai"))
cat("\n")
}
## [1] "Trat: F1 y F2"
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.82867 38.693 2 16 7.425e-07 ***
## Bloque 3 0.24740 0.800 6 34 0.57679
## HUMEDAD 1 0.32506 3.853 2 16 0.04307 *
## PESOINI 1 0.08082 0.703 2 16 0.50956
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [1] "Trat: F1 y F3"
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.87225 54.621 2 16 7.095e-08 ***
## Bloque 3 0.21571 0.685 6 34 0.66285
## HUMEDAD 1 0.13755 1.276 2 16 0.30612
## PESOINI 1 0.30127 3.449 2 16 0.05682 .
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## [1] "Trat: F2 y F3"
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.62366 13.2575 2 16 0.0004024 ***
## Bloque 3 0.47280 1.7543 6 34 0.1384472
## HUMEDAD 1 0.03192 0.2638 2 16 0.7714198
## PESOINI 1 0.33673 4.0614 2 16 0.0374573 *
## Residuals 17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación General:
Conclusión práctica: si tu objetivo es encontrar qué tratamientos difieren, el contraste entre (F1 y F2), (F1 y F3), y (F2 y F3) contribuyen de manera significativa al rechazo de H₀; aunque (F2 y F3) con menor magnitud que las comparaciones que involucran a F1.
Esto es coherente con tu resultado global, donde Fertilizante fue significativa en la MANCOVA: la diferencia detectada está impulsada por F1 vs F2, F1 vs F3, y F2 vs F3
De manera práctica, esto confirma que el factor Fertilizante influye de manera clara y consistente en las variables respuesta, especialmente en ALTURA, tal como lo sugería la MANCOVA global y los ANOVA univariados. Por lo tanto, los tres fertilizantes generan respuestas multivariadas distintas en las plantas, siendo F1 el que más contribuye a las diferencias observadas.