DESARROLLO PUNTO 1

El conjunto de datos iris, es una base de datos clásica y ampliamente utilizada en el campo del análisis estadístico multivariado. Esta base fue introducida por el estad´ıstico y bi´ologo Ronald A. Fisher en 1936, y contiene informaci´on morfol´ogica de flores de tres especies del g´enero Iris: setosa, versicolor y virginica. El conjunto de datos consta de 150 observaciones, donde cada observación representa una flor individual. Las flores han sido medidas con respecto a cuatro variables numéricas que describen dimensiones de sus partes morfológicas (sépalos y pétalos), y una variable categórica que indica la especie a la que pertenece la flor. Las variables incluidas son:

a) Calcular el vector de medias de las variables numéricas. ¿Qué nos indican estas medias?

#Paquetes ---------------------------------------------------
#install.packages("pacman")
library(pacman)
## Warning: package 'pacman' was built under R version 4.4.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
p_load("datasets","DT", "fdth")

#load data--------------------------------------------------
data("iris")
data_num = iris[,-ncol(iris)]

X_bar = colMeans(data_num)
X_bar
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333

El vector de medias nos muestra que la media de la longitud del sépalo es de 5.844cm, la media del ancho del sépalo es de 3.058cm, la media de la longitud del pétalo es de 3.758cm y la media del ancho del pétalo es de 1.1993cm.

b) Calcular la matriz de varianzas y covarianzas del conjunto de datos. ¿Qué pares de variables presentan mayor covarianza? ¿Qué nos dice esto sobre la relaci´on lineal entre ellas?

S = cov(data_num)
S
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    0.6856935  -0.0424340    1.2743154   0.5162707
## Sepal.Width    -0.0424340   0.1899794   -0.3296564  -0.1216394
## Petal.Length    1.2743154  -0.3296564    3.1162779   1.2956094
## Petal.Width     0.5162707  -0.1216394    1.2956094   0.5810063

Tenemos una covarianza alta entre las variables ancho del pétalo y la longitud del pétalo con 1.29 lo que indica una relación lineal directa, alta y positiva, también entre longitud del sépalo y longitud del pétalo con 1.274 lo que indica una relación lineal directa, alta y positiva. Entre las otras variables las relaciones no son tan significativas.

c) Calcular la matriz de correlaciones entre las variables. ¿Hay variables altamente correlacionadas positiva o negativamente?

R = cor(data_num)
R
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
## Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
## Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
## Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

La primera correlación que llama la atención es entre las variables longitud de pétalo y ancho de pétalo, con una correlación alta y positiva de 0.96, también hay una alta correlación positiva entre las variables longitud de pétalo y longitud de sépalo con 0.87, para las variables ancho de petalo y longitud de sépalo hay una correlación alta positiva de 0.817. Hay otros pares de variables que muestran una correlación negativa, sin embargo,no tienen una fuerte correlación, por ejemplo, las variables longitud de pétalo y ancho de sépalo tienen una correlación de -0.428 lo que indica una poca correlación.

d) Calcular la distancia de Mahalanobis de cada observación al centroide (vector de medias) del conjunto de datos? ¿Qué observación está más alejada del centroide? ¿Cuál está más cercana? ¿Qué puede indicar esta distancia sobre las caracter´ısticas morfológicas de esa flor? Nota: Consulte una función en R que permita encontrar el valor máximo y mínimo de un vector.

#PUNTO D - Distancia de Mahalanobis

# Paquetes
library(pacman)
p_load("datasets","DT", "fdth")

# Datos
data("iris")
dim(iris)
## [1] 150   5
datatable(iris)
# Usar solo variables numéricas
datos_iris <- iris[ , 1:4]

# Calcular vector de medias
vector_medias = colMeans(datos_iris)
vector_medias
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333
# Matriz de varianzas y covarianzas
S = cov(datos_iris)
S
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    0.6856935  -0.0424340    1.2743154   0.5162707
## Sepal.Width    -0.0424340   0.1899794   -0.3296564  -0.1216394
## Petal.Length    1.2743154  -0.3296564    3.1162779   1.2956094
## Petal.Width     0.5162707  -0.1216394    1.2956094   0.5810063
# Centroide
center = vector_medias

# Matriz de covarianza
S = cov(datos_iris)

# Distancias al centroide
D2 <- mahalanobis(
  x = datos_iris,
  center = center,
  cov = S
)
D <- sqrt(D2)

# Tabla con resultados
tabla_resultados <- data.frame(
  Observacion = 1:nrow(datos_iris),
  D2_Mahalanobis = D2,
  D_Mahalanobis = D
)

MaxD = max(D)
MinD = min(D)
MinD
## [1] 0.5652194
MaxD
## [1] 3.619543
# Observación más lejana y más cercana
obs_max <- which.max(D)
obs_min <- which.min(D)

list( 
  tabla = tabla_resultados,
  obs_mas_lejana = obs_max,
  obs_mas_cercana = obs_min
)
## $tabla
##     Observacion D2_Mahalanobis D_Mahalanobis
## 1             1      2.1344679     1.4609818
## 2             2      2.8491187     1.6879333
## 3             3      2.0813387     1.4426845
## 4             4      2.4523816     1.5660082
## 5             5      2.4621545     1.5691254
## 6             6      3.8834177     1.9706389
## 7             7      2.8621081     1.6917766
## 8             8      1.8333003     1.3539942
## 9             9      3.3840731     1.8395850
## 10           10      2.3752179     1.5411742
## 11           11      3.2831069     1.8119346
## 12           12      2.7747975     1.6657723
## 13           13      2.6132975     1.6165697
## 14           14      3.6034324     1.8982709
## 15           15      8.7375184     2.9559294
## 16           16      9.7127899     3.1165349
## 17           17      5.7605877     2.4001224
## 18           18      2.3213894     1.5236107
## 19           19      4.4996899     2.1212473
## 20           20      3.4388658     1.8544179
## 21           21      2.6360071     1.6235785
## 22           22      2.9292496     1.7115051
## 23           23      3.6134114     1.9008975
## 24           24      2.2371731     1.4957182
## 25           25      5.3023607     2.3026855
## 26           26      2.4453103     1.5637488
## 27           27      1.7658286     1.3288448
## 28           28      2.1971806     1.4822890
## 29           29      2.5027712     1.5820149
## 30           30      2.4643980     1.5698401
## 31           31      1.9849638     1.4088874
## 32           32      4.5911380     2.1426941
## 33           33      8.3583413     2.8910796
## 34           34      7.2213139     2.6872503
## 35           35      1.9820679     1.4078593
## 36           36      3.4173031     1.8485949
## 37           37      5.3372175     2.3102419
## 38           38      3.4513350     1.8577769
## 39           39      3.1549793     1.7762261
## 40           40      1.8926197     1.3757251
## 41           41      2.5485013     1.5964026
## 42           42     11.4240288     3.3799451
## 43           43      3.3144697     1.8205685
## 44           44      3.7085855     1.9257688
## 45           45      4.4840560     2.1175590
## 46           46      2.9786602     1.7258795
## 47           47      4.4333077     2.1055421
## 48           48      2.3594309     1.5360439
## 49           49      3.0076970     1.7342713
## 50           50      1.9285641     1.3887275
## 51           51      4.4528311     2.1101732
## 52           52      0.6273996     0.7920856
## 53           53      3.0186280     1.7374199
## 54           54      3.6125278     1.9006651
## 55           55      2.0404590     1.4284464
## 56           56      3.3195858     1.8219731
## 57           57      1.2763441     1.1297540
## 58           58      4.3093305     2.0758927
## 59           59      2.7426578     1.6560972
## 60           60      3.1665229     1.7794727
## 61           61      7.6832930     2.7718754
## 62           62      0.4323176     0.6575086
## 63           63      7.5614023     2.7498004
## 64           64      1.5482870     1.2443018
## 65           65      1.0372548     1.0184571
## 66           66      2.7865631     1.6693002
## 67           67      3.4732716     1.8636715
## 68           68      3.3289796     1.8245492
## 69           69      7.3923779     2.7188928
## 70           70      2.1837666     1.4777573
## 71           71      3.2615033     1.8059633
## 72           72      1.3601100     1.1662376
## 73           73      2.3885294     1.5454868
## 74           74      4.5073307     2.1230475
## 75           75      1.6095193     1.2686683
## 76           76      2.3362612     1.5284833
## 77           77      4.1982905     2.0489730
## 78           78      1.4219664     1.1924623
## 79           79      0.3194730     0.5652194
## 80           80      2.1112223     1.4530046
## 81           81      2.8147732     1.6777286
## 82           82      3.1338323     1.7702633
## 83           83      0.8579871     0.9262759
## 84           84      2.5178289     1.5867668
## 85           85      6.2164814     2.4932873
## 86           86      2.7910313     1.6706380
## 87           87      1.7971852     1.3405914
## 88           88      6.5544318     2.5601625
## 89           89      1.6677135     1.2913998
## 90           90      2.0056841     1.4162218
## 91           91      4.9630348     2.2277870
## 92           92      1.1821941     1.0872875
## 93           93      1.3713881     1.1710628
## 94           94      4.5698858     2.1377291
## 95           95      1.4932609     1.2219905
## 96           96      2.6869276     1.6391851
## 97           97      1.1870542     1.0895202
## 98           98      0.6575354     0.8108856
## 99           99      4.8207427     2.1956190
## 100         100      0.6341019     0.7963052
## 101         101      8.9395988     2.9899162
## 102         102      2.9682833     1.7228707
## 103         103      2.4451456     1.5636961
## 104         104      3.5551146     1.8855012
## 105         105      2.3541837     1.5343349
## 106         106      6.0617111     2.4620543
## 107         107     10.1378044     3.1839919
## 108         108      7.5880086     2.7546340
## 109         109      3.3301655     1.8248741
## 110         110      7.3453376     2.7102283
## 111         111      2.2611037     1.5036967
## 112         112      1.2342978     1.1109896
## 113         113      2.4316524     1.5593757
## 114         114      4.7588845     2.1814868
## 115         115     11.4105735     3.3779540
## 116         116      5.8815414     2.4251889
## 117         117      1.9743869     1.4051288
## 118         118     12.8130732     3.5795353
## 119         119      7.1768159     2.6789580
## 120         120      4.3974981     2.0970212
## 121         121      4.0399248     2.0099564
## 122         122      5.3595987     2.3150807
## 123         123      8.7973122     2.9660263
## 124         124      1.7967966     1.3404464
## 125         125      2.8868280     1.6990668
## 126         126      5.8835660     2.4256063
## 127         127      1.4473698     1.2030668
## 128         128      1.1348285     1.0652833
## 129         129      1.6688603     1.2918438
## 130         130      7.0710485     2.6591443
## 131         131      5.6935238     2.3861106
## 132         132     13.1010925     3.6195431
## 133         133      2.5441171     1.5950289
## 134         134      2.4087367     1.5520105
## 135         135     12.8803310     3.5889178
## 136         136      9.6569355     3.1075610
## 137         137      8.2028004     2.8640531
## 138         138      3.2575803     1.8048768
## 139         139      1.4687445     1.2119177
## 140         140      3.4924068     1.8687982
## 141         141      5.9713581     2.4436362
## 142         142     12.4413843     3.5272346
## 143         143      2.9682833     1.7228707
## 144         144      3.1069367     1.7626505
## 145         145      7.4592052     2.7311546
## 146         146      9.0639497     3.0106394
## 147         147      4.0366487     2.0091413
## 148         148      1.7670035     1.3292868
## 149         149      7.6824724     2.7717273
## 150         150      3.4787688     1.8651458
## 
## $obs_mas_lejana
## [1] 132
## 
## $obs_mas_cercana
## [1] 79

- Si la distancia es pequeña (como la observación más cercana con 𝐷≈0.565), significa que sus medidas de sépalo y pétalo son muy parecidas al promedio del conjunto. Morfológicamente, es una flor representativa o típica de la base de datos.

- Si la distancia es grande (como la observación más lejana con 𝐷≈3.62), significa que sus medidas se alejan considerablemente del promedio, ya sea porque una o varias dimensiones son extremas o porque la combinación de valores es poco común según la correlación entre variables. En términos morfológicos, esta flor podría ser atípica dentro de la muestra: más grande, más pequeña o con proporciones inusuales en sus sépalos y pétalos respecto al resto.

e) Usando la matriz de varianzas-covarianzas conjunta (matriz Sp de varianzas agrupadas) entre dos grupos espec´ıficos (Grupo 1: setosa y Grupo 2: versicolor), calcula la distancia de Mahalanobis de cada flor del grupo setosa al centroide del grupo versicolor. ¿Qué observación del grupo setosa es la m´as cercana al grupo versicolor desde una perspectiva multivariada? ¿Qué interpretación puedes dar sobre esa flor respecto a su similitud con la otra especie?

#obtenemos el vector de medias de versicolor
versi_data = subset(iris, Species == "versicolor")
versi_means = colMeans(versi_data[, 1:4])
versi_cov = cov(versi_data[,1:4])
versi_means
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        5.936        2.770        4.260        1.326
versi_cov
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length   0.26643265  0.08518367   0.18289796  0.05577959
## Sepal.Width    0.08518367  0.09846939   0.08265306  0.04120408
## Petal.Length   0.18289796  0.08265306   0.22081633  0.07310204
## Petal.Width    0.05577959  0.04120408   0.07310204  0.03910612
#filtramos todas las flores de setosa
setosa_data =subset(iris, Species == "setosa")
setosa_cov = cov(setosa_data[,1:4])
#calculo de Sp
Sp = 1/100 *((50-1)*versi_cov%*%versi_cov + (50-1)*setosa_cov%*%setosa_cov)
Sp
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length   0.06882616 0.036931494   0.05095208 0.017808086
## Sepal.Width    0.03693149 0.027535900   0.02386044 0.009308795
## Petal.Length   0.05095208 0.023860437   0.04691147 0.016236963
## Petal.Width    0.01780809 0.009308795   0.01623696 0.005897490
#calculo de mahalanobis
mahalanobis(setosa_data[,1:4], versi_means, Sp)
##         1         2         3         4         5         6         7         8 
##  881.1417  670.9860  695.7109  801.3218  947.3688  730.8127  623.2432  913.1748 
##         9        10        11        12        13        14        15        16 
##  642.5454 1126.8588 1049.0044 1066.6295  969.1349  768.8631 1080.3440  915.3797 
##        17        18        19        20        21        22        23        24 
##  750.1978  659.4720  927.2403  834.0607 1061.3033  602.0438  765.0304  429.3617 
##        25        26        27        28        29        30        31        32 
## 1555.7082  790.9863  506.9971  949.5367  834.9411  949.7247  863.0935  612.0492 
##        33        34        35        36        37        38        39        40 
## 1903.0334 1279.7040  765.0697  694.4545  879.0641 1370.3049  625.2200  902.4936 
##        41        42        43        44        45        46        47        48 
##  641.7333  457.1020  727.6233  539.8206  864.3553  498.5776 1294.4900  771.0164 
##        49        50 
## 1058.2827  787.9744

La observación que tiene la menor distancia es la observación 24, con un valor de aproximadamente 429.3627. Esto indica que desde un punto de vista multivariado, esta flor presenta características morfológicas más similares a las del grupo versicolor que el resto de flores setosa. Podriamos decir que tiene medidas intermedias entre lo típico de setosa y versicolor o podría representar un caso atípico dentro de setosa, o un ejemplo de traslape morfológico entre ambas especies.

DESARROLLO PUNTO 2

You can also embed plots, for example:

Dada la matriz de datos X, donde cada fila representa una observación y cada columna una variableS

a) Grafique el diagrama de dispersión en p = 2 dimensiones. Localice la media de la muestra en el diagrama.

# PUNTO A - DIAGRAMA DE DISPERSION
#Datos
X <- matrix(c(2,5,
              4,3,
              6,7),
            ncol=2, byrow = TRUE)

#Colocar nombre a las columnas
colnames(X) <- c("Variable1", "Variable2")

#Calcular la media mustral por columnas
media_muestral <- colMeans(X)

# Graficar el diagrama de dispersión
plot(X[,1], X[,2], 
     xlab = "Variable 1", 
     ylab = "Variable 2", 
     main = "Diagrama de dispersión con media muestral",
     pch = 19, col = "blue", xlim = c(0,8), ylim = c(0,8))

# Agregar el punto de la media en rojo
points(media_muestral[1], media_muestral[2], 
       col = "red", pch = 19, cex = 1.5)

# Agregar etiqueta para la media
text(media_muestral[1], media_muestral[2] + 0.3, 
     labels = "Media", col = "red")

Los puntos están cntrados alrededor de la media, indica baja variabilidad conjunta.

En el plano dimensiones, cada punto representa una observación . La media muestral aparece como un punto central alrededor del cual se distribuyen los datos.

b) Dibuje la representación con n = 3 observaciones en el espacio de datos y trace los vectores de desviación y1 = x1 − x¯ · 1, y2 = x2 − x¯ · 1.

# PUNTO B - REPRESENTACION CON n = 3 OBERVACIONES
# Matriz de medias repetida
medias_repetidas <- matrix(rep(media_muestral, each = nrow(X)), 
                           nrow = nrow(X))

# Vectores de desviación
Y <- X - medias_repetidas

# Graficar puntos y media
plot(X[,1], X[,2], 
     xlab = "Variable 1", 
     ylab = "Variable 2", 
     main = "Vectores de desviación desde la media",
     pch = 19, col = "blue", xlim = c(0,8), ylim = c(0,8))
points(media_muestral[1], media_muestral[2], 
       col = "red", pch = 19, cex = 1.5)
text(media_muestral[1], media_muestral[2] + 0.3, 
     labels = "Media", col = "red")

# Trazar los vectores de desviación
arrows(x0 = media_muestral[1], y0 = media_muestral[2],
       x1 = X[,1], y1 = X[,2],
       length = 0.1, col = "darkgreen", lwd = 2)

# Mostrar resultados en consola
Y
##      Variable1 Variable2
## [1,]        -2         0
## [2,]         0        -2
## [3,]         2         2

Se evidencia la ortogonalidad entre Y1 y Y2 generando un angulo de 90 grados entre los dos vectores.

Estos vectores muestran, para cada observación, cuánto se aleja de la media en cada variable.

Interpretación: si los vectores son grandes, hay mucha variabilidad respecto a la media; si son pequeños, los datos son homogéneos. En el gráfico, estas desviaciones se ven como flechas desde la media hacia cada punto.

c) Dibuje los vectores de desviación obtenidos en (b) que parten desde el origen. Calcule las longitudes de estos vectores y el coseno del ángulo entre ellos. Relacione estas cantidades con la matriz de covarianzas S y la matriz de correlaciones R.

# PUNTO C - LONGITUDES, COSENO DEL ANGULO, MATRIZ COVARIANZAS Y CORRELACIONES
#Matriz de desviaciones
Y <- X - medias_repetidas

#Longitudes de cada vector-obs (desde el origen)
longitudes <- apply(Y, 1, function(v) sqrt(sum(v^2)))

#Cosenos entre pares de vectores-obs
cos12 <- sum(Y[1,] * Y[2,]) / (longitudes[1] * longitudes[2])
cos13 <- sum(Y[1,] * Y[3,]) / (longitudes[1] * longitudes[3])
cos23 <- sum(Y[2,] * Y[3,]) / (longitudes[2] * longitudes[3])

#Matriz de covarianzas y de correlaciones
S <- cov(X)
R <- cor(X)

#Mostrar resultados
Y
##      Variable1 Variable2
## [1,]        -2         0
## [2,]         0        -2
## [3,]         2         2
longitudes
## [1] 2.000000 2.000000 2.828427
cos12; cos13; cos23
## [1] 0
## [1] -0.7071068
## [1] -0.7071068
S
##           Variable1 Variable2
## Variable1         4         2
## Variable2         2         4
R
##           Variable1 Variable2
## Variable1       1.0       0.5
## Variable2       0.5       1.0
#Gráfica con vectores desde el origen
plot(c(0, Y[,1]), c(0, Y[,2]), type = "n",
     xlab = "Variable 1 centrada", ylab = "Variable 2 centrada",
     xlim = c(-3, 3), ylim = c(-3, 3),
     main = "Vectores de desviación desde el origen")
arrows(0, 0, Y[,1], Y[,2], col = c("blue","green","purple"),
       length = 0.1, lwd = 2)
text(Y[,1], Y[,2], labels = paste0("y",1:3), pos = 3)
abline(h = 0, v = 0, col = "gray", lty = 2)

Cuando trasladamos los vectores de desviación al origen, podemos calcular:

Longitudes → son las distancias euclidianas de las desviaciones; se relacionan con la varianza de cada variable (diagonal de ).

Coseno del ángulo entre vectores → equivale al coeficiente de correlación entre las dos variables (elementos fuera de la diagonal en ).

Interpretación:

Si el coseno ≈ 1, las variables están fuertemente correlacionadas positivamente.

Si es ≈ 0, no hay correlación.

Si es ≈ -1, están correlacionadas negativamente.

d) Calcule la varianza muestral generalizada, es decir, el determinante de la matriz de covarianzas: |S|. Interprete el resultado.

# PUNTO D - CALCULO VARIANZA MUESTRAL GENERALIZADA (DETERMINANTE DE Sn)
# Matriz de covarianzas muestral
S <- cov(X)

# Determinante (varianza generalizada)
det_S <- det(S)

# Autovalores
eigs <- eigen(S)$values

S
##           Variable1 Variable2
## Variable1         4         2
## Variable2         2         4
det_S
## [1] 12
eigs
## [1] 6 2

e) Calcule la varianza total. ¿cuál variable que contribuye más a la varianza total? Calcule el porcentaje de participación de esta variable?

var_total = sum(diag(S))
participacion = diag(S) / var_total * 100
S; var_total; participacion
##           Variable1 Variable2
## Variable1         4         2
## Variable2         2         4
## [1] 8
## Variable1 Variable2 
##        50        50

La variable con mayor varianza contribuye más a la dispersión total del conjunto. En este caso ambas variables contribuyen por igual on un porcentaje de 50% para cada una.