“Tratamiento matricial”

a.-Vector de medias

b.-Matriz de covarianza

c.-matriz de correlación

d.-Medidas Globales de variabilidad

d.1. varianza total

d.2. varianza media

d.3. varianza generalizada

d.4. varianza efectiva

e.-Distancia de Mahalanobis

AnalisisMultivariado<-function(datos){
  n<-nrow(datos)
  n
  p<-ncol(datos)
  p
  #vector de unos
  vector.uno<-matrix(rep(1,n),ncol=1)
  vector.uno
  
  ## a.- EL VECTOR DE MEDIAS(xprom) = (x'1n)/n
  vector.media<-(t(datos)%*%vector.uno)/n
  vector.media
  
  ## b.- Matriz de covarianza S=1/n(x'*x)-((vector.media)(vector.media)')
  matriz.covarianza<-S<-cov(datos)*(n-1)/n
  matriz.covarianza
  
  #Inversa de la matriz de covarianzas
  SI<-solve(S)
  SI
  
  ##c.-Matriz de Correlación R=D^-1/2*S*D^-1/2
  DN<-diag(c(1/sqrt(diag(S))))
  DN
  matriz.correlacion<-DN%*%S%*%DN
  
  ##d.-Medidas Globales de variabilidad
  
  ##d.1.-Varianza total : VT=traza(S) 
  VT<-sum(diag(S))
  VT
  
  ##d.2.-Varianza media : VM=VT/p
  VM<-VT/p
  VM
  
  ##d.3.- varianza generalizada : VG = det(S)
  VG<-det(S)
  VG
  
  ##d.4.-Varianza efectiva : VE=[det(S)]^1/p
  VE<-(det(S))^(1/p)
  VE
  
  ##e.- Distancia de Mahalanobis
  x<-as.matrix(datos)
  media<-colMeans(datos)
  matriz.media<-matrix(media,nrow = n,ncol=p,byrow = TRUE)
  distm<-((x-matriz.media)%*%SI)%*%t((x-matriz.media))
  
  cat("Tratamiento matricial", "\n" )
  
  cat("----------------------------------------------------------------","\n")
  cat("a.-Vector de media =",vector.media, "\n",
      "b.-Matriz de covarianza =",matriz.covarianza, "\n",
      "c.-Matriz de correlacion=",matriz.correlacion, "\n")
  
  cat("----------------------------------------------------------------","\n")
  cat("d.-Medidas globales de variabilidad","\n", 
      "d.1.- Varianza Total =", VT, "\n",
      "d.2.- Varianza Media =",VM, "\n", 
      "d.3.-Varianza Generalizada=",VG, "\n",
      "d.4.-Varianza Efectiva =",VE, "\n")
  cat("----------------------------------------------------------------","\n")
  cat("e.-Distancia de Mahalanobis",diag(distm),"\n")
  
}

Ejemplo: La siguiente base de datos contiene la información de una muestra de 14 cereales listos para consumo

cereal<-matrix(c(38,1,100,2,34,1,120,2,21,1.5,110,12,23,1.5,110,9,23,1.5,110,8,51,2,180,17,28,2,220,2,28,1.5,140,2,27,1.3,130,8,28,1.25,130,8,19,1.25,110,6,23,1.2,100,3,24,1.5,150,5,16,1.2,100,3),byrow =TRUE,nrow = 14)
cereal
##       [,1] [,2] [,3] [,4]
##  [1,]   38 1.00  100    2
##  [2,]   34 1.00  120    2
##  [3,]   21 1.50  110   12
##  [4,]   23 1.50  110    9
##  [5,]   23 1.50  110    8
##  [6,]   51 2.00  180   17
##  [7,]   28 2.00  220    2
##  [8,]   28 1.50  140    2
##  [9,]   27 1.30  130    8
## [10,]   28 1.25  130    8
## [11,]   19 1.25  110    6
## [12,]   23 1.20  100    3
## [13,]   24 1.50  150    5
## [14,]   16 1.20  100    3
AnalisisMultivariado(cereal)
## Tratamiento matricial 
## ---------------------------------------------------------------- 
## a.-Vector de media = 27.35714 1.407143 129.2857 6.214286 
##  b.-Matriz de covarianza = 73.22959 0.7295918 123.8265 12.63776 0.7295918 0.08744898 8.005102 0.619898 123.8265 8.005102 1106.633 18.0102 12.63776 0.619898 18.0102 18.59694 
##  c.-Matriz de correlacion= 1 0.2883097 0.4349794 0.3424569 0.2883097 1 0.8137439 0.4860961 0.4349794 0.8137439 1 0.1255441 0.3424569 0.4860961 0.1255441 1 
## ---------------------------------------------------------------- 
## d.-Medidas globales de variabilidad 
##  d.1.- Varianza Total = 1198.547 
##  d.2.- Varianza Media = 299.6367 
##  d.3.-Varianza Generalizada= 13617.42 
##  d.4.-Varianza Efectiva = 10.80248 
## ---------------------------------------------------------------- 
## e.-Distancia de Mahalanobis 6.535034 4.568847 3.495424 2.21943 2.513294 10.84709 10.03363 3.001701 2.559174 3.791498 1.497059 1.724615 1.19491 2.01829

“Test de normalidad multivariada”

a.-Asimetria Multivariada

b.-Kurtosis Multivariada

c.-Test de mardia:

c.1.-TAM(asimetria): muestras grandes y muestras pequeñas

c.2.-TKM(Kurtosis)

TestdeNormalidadMultivariado<-function(datos){
  n<-nrow(datos)
  k<-ncol(datos)
  
  x<-as.matrix(datos)
  media<-colMeans(datos) 
  matriz.media<-matrix(media,nrow=n,ncol=k,byrow=TRUE)
  
  S<-cov(datos)*(n-1)/n #Matriz de covarianzas
  SI<-solve(S)   #Inversa de la matriz de covarianzas
  
  distm<-((x-matriz.media)%*%SI)%*%t((x-matriz.media)) #Distancia de Mahalanobis
  
  gl<-k*(k+1)*(k+2)/6
  
  # Medida de Asimetría Multivariada
  AMp<-sum(distm^3)/n^2
  
  if (n<30){
    # Test Multivariado de Asimetría de Mardia - "Muestras Pequeñas"
    c<-(n+1)*(n+3)*(k+1)/(n*((n+1)*(k+1)-6))
    TAM<-n*c/6*AMp           
    valor_p1<-pchisq(TAM,gl,lower.tail = FALSE)
  } else { 
    # Test Multivariado de Asimetríia de Mardia - "Muestras grandes"
    TAM<-n/6*AMp           
    valor_p1<-pchisq(TAM,gl,lower.tail = FALSE)
  }
  
  #Medida de Kurtosis Multivariado
  KMp<-sum((diag(distm))^2)/n
  
  #Test Multivariado de Kurtosis de Mardia
  TKM<-(KMp-k*(k+2))*sqrt(n/(8*k*(k+2)))
  TKM2<-TKM^2
  valor_p2<-pchisq(TKM2,1,lower.tail = FALSE)
  
  if (valor_p1<0.05){
    test1 <- "No Normalidad multivariado"
  } else {
    test1 <- "Normalidad multivariado "
  }    
  
  if (valor_p2<0.05){
    test2 <- "No Normalidad multivariado"
  } else {
    test2 <- "Normalidad multivariado"
  } 
  df<-data.frame(Prueba=c("Prueba de Asimetría","Prueba de Curtosis "),Medida=c(AMp,KMp),Test_Mardia=c(TAM,TKM2),valor_p=c(valor_p1,valor_p2),Conclusión=c(test1,test2))
  df
}

Ejemplo: Evaluamos la normalidad de las variables en conjunto de la base de datos “Cereal”

TestdeNormalidadMultivariado(cereal)
##                Prueba   Medida Test_Mardia     valor_p
## 1 Prueba de Asimetría 12.68187 39.05648611 0.006560378
## 2 Prueba de Curtosis  24.71618  0.03740018 0.846652566
##                   Conclusión
## 1 No Normalidad multivariado
## 2    Normalidad multivariado