dat = read.table("cuerpo.txt",header=T)
library(corrplot)
## corrplot 0.90 loaded
library(car)
## Loading required package: carData
names(dat) #miramos como están ordenadas las variables
## [1] "A_hombros" "A_pelvis" "A_cade" "AP_pecho" "AD_pecho" "A_codo"
## [7] "A_muneca" "A_rodilla" "A_tobillo" "C_hombros" "C_pecho" "C_cintura"
## [13] "C_abdomen" "C_cadera" "C_muslo" "C_biceps" "C_brazo" "C_rodilla"
## [19] "C_gemelo" "C_tobillo" "C_muneca" "edad" "peso" "altura"
## [25] "sexo"
#las que nos interesan son las columnas 10 a 21
#y a parte vamos a separar hombres y mujeres
#NOTA IMPORTANTE: la variable C_brazo en realidad se refiere a la medida del antebrazo, extendido, palma arriba, lo pone en el documento adjunto donde se nos describe con exactitud en qué parte del cuerpo se toman las medidas.
datmuj= dat[dat$sexo == 0,10:21] #mujeres
dathom= dat[dat$sexo == 1,10:21] #hombres
dat$sexo=factor(dat$sexo,labels=c("F","M"))
Para las 12 variables anteriores calcula la matriz de correlaciones utilizando solo los datos de mujeres. Comprueba con los gráficos de dispersión si las relaciones son lineales. Indica las tres correlaciones más altas (entre qué variables se producen). Indican las tres correlaciones más bajas (entre que variables se producen).
r1=cor(datmuj)
print(r1,digits=4)
## C_hombros C_pecho C_cintura C_abdomen C_cadera C_muslo C_biceps
## C_hombros 1.0000 0.8274 0.7258 0.6134 0.6790 0.6298 0.7441
## C_pecho 0.8274 1.0000 0.8592 0.7663 0.7440 0.6753 0.8157
## C_cintura 0.7258 0.8592 1.0000 0.8352 0.8121 0.7278 0.7973
## C_abdomen 0.6134 0.7663 0.8352 1.0000 0.8301 0.7010 0.7508
## C_cadera 0.6790 0.7440 0.8121 0.8301 1.0000 0.9043 0.7679
## C_muslo 0.6298 0.6753 0.7278 0.7010 0.9043 1.0000 0.7492
## C_biceps 0.7441 0.8157 0.7973 0.7508 0.7679 0.7492 1.0000
## C_brazo 0.7472 0.7674 0.7078 0.6396 0.7467 0.7257 0.8682
## C_rodilla 0.6474 0.6204 0.6310 0.6128 0.7622 0.7639 0.6803
## C_gemelo 0.6324 0.5762 0.5765 0.5205 0.6929 0.7293 0.6660
## C_tobillo 0.5551 0.5150 0.4874 0.4870 0.6016 0.5823 0.5705
## C_muneca 0.6587 0.6396 0.5452 0.4934 0.6193 0.5673 0.6831
## C_brazo C_rodilla C_gemelo C_tobillo C_muneca
## C_hombros 0.7472 0.6474 0.6324 0.5551 0.6587
## C_pecho 0.7674 0.6204 0.5762 0.5150 0.6396
## C_cintura 0.7078 0.6310 0.5765 0.4874 0.5452
## C_abdomen 0.6396 0.6128 0.5205 0.4870 0.4934
## C_cadera 0.7467 0.7622 0.6929 0.6016 0.6193
## C_muslo 0.7257 0.7639 0.7293 0.5823 0.5673
## C_biceps 0.8682 0.6803 0.6660 0.5705 0.6831
## C_brazo 1.0000 0.7492 0.7408 0.6446 0.8066
## C_rodilla 0.7492 1.0000 0.7952 0.7021 0.7010
## C_gemelo 0.7408 0.7952 1.0000 0.7380 0.6540
## C_tobillo 0.6446 0.7021 0.7380 1.0000 0.6655
## C_muneca 0.8066 0.7010 0.6540 0.6655 1.0000
Las correlaciones son “importantes” y positivas.
Vamos a ver que las relaciones son lineales:
pairs(datmuj)
scatterplotMatrix(r1,regLine=TRUE,
smooth=list(spread=FALSE))
No hay desviaciones grandes a la condición de linealidad.
corrplot(r1,method = "ellipse")
Al hacer la matriz de covarianzas y apoyándonos en los gráficos podemos ver que las correlaciones más altas se dan entre las medidas de cadera-muslo (0.9043), antebrazo-bíceps (0.8682) (cuidado la variable C_brazo en realidad mide la circunferencia del antebrazo, extendido palma arriba, lo pone en el archivo donde se nos describe el dataset) y pecho-cintura (0.8592), lo cual tiene sentido ya que estos pares miden zonas del cuerpo muy cercanas.
Por el contrario, si nos fijamos en las variables que están menos correlacionadas los pares de medidas son abdomen-tobillo (0.4870), cintura-tobillo (0.4874) y abdomen-muñeca (0.4934), lo cual es esperable puesto que en la zona donde se realizan las medidas de cintura y abdomen se tiende a acumular más grasa y/o músculo y por el contrario tanto la muñeca como el tobillo son zonas del cuerpo donde suele haber menos acumulación de grasa.
Repite el apartado 1 para los datos de hombres.
r2=cor(dathom)
print(r2,digits=4)
## C_hombros C_pecho C_cintura C_abdomen C_cadera C_muslo C_biceps
## C_hombros 1.0000 0.8349 0.5809 0.5391 0.6517 0.6055 0.7638
## C_pecho 0.8349 1.0000 0.7134 0.6849 0.6823 0.6018 0.7776
## C_cintura 0.5809 0.7134 1.0000 0.8820 0.7997 0.5598 0.4707
## C_abdomen 0.5391 0.6849 0.8820 1.0000 0.8094 0.5454 0.4747
## C_cadera 0.6517 0.6823 0.7997 0.8094 1.0000 0.7912 0.5717
## C_muslo 0.6055 0.6018 0.5598 0.5454 0.7912 1.0000 0.6624
## C_biceps 0.7638 0.7776 0.4707 0.4747 0.5717 0.6624 1.0000
## C_brazo 0.7033 0.7011 0.4206 0.4262 0.5377 0.6109 0.8647
## C_rodilla 0.5001 0.4811 0.5687 0.5554 0.7044 0.6644 0.4286
## C_gemelo 0.4941 0.4753 0.5165 0.4629 0.6540 0.7048 0.4748
## C_tobillo 0.4702 0.4712 0.4776 0.5149 0.5868 0.5200 0.4276
## C_muneca 0.5406 0.5465 0.3688 0.3891 0.4505 0.3824 0.6108
## C_brazo C_rodilla C_gemelo C_tobillo C_muneca
## C_hombros 0.7033 0.5001 0.4941 0.4702 0.5406
## C_pecho 0.7011 0.4811 0.4753 0.4712 0.5465
## C_cintura 0.4206 0.5687 0.5165 0.4776 0.3688
## C_abdomen 0.4262 0.5554 0.4629 0.5149 0.3891
## C_cadera 0.5377 0.7044 0.6540 0.5868 0.4505
## C_muslo 0.6109 0.6644 0.7048 0.5200 0.3824
## C_biceps 0.8647 0.4286 0.4748 0.4276 0.6108
## C_brazo 1.0000 0.5279 0.5538 0.5127 0.7084
## C_rodilla 0.5279 1.0000 0.7266 0.6891 0.4969
## C_gemelo 0.5538 0.7266 1.0000 0.6952 0.5393
## C_tobillo 0.5127 0.6891 0.6952 1.0000 0.6286
## C_muneca 0.7084 0.4969 0.5393 0.6286 1.0000
Las correlaciones son “importantes” y positivas.
Vamos a ver que las relaciones son lineales:
pairs(dathom)
scatterplotMatrix(r2,regLine=TRUE,
smooth=list(spread=FALSE))
No hay desviaciones grandes a la condición de linealidad.
corrplot(r2,method = "ellipse")
En los hombres las correlaciones más altas se dan entre el antebrazo-bíceps (0.865), cintura-abdomen (0.882) y pecho-hombros (0.835).
Las correlaciones más bajas se dan entre muñeca-cintura (0.369), muñeca-tobillo (0.382), muñeca-abdomen (0.389)
Realiza el análisis de componentes principales (con los datos estandarizados) para las 12 variables de las medidas de contorno de las mujeres. Toma la solución con dos componentes.
source("prinfact.R")
m1=prinfact(datmuj,2)
¿Qué porcentaje de la variabilidad total de las 12 variables está explicada por los dos primeros componentes?
m1$variances
## Comp 1 Comp 2
## Variance 8.6052160 1.01642589
## Proportion 0.7171013 0.08470216
## Cumulative 0.7171013 0.80180349
Con la solución de 2 componentes explicamos el 80.18% de la información total.
¿Qué variable de las 12 está peor explicada? Interpreta este resultado. # c) ¿Qué variable de las 12 está peor explicada? Interpreta este resultado.
m1$loadings
## Comp 1 Comp 2 communality uniquiness
## C_hombros 0.8341144 0.07902883 0.7019923 0.2980077
## C_pecho 0.8704837 0.29837846 0.8467716 0.1532284
## C_cintura 0.8613778 0.38530336 0.8904304 0.1095696
## C_abdomen 0.8155069 0.39711806 0.8227543 0.1772457
## C_cadera 0.9049913 0.14088841 0.8388589 0.1611411
## C_muslo 0.8652339 0.03609471 0.7499325 0.2500675
## C_biceps 0.8990499 0.13742210 0.8271755 0.1728245
## C_brazo 0.9020096 -0.11200374 0.8261662 0.1738338
## C_rodilla 0.8520201 -0.27918052 0.8038800 0.1961200
## C_gemelo 0.8166777 -0.38485460 0.8150756 0.1849244
## C_tobillo 0.7358360 -0.47805596 0.7699921 0.2300079
## C_muneca 0.7879072 -0.32835170 0.7286126 0.2713874
No todas las variables originales están igualmente explicadas. La mejor explicada es cintura con un 89.04% de comunalidad, mientras que la peor explicada es la medida de los hombros con un 70.20%
#d) Representa en un gráfico de dimensión 2 los scores de cada individuo. Interpreta la distribución de los puntos. Qué personas están a la derecha, a la izquierda, arriba y abajo del gráfico.
m11 = princomp(datmuj,cor=TRUE)
biplot(m11)
En el gráfico de puntuaciones para las mujeres se observa que el primer componente (eje x) nos dice si las mujeres son más corpulentas o no. Por ejemplo, las mujeres 474 y 359 que están a la derecha serán mujeres con unas medidas de contorno musular muy altas.
En cambio a la izquierda del gráfico se encuentran las mujeres con menores medidas de contorno muscular en general (delgadas).
Si nos fijamos en el segundo componente (eje y), nos indica que parte del cuerpo va a tener más desarrollada una mujer, por ejemplo, la mujer 482 que está arriba del todo va a tener más desarrollado el abdomen, cintura y pecho. Mientras que una mujer que se encuentre abajo del gráfico tendrá más desarrolladas las medidas de tobillo, gemelo, muñecal, rodilla.
m2=prinfact(dathom,2)
¿Qué porcentaje de la variabilidad total de las 12 variables está explicada por los dos primeros componentes?
m2$variances
## Comp 1 Comp 2
## Variance 7.4878999 1.2622052
## Proportion 0.6239917 0.1051838
## Cumulative 0.6239917 0.7291754
En el caso de los hombres, con la solución de 2 componentes explicamos el 72.92% de la información total.
¿Qué variable de las 12 está peor explicada? Interpreta este resultado.
¿Qué variable de las 12 está peor explicada? Interpreta este resultado.
m2$loadings
## Comp 1 Comp 2 communality uniquiness
## C_hombros 0.8159192 0.26505647 0.7359790 0.2640210
## C_pecho 0.8465849 0.16630348 0.7443628 0.2556372
## C_cintura 0.7806692 -0.41073404 0.7781468 0.2218532
## C_abdomen 0.7720164 -0.40930353 0.7635386 0.2364614
## C_cadera 0.8745560 -0.32536989 0.8707138 0.1292862
## C_muslo 0.8121609 -0.09295544 0.6682461 0.3317539
## C_biceps 0.7977624 0.47477779 0.8618388 0.1381612
## C_brazo 0.7984699 0.49042456 0.8780704 0.1219296
## C_rodilla 0.7726689 -0.26330937 0.6663491 0.3336509
## C_gemelo 0.7668793 -0.14247683 0.6084034 0.3915966
## C_tobillo 0.7307568 -0.11313520 0.5468051 0.4531949
## C_muneca 0.6945913 0.38104343 0.6276512 0.3723488
En este caso la variable que está mejor explicada es la medida del antebrazo (ojo que en el dataset se la denomina C_brazo) con una comunalidad del 87.81% y la que peor está explicada es la del tobillo (54.68%).
#d) Representa en un gráfico de dimensión 2 los scores de cada individuo. Interpreta la distribución de los puntos. Qué personas están a la derecha, a la izquierda, arriba y abajo del gráfico.
m21 = princomp(dathom,cor=TRUE)
biplot(m21)
Al hacer el gráfico con los scores para los hombres, podemos observar que el primer componente (eje x) nos dice si el individuo es corpulento o no (al igual que en el caso de las mujeres). Un hombre que esté a la derecha en el gráfico tendrá mayores medidas de contorno musculares mientras que uno que esté a la izquierda será más delgado en general.
Si nos fijamos en el segundo componente (eje y) podemos identificar los hombres que tienen más desarrollado la parte superior del cuerpo (brazo, bíceps, muñeca,hombros, pecho…), los cuáles están arriba del gráfico, mientras que abajo se encontrarán los hombres que tienen más desarrollado la parte inferior (abdomen, muslo, cadera, gemelo…)
Realiza el análisis discriminante para comparar las 12 medidas de hombres y mujeres. Proporciona la función discriminante y la función discriminante estandarizada. Indica las 5 variables más importantes para discriminar entre mujeres y hombres.
Antes de comenzar el análisis de discriminante vamos ha comprobar si existen diferencias entre las medidas de los hombres y mujeres realizando el contraste de igualdad de medias, ya que de no haber diferencias significativas no tendría sentido seguir con este estudio.
m52 =manova(as.matrix(dat[,10:21])~dat$sexo)
summary(m52)
## Df Pillai approx F num Df den Df Pr(>F)
## dat$sexo 1 0.84359 222.03 12 494 < 2.2e-16 ***
## Residuals 505
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Comprobamos que el p-valor es muy pequeño y por tanto podemos concluir que las variables medidas nos permiten discriminar significativamente entre hombres y mujeres y procedemos a calcular la función discriminante,
library(candisc)
## Loading required package: heplots
##
## Attaching package: 'candisc'
## The following object is masked from 'package:stats':
##
## cancor
library(candisc)
library(MASS)
library(klaR)
m5 = lda(dat$sexo~.,data=dat[,10:21])
m5
## Call:
## lda(dat$sexo ~ ., data = dat[, 10:21])
##
## Prior probabilities of groups:
## F M
## 0.5128205 0.4871795
##
## Group means:
## C_hombros C_pecho C_cintura C_abdomen C_cadera C_muslo C_biceps C_brazo
## F 100.3038 86.0600 69.80346 83.74577 95.65269 57.19577 28.09731 23.76038
## M 116.5016 100.9899 84.53320 87.66235 97.76316 56.49798 34.40364 28.24049
## C_rodilla C_gemelo C_tobillo C_muneca
## F 35.26000 35.00615 21.20577 15.05923
## M 37.19555 37.20688 23.15911 17.19028
##
## Coefficients of linear discriminants:
## LD1
## C_hombros 0.054621610
## C_pecho -0.020475659
## C_cintura 0.129471126
## C_abdomen -0.079517756
## C_cadera -0.043776515
## C_muslo -0.165361431
## C_biceps 0.084815722
## C_brazo 0.335274258
## C_rodilla 0.003955319
## C_gemelo -0.049934031
## C_tobillo 0.073001483
## C_muneca 0.169905976
En el resumen del modelo m5 se proporciona el vector con los pesos (coeficientes) de la función lineal. Se observa que el coeficiente mayor corresponde a la variable muñeca (0.1699). Pero esto no quiere decir que sea la variable más “importante” para discriminar entre hombres y mujeres. A pesar de que en este estudio todas las variables están en las mismas unidades (cm) le dará más peso a la medida que tenga mayor variabilidad por eso vamos a estandarizar los coeficientes, utilizando la desviación típica (total) de cada variable.
m5$scaling*sapply(dat[,10:21],sd)
## LD1
## C_hombros 0.56669016
## C_pecho -0.20532215
## C_cintura 1.42582514
## C_abdomen -0.74938552
## C_cadera -0.29245438
## C_muslo -0.73749369
## C_biceps 0.36020735
## C_brazo 0.94902037
## C_rodilla 0.01035332
## C_gemelo -0.14219519
## C_tobillo 0.13595338
## C_muneca 0.23462838
Una vez estadarizados los coeficientes podemos ver que las variables con coeficientes mayores en valor absoluto son cintura, antebrazo, abdomen, muslo.
No obstante para poder elegir las 5 variables más importantes a la hora de discriminar vamos a usar la función greedy.wilks
m51 = greedy.wilks(sexo~.,data=dat[,c(10,11,12,13,14,15,16,17,18,19,20,21,25)])
m51
## Formula containing included variables:
##
## sexo ~ C_brazo + C_muslo + C_cintura + C_abdomen + C_hombros +
## C_biceps + C_muneca + C_cadera
## <environment: 0x0000000021056548>
##
##
## Values calculated in each step of the selection procedure:
##
## vars Wilks.lambda F.statistics.overall p.value.overall F.statistics.diff
## 1 C_brazo 0.3729000 849.2506 3.005864e-110 849.250600
## 2 C_muslo 0.2324551 832.0803 2.077076e-160 304.506994
## 3 C_cintura 0.1983979 677.4365 3.436474e-176 86.345678
## 4 C_abdomen 0.1682412 620.4527 1.073477e-192 89.981644
## 5 C_hombros 0.1616087 519.8162 1.213083e-195 20.561465
## 6 C_biceps 0.1600833 437.2291 2.726826e-195 4.764456
## 7 C_muneca 0.1589149 377.2922 9.597700e-195 3.668752
## 8 C_cadera 0.1577562 332.3463 3.138765e-194 3.657784
## p.value.diff
## 1 3.005864e-110
## 2 0.000000e+00
## 3 0.000000e+00
## 4 0.000000e+00
## 5 7.229472e-06
## 6 2.951678e-02
## 7 5.601178e-02
## 8 5.638000e-02
Las variables que tienen poder de discriminación son la medida del antebrazo, muslo, cintura, abdomen, hombros, bíceps, muñeca y cadera en orden de mayor a menor. El resto de variables no tienen efecto significativo que contribuya a mejorar el modelo y pueden omitirse.
Las cinco variables más importantes que se nos preguntan serían antebrazo, muslo, cintura, abdomen y hombros.
Utiliza la función plot() para representar las puntuaciones discriminante. Con ayuda del gráfico y de la función discriminante estandarizada interpreta las cinco variables que discriminan entre hombres y mujeres.
plot(m5)
pred=predict(m5)
Las puntuaciones de cada individuo las obtenemos usando la función pred=predict(m5).Dichos valores se encuentran en el vector pred\(x. El gráfico anterior son los histogramas de pred\)x diferenciando entre hombres y mujeres.
Si queremos calcular los centroides de los grupos serían:
tapply(pred$x,dat$sexo,mean)
## F M
## -2.259083 2.377982
No obstante, hemos realizado este histograma teniendo en cuenta todas las variables, si solo utilizamos en la función discriminante las 5 variables más importantes que hemos visto en el apartado 5 el histograma y los centroides serían:
m6 = lda(dat$sexo~C_cintura + C_brazo + C_abdomen + C_muslo + C_hombros,data=dat[,10:21])
m6$scaling*sapply(dat[,c(10,12,13,14,15)],sd) #Nueva función discriminante estandarizada si solo se tienen en cuenta las 5 medidas más importantes que hemos calculado previamente
## LD1
## C_cintura 1.2315729
## C_brazo 5.1995440
## C_abdomen -0.8072999
## C_muslo -1.3770408
## C_hombros 0.2411270
plot(m6)
pred=predict(m6)
tapply(pred$x,dat$sexo,mean)
## F M
## -2.215616 2.332228
Comparando los resultados usando todas las variables o solo las 5 más importantes se puede observar que no hay mucha diferencia en los valores de los centroides, y al fijarnos en el histograma se ve que las puntuaciones para hombres y mujeres están bien diferenciadas, siendo positivas en el caso de los hombres y negativas para las mujeres. Salvo algún valor atípico quedan bien diferenciadas las puntuaciones para mujeres y para hombres tanto en el modelo donde se usan todas las variables como en el modelo que solo se tienen en cuenta las más importantes.
Si realizamos el boxplot de elas 5 medidas más importantes se puede ver que las variables cintura, antebrazo y hombros discriminan claramente entre hombres y mujeres. Mientras que si nos fijamos en el boxplot de muslo y abdomen no quedaría muy claro que esas variables discriminan entre hombres y mujeres.
par(mfrow=c(3,2))
boxplot(dat$C_cintura~dat$sexo,col=c("rosybrown1","darkseagreen1"),horizontal = TRUE,xlab = "Cintura",ylab = "Sexo")
boxplot(dat$C_brazo~dat$sexo,col=c("rosybrown1","darkseagreen1"),horizontal = TRUE,xlab = "Antebrazo",ylab = "Sexo")
boxplot(dat$C_abdomen~dat$sexo,col=c("rosybrown1","darkseagreen1"),horizontal = TRUE,xlab = "Abdomen",ylab = "Sexo")
boxplot(dat$C_muslo~dat$sexo,col=c("rosybrown1","darkseagreen1"),horizontal = TRUE,xlab = "Muslo",ylab = "Sexo")
boxplot(dat$C_hombros~dat$sexo,col=c("rosybrown1","darkseagreen1"),horizontal = TRUE, xlab = "Hombros",ylab = "Sexo")
par(mfrow=c(1,1))
No obstante, aquí en los boxplot solo se están teniendo en cuenta las variables por separado, es decir, como hemos visto en la función greedy,wilks y mirando los coeficientes de la función discriminante estandarizada podemos concluir que las 5 variables más importantes son antebrazo, muslo, cintura, abdomen y hombros por ese orden.
Obtén la matriz de confusión y explica si la función discriminante es útil para clasificar las observaciones entre hombres y mujeres.
pred = predict(m5)
t1=table(Obs=dat$sexo
,Prev=pred$class)
(t2 = addmargins(t1))
## Prev
## Obs F M Sum
## F 257 3 260
## M 4 243 247
## Sum 261 246 507
aciertos= (t1[1,1]+t1[2,2])/sum(t1)
errores = 1 - aciertos
paste0("Aciertos = ",round(100*aciertos,2),"% --", " Errores = ", round(100*errores,2),"% ")
## [1] "Aciertos = 98.62% -- Errores = 1.38% "
Al hacer la matriz de confusión, de las 260 mujeres que hay en la muestra nuesta función discriminante acierta 257, mientras que hay 3 que clasificaría como hombres; y de los 247 hombres que hay en la muestra clasificaría correctamente a 243 mientras que habría 4 que serían considerados mujeres.
Al calcular el % de aciertos y de fallos con esta función discriminante se acertaría en un 98.62% de los casos y habría un error del 1.38% por tanto sería útil para clasificar observaciones entre hombres y mujeres.
Vamos a repetir el cálculo pero usando el modelo con las 5 variables más importantes que hemos calculado anteriormente.
pred = predict(m6)
t1=table(Obs=dat$sexo
,Prev=pred$class)
(t2 = addmargins(t1))
## Prev
## Obs F M Sum
## F 256 4 260
## M 4 243 247
## Sum 260 247 507
aciertos= (t1[1,1]+t1[2,2])/sum(t1)
errores = 1 - aciertos
paste0("Aciertos = ",round(100*aciertos,2),"% --", " Errores = ", round(100*errores,2),"% ")
## [1] "Aciertos = 98.42% -- Errores = 1.58% "
En este caso se obtiene que de las 260 mujeres de la muestra esta función discriminante acierta 256 y clasifica 4 mujeres como hombres; y de los 247 hombres que hay en la muestra acierta 243 mientras que a 4 hombres los considera mujeres.
Es decir, esta función discriminante acierta en un 98.42% y el error sería de un 1.58%. Por tanto no habría mucha diferencia entre los fallos que se comete a la hora de clasificar utilizando la función discriminante que incluye todas las variables y la que incluye solo las 5 más importantes.
Realiza la validación del método de clasificación siguiendo las siguientes instrucciones.
Toma una muestra mtrain al azar del 75% de las observaciones. Las restantes observaciones las denominaremos mtest.
Estima el modelo de clasificación utilizando mtrain
Aplica el modelo mtrain para clasificar las observaciones reservadas mtest
Obtén el porcentaje de observaciones mal clasificadas en el paso c.
Repite 100 veces los pasos a hasta d y guarda los errores de clasificación de cada simulación. Obtén la media de los errores. Proporciona el programa y el error medio obtenido en tú simulación.
v=c(1:100) #creo un vector v de 100 componentes donde se recogerán los errores
for (i in 1:100) {
n = dim(dat)[1]
mtrain = sample(1:n,round(0.75*n)) #muestra aleatoria de 75 datos que usaremos para estimar el modelo
m8 = lda(sexo ~ ., data = dat[mtrain,]) #estimo el modelo
pre = predict(m8,newdata = dat[-mtrain,]) #mtest seria -mtrain
tp=table(dat$sexo[-mtrain],pre$class)
aciertos = (tp[1,1]+tp[2,2])/sum(tp)
errores = 1 - aciertos
paste0("Aciertos = ",round(100*aciertos,2),"% --", " Errores = ", round(100*errores,2),"% ")
v[i]=round(100*errores,2) #voy guardando en el vector v los errores de clasificación de cada simulación
}
v #estos serían los errores que nos da cada simulación
## [1] 0.79 0.79 2.36 1.57 0.79 2.36 0.79 0.79 2.36 2.36 3.15 0.79 0.79 0.79 0.00
## [16] 0.79 0.79 0.00 3.15 0.79 2.36 0.79 2.36 2.36 0.00 1.57 1.57 1.57 2.36 3.15
## [31] 1.57 0.79 3.15 0.79 3.15 3.15 1.57 3.15 2.36 1.57 1.57 0.79 1.57 0.79 0.79
## [46] 1.57 2.36 2.36 0.00 1.57 1.57 2.36 0.79 1.57 2.36 0.00 3.94 0.79 3.94 1.57
## [61] 3.15 0.79 3.15 1.57 3.15 3.15 0.00 0.00 1.57 3.94 2.36 1.57 3.15 2.36 1.57
## [76] 1.57 1.57 0.00 1.57 0.79 3.15 0.00 2.36 0.00 3.15 1.57 3.94 0.00 3.15 0.00
## [91] 1.57 1.57 3.15 1.57 0.79 1.57 3.15 1.57 1.57 0.00
mean(v) #esta sería la media de todos los errores
## [1] 1.6841