Caso aplicado para la materia de Investigación de mercados II.
Al data frame importado se le dará el nombre de “datos”.
library(foreign)
#importar archivo de SPSS
datos<- read.spss("C:/Users/LENOVO/Desktop/INV2/mermeladas.sav")
## re-encoding from UTF-8
datos<- as.data.frame(datos)
View(datos) #permite visualizar el data frame llamado "datos"
attach(datos) #atajo de variables
Para poder realizar análisis multivariado, es necesario que exista normalidad multivariante, por eso, es muy importante identificar si las variables métricas siguen o no dicha distribución normal multivariante. En caso de que se detecte outliers, el investigador tiene la tarea de corregirlos (si fuese un error de “dedo” en la base de datos), eliminarlos o mantenerlos en el data frame (si él considera que sí es necesario mantener los outliers en la muestra).
Las hipótesis estadísticas son las siguientes:
H0: Existe normalidad multivariante (no existen outliers multivariantes)
H1: No existe normalidad multivariante (existen outliers multivariantes)
Se trabaja con un nivel de confianza del 95%, lo que implica que alfa es igual al 5% (0,05). Para realizar el test se utilizará la librería “MVN”.
library(MVN)
## Warning: package 'MVN' was built under R version 3.6.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## sROC 0.1-2 loaded
mvn(datos[,(5:7)],multivariateOutlierMethod = "quan") #las variables métricas están desde la columna 5 a la 7 en el data frame,
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 123.687331260846 9.01873442434219e-22 NO
## 2 Mardia Kurtosis 8.35610841426556 0 NO
## 3 MVN <NA> <NA> NO
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Shapiro-Wilk precio 0.2546 <0.001 NO
## 2 Shapiro-Wilk cantidad_consumida 0.4121 <0.001 NO
## 3 Shapiro-Wilk calificación 0.8682 0.0135 NO
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew
## precio 19 43.289474 98.497224 21 18 450 20 22.0 3.6938224
## cantidad_consumida 19 4.736842 4.507304 4 2 23 3 4.5 3.4670521
## calificación 19 3.736842 1.240166 4 1 5 3 5.0 -0.5186968
## Kurtosis
## precio 12.3026941
## cantidad_consumida 11.2022415
## calificación -0.9169999
datos<- datos[-c(6),]
datos<- datos[-c(13),]
Para hacer análisis multivariante es necesario que no existan datos perdidos en el data frame, en caso de que hubiesen, es necesario imputarlos (sustitutirlos). Antes de imputar, es necesario aplicar las “pruebas de normalidad” univariantes, esto con el fin de detectar si una variable métricas sigue o no sigue una distribución normal. Las hipótesis estadísticas son:
H0: variable normal
H1: variable no normal
Se trabaja con 95% de confianza, por lo que alfa es 0,05. Aplique el siguiente comando, donde encontrará un resumen de la normalidad (es el mismo comando aplicado en el ejercicio 2) y de los estadísticos descriptivos:
mvn(datos[,(5:7)])
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 7.75652728893585 0.652605274111758 YES
## 2 Mardia Kurtosis -0.334621000868433 0.737911000919159 YES
## 3 MVN <NA> <NA> YES
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Shapiro-Wilk precio 0.9525 0.4969 YES
## 2 Shapiro-Wilk cantidad_consumida 0.8780 0.0295 NO
## 3 Shapiro-Wilk calificación 0.8754 0.0268 NO
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew
## precio 17 20.735294 1.3004524 21 18 23 20 22 -0.32956556
## cantidad_consumida 17 3.764706 0.9034249 4 2 5 3 4 -0.04471901
## calificación 17 3.705882 1.2631660 4 1 5 3 5 -0.52655413
## Kurtosis
## precio -0.7056058
## cantidad_consumida -1.1383257
## calificación -0.9575732
La variable “cantidad_consumida” y “calificacion” no es normal (su p value es menor a alfa) y el “precio” sí son normales (sus p values son mayores a alfa). > Variable normal: imputar con la media aritmética muestral
Variable no normal: imputar con la mediana muestral
Revisando los resultados del comando anterior (el comando donde se midió la normalidad), podemos ver lo siguiente:
Media aritmética del precio es= 20,74 Bs.
Media aritmética de la calificación de mermelada es= 3,71 puntos
Mediana de la cantidad consumida= 4 mermeladas
colSums(is.na(datos))
## id sexo estudios promo_favorita
## 0 1 2 1
## precio cantidad_consumida calificación
## 1 0 1
Se aprecia que cada variable métrica, en este caso, tiene 1 dato perdido.
Para imputar los valores perdidos (NA`s) de las variables con distribución normal a través de su media aritmética se procede de la siguiente manera:
#Imputar con la media aritmética
datos$precio[is.na(datos$precio)]<- mean(na.omit(datos$precio))
Para imputar los valores perdidos (NA`s) en variables métricas con distribución no normal a través de su mediana, utilice el comando:
#Imputar con la mediana
datos$cantidad_consumida[is.na(datos$cantidad_consumida)]<- mean(na.omit(datos$cantidad_consumida))
datos$calificación[is.na(datos$calificación)]<- mean(na.omit(datos$calificación))
colSums(is.na(datos))
## id sexo estudios promo_favorita
## 0 1 2 1
## precio cantidad_consumida calificación
## 0 0 0
La variable “sexo” tiene 1 valor perdido, los “estudios” tiene 2 valores perdidos y la “promo_favorita” tiene 1 valor perdido .
summary(sexo)
## femenino masculino NA's
## 12 8 1
summary(estudios)
## bachiller licenciado especialista otro NA's
## 9 3 3 4 2
summary(promo_favorita)
## viajes descuentos 2x1 NA's
## 11 5 4 1
La moda del sexo es “femenino”; la moda de los estudios es “bachiller” y la moda de la promo_favorita es “viajes”. Por lo que se procederá a imputar los datos perdidos.
imputarmoda<- function(x) {imputarx <- unique(x)
imputarx[which.max(tabulate(match(x, imputarx)))]}
Ahora, imputar los datos perdidos en sus variables categóricas de la siguiente manera:
#Imputación de valores perdidos en variables categóricas
datos$sexo[is.na(datos$sexo)]<- imputarmoda(na.omit(datos$sexo))
datos$estudios[is.na(datos$estudios)]<- imputarmoda(na.omit(datos$estudios))
datos$promo_favorita[is.na(datos$promo_favorita)]<- imputarmoda(na.omit(datos$promo_favorita))
Finalizado el proceso de imputación, ejecute nuevamente el siguiente comando:
colSums(is.na(datos))
## id sexo estudios promo_favorita
## 0 0 0 0
## precio cantidad_consumida calificación
## 0 0 0
Listo!! Ya no existen datos perdidos. ### Solución ejercicio 5: Exportar el “data frame limpio” en formato SPSS
La nueva base de datos (data frame) que hemos trabajado, es decir, la base de datos sin outliers ni valores perdidos, que ahora llamamos data frame “limpio”, es necesario exportarla en formato SPSS (.sav) para poder hacer análisis multivariantes en futuras oportunidades y tener un archivo con los resultados generados.
#Utilizamos la librería "haven"
library(haven)
## Warning: package 'haven' was built under R version 3.6.3
write_sav(datos, "C:/Users/LENOVO/Desktop/INV2/datos_limpios.sav" )
Puedes obtener todos los estadísticos descriptivos básicos utilizando el siguiente código:
summary(datos)
## id sexo estudios promo_favorita
## Min. : 1.00 femenino :11 bachiller :11 viajes :11
## 1st Qu.: 6.00 masculino: 8 licenciado : 2 descuentos: 4
## Median :11.00 especialista: 3 2x1 : 4
## Mean :11.11 otro : 3
## 3rd Qu.:16.50
## Max. :21.00
## precio cantidad_consumida calificación
## Min. :18.00 Min. :2.000 Min. :1.000
## 1st Qu.:20.00 1st Qu.:3.000 1st Qu.:3.000
## Median :21.00 Median :4.000 Median :4.000
## Mean :20.69 Mean :3.737 Mean :3.778
## 3rd Qu.:21.50 3rd Qu.:4.000 3rd Qu.:5.000
## Max. :23.00 Max. :5.000 Max. :5.000
Se muestra las frecuencias de las variables categóricas y en el caso de las variables métricas, un resumen de los estadísticos básicos. Se puede mostrar el precio minimo que podrian pagar es de 18 bs. y lo maximo que podrian pagar es de 23 bs., que en promedio los encuestados consumirian por lo menos 4 mermeladas y por lo tanto su calificacion promedio tambien de 4 puntos.