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

1 - Análisis Multivariado: Prueba de Hotelling Z² considerando la matriz varianza covarianza conocida

1. Carga de Librerías

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)

2. Preparación de los Datos

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.

Simulación de datos

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

3. Análisis Exploratorio

En esta sección se describen las primeras observaciones de los datos.

a) Resumen Descriptivo

summary(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
summarytools::descr(datos)
## 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)

b) Análisis gráfico

hist(datos$tasa_incidencia,
     main = "Distribución de incidencia de las enfermedades",
     xlab = "tasa de incidencia por cada 100 personas",
     ylab = "Frecuencia",
     col = "skyblue",
     border = "white")

4. CASO UNIVARIADO

Prueba de normalidad:

Esta prueba se dará sobre tasa de mortalidad.

Hipótesis:

  • 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
# Prueba de Lilliefors (Kolmogorov-Smirnov adaptado)
lillie.test(tasa_mortalidad)
## 
##  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.

Hipótesis Principal:

  • 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.

"Prueba de hipotesis respecto a la media muestral (H0:mu = 49.9, H1:sigma2 != 49.92)"
## [1] "Prueba de hipotesis respecto a la media muestral (H0:mu = 49.9, H1:sigma2 != 49.92)"
z.test(datos$tasa_incidencia,alternative="two.sided",mu= 49.9,sigma.x = 5.5 ,conf.level=0.95)
## 
##  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

"Prueba de hipotesis respecto a una varianza (H0:sigma2 = 5.5^2, H1:sigma2 != 5.5^2)"
## [1] "Prueba de hipotesis respecto a una varianza (H0:sigma2 = 5.5^2, H1:sigma2 != 5.5^2)"
ifr_os_var_test(datos, tasa_incidencia, sd= 5.5, alternative = 'both')
##                                 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)

5. CASO MULTIVARIADO

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

Prueba de normalidad

Primero definimos nuestras hipótesis:

Hipótesis:

  • H₀: La muestra proviene de una distribucion normal hexavariada

  • H₁: La muestra no proviene de una distribucion normal hexavariada

mshapiro.test(t(datos))
## 
##  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

Valores hipotéticos

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

Valores reales

# Calcular las medias muestral reales
media_muestral <- colMeans(datos);media_muestral
##   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.

Cálculo de una correlación

cor(datos$tasa_incidencia,datos$tasa_urbanizacion) 
## [1] 0.01127841
a<-var(datos) # la muestra s

Hipótesis:

  • 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)

result <- Bcov(datos,Sigma=sigma) #prueba de bartlet
summary(result)
##        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.

2 - Análisis Multivariado: Prueba de Hotelling T² para muestras dependientes

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)

1. Introducción y Objetivos

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

1.1 Impacto de las variables en la salud de un paciente con Diabetes Tipo 2

  • 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.

2. Objetivo

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:

Hipótesis nula clásica:

\[ \\ 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.

Hipótesis nula sustantiva:

\[ 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.

Justificación de los dos enfoques:

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.

3. Análisis Exploratorio (EDA)

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:

  1. Descriptivos univariados (media, desviación estándar, mínimo, máximo) para cada variable en Antes y Después.
  2. Correlaciones entre variables en cada momento, para justificar la aproximación multivariada.
  3. Gráficos comparativos (histogramas/densidades y boxplots) de Antes vs. Después.
  4. Exploración de las diferencias \( \): resúmenes numéricos, histogramas y boxplots.

Este análisis preliminar permite verificar la presencia de cambios aparentes, consistencia de los signos esperados en las diferencias y relaciones entre variables.

3.1 Descriptivos Univariados (Resumen Estadístico)

# Descriptivos univariados por momento
library(dplyr)

# Variables
summarytools::descr(antes)
## 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
summarytools::descr(despues)
## 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

3.2 Correlaciones entre las Variables

Correlación Antes

(corr_matrix_antes <- cor(antes))
##                      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)")

Correlación Despues

(corr_matrix_despues <- cor(despues))
##                     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)")

Correlación de Diferencias

(corr_matrix_diferencias <- cor(diferencias))
##                   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)")

3.3 Distribuciones y Boxplot de las Variables

Antes vs. Después

Distribuciones y Densidad

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

Boxplot

library(ggplot2)
library(gridExtra)
## 
## 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")
# Organizar los gráficos en 3 filas y 2 columnas
grid.arrange(p1.1, p2.1, nrow = 1, ncol = 2)

grid.arrange(p3.1, p4.1, nrow = 1, ncol = 2)

grid.arrange(p5.1, p6.1, nrow = 1, ncol = 2)

4. Supuestos

Además de los supuesto, se hará un diagnóstico multivariado.

4.1 Detección de Valores Atípicos Multivariados

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:

Distancia de Mahalanobis

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
cat("Número de no outliers:", num_no_outliers, "\n")
## Número de no outliers: 943

Gráfico de Dispersión

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()`).

4.2 Verificación de la Normalidad Multivariada

Definimos nuestras hipótesis nula y alterna:

Hipótesis nula:

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.

Hipótesis alternativa:

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 Multivariado

# test mshapiro
mshapiro.test(t(diferencias))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99807, p-value = 0.341

Royston

#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

Mardia

#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

Henze-Zirkler

#Test MVN de Henze-Zirkler
hz <- mvn(data = diferencias, mvnTest = "hz")
hz$multivariateNormality
##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.9368738 0.7988659 YES

Doornik-Hansen

#Test MVN de Doornik-Hansen 
dh <- mvn(data = diferencias, mvnTest = "dh")
dh$multivariateNormality
##             Test        E df       p value MVN
## 1 Doornik-Hansen 1539.181 12 1.333977e-322  NO

Szekely-Rizzo

#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
library(knitr)
library(kableExtra)
## 
## 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
Pruebas de Normalidad Multivariada
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.”

5. Aplicación de la prueba T² de Hotelling

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:

5.1 Hipótesis para la prueba con el vector esperado (ICSNP)

Hipótesis nula

\[ 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.).

Hipótesis alternativa

\[ 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.

5.2 Hipótesis para la prueba sin el vector esperado (MVTests)

Hipótesis nula

\[ H_0: \, \mu_D = 0 \] Es decir, no se espera ningún cambio entre las mediciones “Antes” y “Después”.

Hipótesis alternativa

\[ 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:

  • Hotelling T² Statistic = 1015.151:

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.

  • F value = 168.313:

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”.

  • Grados de libertad (df1 = 6, df2 = 958):

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.

  • p-value: < 2e-16:

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.

5. Conclusión General

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”.

Prueba con vector esperado:

  • Resultados: La prueba T² de Hotelling con el vector esperado \(\mu =(−10,−0.5,−15,5,−2,−3)\) mostró un estadístico \(T^2\) de 596.88 y un p-valor < 2.2e-16, lo que indica que las diferencias observadas en las variables son significativamente diferentes de los cambios esperados. Este resultado sugiere que la intervención nutricional ha tenido un impacto positivo y significativo en las variables estudiadas (Glucosa en ayunas, HbA1c, Triglicéridos, Colesterol HDL, Peso corporal y Circunferencia de cintura).

Prueba sin vector esperado (hipótesis nula):

  • Resultados: La segunda prueba T² de Hotelling, sin un vector esperado, también resultó en un estadístico \(T^2\) de 1015.151 y un p-valor < 2e-16, lo que nos lleva a rechazar la hipótesis nula de que no hay diferencia entre las mediciones “Antes” y “Después”. Esto confirma que la intervención ha generado un cambio significativo en las variables medidas.

Conclusión Final

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.

3 - Análisis Multivariado: Prueba de Hotelling T² para muestras independientes

library(dplyr)
library(ggplot2)
library(summarytools)
library(Hotelling)
library(ggstatsplot)
library(ggplot2)
library(ggpubr)
library(MVN)
library(ICSNP)

1. SIMULACIÓN DE DATOS.

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.

2. Gráficos comparativos

Para visualizar diferencias entre las variedades, usamos ggbetweenstats, que combina boxplots con información estadística (p-values y tamaño del efecto).

PESO

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.

DIÁMETRO

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.

3. CASO MULTIVARIADO

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í.

Distancia de Mahalanobis

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:
cat("Grupo B - posibles outliers:", outliersB, "\n")
## 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.

Prueba de Hotelling T² para muestras independientes

La prueba de Hotelling T² compara de manera multivariante los vectores de medias entre dos grupos independientes.

  • Hipótesis nula (H₀): 𝜇𝑋=𝜇𝑌

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.

  • Hipótesis alternativa (H₁): 𝜇𝑋≠𝜇𝑌

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.

    • Como el p-valor es menor a 0.05, se rechaza la hipótesis nula de igualdad de medias multivariadas, concluyendo que existe diferencia significativa en el conjunto de variables Peso y Diámetro entre ambas variedades.

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.

Comparación con vector de diferencias esperado

Se tiene un vector de diferencias esperado (5,−2), podemos evaluar si las diferencias observadas coinciden con ese vector.

  • Hipótesis nula (H₀): 𝜇𝑌−𝜇𝑋=𝜇0

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.

  • Hipótesis alternativa (H₁): 𝜇𝑌−𝜇𝑋≠𝜇0

La diferencia observada no coincide con el vector hipotético, al menos en una de las variables.

mu0 <- c(5, -2)  # B - A

hot_mu <- HotellingsT2(X, Y, mu = mu0)
hot_mu
## 
##  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.

CONCLUSIÓN

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

4 - MANOVA EN DCA

1. Cargar Librerías

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)

2. Preparación de datos

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

SIMULACIÓN

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)
)

3. Supuestos

3.1 Supuesto de normalidad multivariada

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
mshapiro.test(t(ford))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.92552, p-value = 0.0004645
mshapiro.test(t(hyundai))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.94714, p-value = 0.005153
mshapiro.test(t(chevrolet))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.96199, p-value = 0.03229
mshapiro.test(t(volkswagen))
## 
##  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.

3.2 Supuesto de homogeneidad de matrices variancia covariancia

  • 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(res)
## 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.

library(biotools)

boxM(autos[, -1], autos[, 1])
## 
##  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

library(DFA.CANCOR)
## **************************************************************************************************
## 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

3.3 Supuesto de variables dependientes correlacionadas (Bartlett)

  • H₀: Las variables dependientes no están correlacionadas (matriz identidad)

  • H₁: Las variables dependientes están correlacionadas

library(psych)
## 
## 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.

library(MVTests)

res1 <- Bsper(autos[, -1])  # Variables dependientes
summary(res1)
##        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

4. Modelo MANOVA en DCA

modelo <- manova(cbind(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones) ~ Marca, 
                 data = autos)

4.1 Determinación de la matriz residual y la matriz factorial del MANOVA.

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
W
##               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

5. Pruebas estadísticas para probar la hipótesis Ho en el MANOVA.

5.1 Criterio de Razón de verosimilitud (Lambda de Wilk’s)

eta2 = 1 - det(W)/det(T)
eta2
## [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

summary(modelo, test = "Pillai")
##            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
summary(modelo, test = "Hotelling-Lawley")
##            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
summary(modelo, test = "Roy")
##            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.

summary.aov(modelo)
##  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.

5.2 Comparamos dos Marcas de automóviles

Primero generamos un modelo lineal

modelo1 = manova(cbind(Velocidad_max, Consumo, Aceleracion,Precio, Emisiones) ~ Marca, data = autos,
               subset = Marca %in% c("Toyota","Ford"))
summary(modelo1,test="Pillai")
##            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
summary(modelo1,test="Wilks")
##            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
summary(modelo1,test="Hotelling-Lawley")
##            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
summary(modelo1,test="Roy")
##            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”.

5.3 Comparación General por pares

# 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.

5 - MANOVA con experimentos factoriales en DBCA

1. Preparación de los Datos

Contexto del estudio

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:

  • Género: Masculino y Femenino

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:

  • Cada trabajador individual

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>
# Ver la estructura inicial de los datos
str(datos)
## 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 ...
# Mostrar las primeras filas de la base de datos para inspeccionar su contenido
head(datos)
## # 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>
# Supuesto de normalidad multivariada

# Desagregamos la base por tratamientos
datosc = datos
datosc
## # 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>

2. Supuesto de Normalidad Multivariada

Hipótesis:

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
mshapiro.test(t(trat2))  # normalidad para el tratamiento 2
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98594, p-value = 0.479
mshapiro.test(t(trat3))  # normalidad para el tratamiento 3
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97575, p-value = 0.08065
mshapiro.test(t(trat4))  # normalidad para el tratamiento 4
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98305, p-value = 0.4941
mshapiro.test(t(trat5))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.95902, p-value = 0.01713
mshapiro.test(t(trat6))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98755, p-value = 0.6183
mshapiro.test(t(trat7))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.982, p-value = 0.3467
mshapiro.test(t(trat8))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98784, p-value = 0.5417
mshapiro.test(t(trat9))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97889, p-value = 0.2438
mshapiro.test(t(trat10))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.9527, p-value = 0.001342
mshapiro.test(t(trat11))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99043, p-value = 0.7981
mshapiro.test(t(trat12))
## 
##  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.

3. Supuesto de Homogeneidad de Matrices Varianza-Covarianza

Hipótesis:

  • 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).

4. Supuesto de Correlación entre Variables Dependientes (Prueba de Bartlett)

Hipótesis:

  • 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.

5. Ajuste del Modelo MANOVA Factorial con Bloque (DBCA)

# 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
# Resumen del MANOVA
coef(modelo)
##                                                                    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
summary(modelo)
##                                         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.

6. Pruebas de Hipótesis Específicas

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.

MANOVA en ANOVAs individuales

# 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

7. Efectos Simple

7.1 Efectos simples

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.

Efectos simples de Estrategia de Trabajo dentro de cada nivel de Herramienta Digital

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).

Efectos simples de Herramienta Digital dentro de cada nivel de Estrategia de Trabajo

# 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.

Tabla de efectos simples en el estudio de productividad

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
print(tabla_efecto_Herramienta_en_Estrategia)
## # 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
coef(modelo)
##                                                                    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

Para concluir:

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.

6 - Mancova en DBCA

1. Preparación de los Datos

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.

  • Variables Respuesta:
    • ALTURA: altura de la planta (cm).
    • FRUTOS: número de frutos por planta.
  • Bloque:
    • Se consideran 4 bloques (parcelas), que representan las repeticiones.
  • Covariables:
    • HUMEDAD: humedad inicial del suelo (%)
    • PESOINI: peso inicial de la planta (g)

Simulación de los datos

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
# Verificación
summary(datos)
##  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

2. Supuesto de Normalidad Multivariada

Hipótesis:

  • 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.

library(tidyverse)
library(mvnormtest)
library(dplyr)

Desagregamos la base de datos por grupos y ejecutamos el test

datosc=datos
datosc
##    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
mshapiro.test(t(trat2))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.96417, p-value = 0.8413
mshapiro.test(t(trat3))
## 
##  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.

3. Supuesto de Homogeneidad de Matrices Varianza-Covarianza

Hipótesis:

  • 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.

Test de Box’s M-test

library(heplots)
library(biotools)
datosc=datos
str(datosc)
## '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 ...
head(datosc)
##   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
res <- boxM(datosc[, 5:6], datosc[, "Fertilizante"])
res
## 
##  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(res)
## 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
heplots::boxM(cbind(ALTURA, FRUTOS) ~ Fertilizante, data = datosc)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 10.974, df = 6, p-value = 0.08917
boxM(datos[, 5:6], datos[, 1])
## 
##  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.

Test de Ahmad2017

library(covTestR)
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.

Prueba Wrapper

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.

Bartlett test of HOMOGENEITY y Fligner-Killeen test of HOMOGENEITY

Hipótesis para cada uno:

  1. Bartlett’s Test:

    • H₀: Igualdad de las matrices de covarianza.

    • H₁: Diferencia entre al menos una matriz.

  2. 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.

4. Supuesto de Correlación entre Variables Dependientes (Prueba de Bartlett)

Hipótesis:

  • 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).

head(datosc)
##   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
datos1=datosc[, 5:6]
datos1
##      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
library(psych)
#library(rela)
options(scipen=0)
cortest.bartlett(cor(datos1), n = nrow(datos1))
## $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

5. Modelo de MANCOVA en DBCA

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
## 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
modelo = manova(cbind(ALTURA, FRUTOS) ~ 
                  Fertilizante + Bloque + HUMEDAD + PESOINI, data = datos)

6. Extracción de Matrices de Suma de Cuadrados y Evaluación de Varianza Explicada

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²).

# Determinacion de la matriz residual y las matrices factoriales del MANCOVA.
str(modelo)
## 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" ...
Matrices = summary(modelo)$SS
Matrices
## $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
# Variabilidad residual. 
# Matriz suma de cuadrados y productos cruzados del residual (SCOCR)
W
##           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.

7. Pruebas de Hipótesis Específicas del modelo

Para el factor Fertilizante (tu factor principal):

  • 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.

Para el bloque (DBCA):

  • 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.

Para las covariables:

Para HUMEDAD:

  • 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.

Para PESOINI:

  • 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.

summary(modelo, test = "Pillai")
##              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
summary(modelo, test = "Wilks")
##              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
summary(modelo, test = "Hotelling-Lawley")
##              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
summary(modelo, test = "Roy")
##              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
summary.aov(modelo)
##  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

  • Los fertilizantes producen efectos significativamente distintos en las dos variables respuesta consideradas simultáneamente.

Respecto al bloque: p_valores > 0.05 No rechaza la H0

  • El efecto de bloque no fue significativo.

Respecto a HUMEDAD (Humedad, covariable): p_valores > 0.05 No rechaza la H0

  • La humedad inicial del suelo no influye significativamente en las variables respuesta.

Respecto a PESOINI (peso inicial, covariable): p_valores < 0.05 Rechaza la H0

  • El peso inicial de la planta tiene un efecto significativo sobre las variables dependientes, lo que justifica su inclusión como covariable.

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.

7.1 Comparar dos Grupos (F1 vs F3)

modelo1 = manova(cbind(ALTURA, FRUTOS) ~ 
                   Fertilizante + Bloque + HUMEDAD + PESOINI, data = datos,
                 subset = Fertilizante %in% c("F1", "F3"))
summary(modelo1, test = "Pillai")
##              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
summary(modelo1, test = "Wilks")
##              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
summary(modelo1, test = "Hotelling-Lawley")
##              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
summary(modelo1, test = "Roy")
##              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

  • Se observó que existen diferencias significativas en la combinación de ALTURA y FRUTOS, reforzando la evidencia de que el tipo de fertilizante influye en el desempeño de las plantas.

ANOVA univariado (desglose por variable)

La MANCOVA te dice que hay diferencias multivariadas, pero los ANOVA te dicen en qué variable ocurre.

summary.aov(modelo1)
##  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.

7.2 Comparación General por pares

  • 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:

  • El efecto significativo encontrado en la MANCOVA global (para Fertilizante) se debe principalmente a la diferencia entre (F1 y F2), (F1 y F3), y (F2 y F3).

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

CONCLUSIÓN GENERAL:

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.