Técnicas estadísticas para la investigación empresarial II
MIE, ITCR
Email: fitacam@gmail.com
PCA: DB tomada de: https://github.com/cosmoduende/r-marvel-vs-dc – > DC Comics vs Marvel Comics -
PCR: Set de datos meatspec del paquete
faraway
R Scrip Base : Código tomado de dos fuentes modificados y adaptados para efectos de uso en MIE por RCA.
Caraga Raw Data:
setwd("C:/Users/Rafael/Documents/1.Master_Investigacion/7. Estadistica 2/datos")
library(readr)
charactersStats <- read_csv("charactersStats.csv",
col_types = cols(Name = col_character(),
Intelligence = col_integer(), Strength = col_integer(),
Speed = col_integer(), Durability = col_integer(),
Power = col_integer(), Combat = col_integer(),
Total = col_integer()))
head(charactersStats)
## # A tibble: 6 × 9
## Name Alignment Intelligence Strength Speed Durability Power Combat Total
## <chr> <chr> <int> <int> <int> <int> <int> <int> <int>
## 1 3-D Man good 50 31 43 32 25 52 233
## 2 A-Bomb good 38 100 17 80 17 64 316
## 3 Abe Sapien good 88 14 35 42 35 85 299
## 4 Abin Sur good 50 90 53 64 84 65 406
## 5 Abominati… bad 63 80 53 90 55 95 436
## 6 Abraxas bad 88 100 83 99 100 56 526
Los datos obtenidos deben limpiarse y crear un data frame para trabajo adecuado para PCA.
Específicamente:
Se eliminan duplicados, NA’s y columnas de Total en caso que existan
Y se eliminan cualquier tabla de datos tipo texto.
Se crea un data frame para trabajo
library(textshape)
base_datos<- charactersStats[!duplicated(charactersStats$Name), ]
base_datos<-textshape::column_to_rownames(base_datos, loc = 1)
df<-as.data.frame(base_datos)
df2 <- subset(df, select = -c(Alignment) )
df <- subset(df, select = -c(Alignment,Total) )
head(df)
## Intelligence Strength Speed Durability Power Combat
## 3-D Man 50 31 43 32 25 52
## A-Bomb 38 100 17 80 17 64
## Abe Sapien 88 14 35 42 35 85
## Abin Sur 50 90 53 64 84 65
## Abomination 63 80 53 90 55 95
## Abraxas 88 100 83 99 100 56
Nótese como el DF resultante no posee datos tipo texto, los cuales ahora han pasado a ser el índice de la tabla y también se elimino la columna total, que para efectos del PCA es contra producente.
summary(df)
## Intelligence Strength Speed Durability
## Min. : 1.00 Min. : 1.00 Min. : 1.00 Min. : 1.00
## 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00
## Median : 50.00 Median : 10.00 Median : 23.00 Median : 32.00
## Mean : 44.51 Mean : 29.03 Mean : 27.19 Mean : 41.74
## 3rd Qu.: 75.00 3rd Qu.: 53.00 3rd Qu.: 42.00 3rd Qu.: 80.00
## Max. :113.00 Max. :100.00 Max. :100.00 Max. :120.00
## Power Combat
## Min. : 0.00 Min. : 1.00
## 1st Qu.: 0.00 1st Qu.: 1.00
## Median : 37.00 Median : 50.00
## Mean : 40.21 Mean : 43.24
## 3rd Qu.: 67.00 3rd Qu.: 70.00
## Max. :100.00 Max. :101.00
pca <- prcomp(df,
center = TRUE,
scale = TRUE)
print(pca)
## Standard deviations (1, .., p=6):
## [1] 2.0918987 0.7514533 0.6136831 0.5563222 0.4486147 0.4146341
##
## Rotation (n x k) = (6 x 6):
## PC1 PC2 PC3 PC4 PC5
## Intelligence -0.4093328 -0.52234093 -0.03554182 -0.05208894 0.73558217
## Strength -0.3927979 0.57313319 -0.47401485 0.13688798 0.25052279
## Speed -0.3959063 0.23397739 0.76423265 0.45162656 0.01708038
## Durability -0.4322931 0.27410346 -0.22084971 -0.11465440 -0.19566321
## Power -0.4167447 -0.03599565 0.25256225 -0.77461723 -0.24839102
## Combat -0.4010751 -0.51720836 -0.27826764 0.40175166 -0.54395154
## PC6
## Intelligence -0.1206194
## Strength 0.4593888
## Speed 0.0142472
## Durability -0.7986148
## Power 0.3154528
## Combat 0.1921295
pca$center
## Intelligence Strength Speed Durability Power Combat
## 44.51311 29.03279 27.18689 41.74426 40.21475 43.23607
pca$scale
## Intelligence Strength Speed Durability Power Combat
## 32.95069 32.61361 25.61220 36.49770 34.48340 33.28945
El objeto rotation contiene los valores de los vectores de carga (también conocidos como “loadings”) denotados como ϕ para cada componente principal (eigenvector). Es importante destacar que el número máximo de componentes principales que se pueden calcular se corresponde con el mínimo entre el número total de observaciones menos uno (n-1) y el número de variables predictoras (p). Esto asegura que no haya más componentes principales que observaciones o variables, lo que podría generar problemas en el análisis.
pca$rotation
## PC1 PC2 PC3 PC4 PC5
## Intelligence -0.4093328 -0.52234093 -0.03554182 -0.05208894 0.73558217
## Strength -0.3927979 0.57313319 -0.47401485 0.13688798 0.25052279
## Speed -0.3959063 0.23397739 0.76423265 0.45162656 0.01708038
## Durability -0.4322931 0.27410346 -0.22084971 -0.11465440 -0.19566321
## Power -0.4167447 -0.03599565 0.25256225 -0.77461723 -0.24839102
## Combat -0.4010751 -0.51720836 -0.27826764 0.40175166 -0.54395154
## PC6
## Intelligence -0.1206194
## Strength 0.4593888
## Speed 0.0142472
## Durability -0.7986148
## Power 0.3154528
## Combat 0.1921295
La función prcomp() efectúa el cálculo automático de las componentes principales para cada observación, comúnmente denominadas “scores de componentes principales”, mediante la multiplicación de los datos originales por los vectores de carga. El resultado de este proceso se guarda en la matriz x.
# Matriz X
head(pca$x)
## PC1 PC2 PC3 PC4 PC5
## 3-D Man -0.1425872 -0.1014112 0.31160079 0.75657406 0.16677500
## A-Bomb -1.0390757 1.2462601 -1.90347652 0.78043164 0.01579584
## Abe Sapien -0.9231214 -1.5236747 0.01586911 0.62629303 0.21429161
## Abin Sur -2.2564427 1.0035358 -0.11771000 -0.08843564 -0.18230627
## Abomination -2.6164183 0.3811575 -0.60688907 0.78085849 -0.38960736
## Abraxas -3.8121592 1.2369324 0.57174873 -0.15551731 0.60699251
## PC6
## 3-D Man 0.1410342
## A-Bomb 0.0881936
## Abe Sapien -0.1788514
## Abin Sur 0.8922186
## Abomination 0.0427142
## Abraxas 0.2392425
dim(pca$x)
## [1] 610 6
Una vez calculadas las componentes principales, es posible obtener información sobre la varianza explicada por cada una de ellas, la proporción de varianza que cada componente representa con respecto al total, y también la proporción de varianza acumulada. Estos son elementos esenciales para comprender la contribución de cada componente a la representación global de los datos y para la toma de decisiones en análisis de componentes principales.
library(ggplot2)
pca$sdev^2
## [1] 4.3760401 0.5646821 0.3766069 0.3094944 0.2012551 0.1719214
PVE <- pca$sdev^2 / sum(pca$sdev^2)
PVE
## [1] 0.72934001 0.09411368 0.06276782 0.05158239 0.03354252 0.02865357
PVE_acum <- cumsum(PVE)
PVE_acum
## [1] 0.7293400 0.8234537 0.8862215 0.9378039 0.9713464 1.0000000
La elección del número óptimo de componentes principales es un paso
importante en un análisis de componentes principales (PCA) y puede
influir significativamente en la representación de los datos. Un método
común para tomar esta decisión es utilizar el scree plot, que muestra la
varianza explicada por cada componente principal. Puedes generar un
scree plot en R utilizando la función
fviz_screeplot del paquete
factoextra.
#Varianza explicada por cada PC
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_screeplot(pca,
addlabels = TRUE,
ylim = c(0, 100))
# Variables que más contribuyen a PC1
fviz_contrib(pca,
choice = "var",
axes = 1, top = 6)
# Comparativa de PVE y PVE_Acum
par(mfrow = c(1,2))
plot(PVE, type = "o",
ylab = "PVE",
xlab = "Componente principal",
col = "blue")
plot(PVE_acum, type = "o",
ylab = "PVE acumulada",
xlab = "Componente principal",
col = "brown3")
En resumen, los resultados sugieren que es posible reducir la complejidad del conjunto de datos utilizando el Análisis de Componentes Principales (PCA). Con la extracción de 2 componentes principales, se logra mantener una proporción explicada de la varianza del 82%. Esta reducción de dimensionalidad es altamente relevante, ya que permite representar la mayoría de la información esencial de los datos en un espacio de menor dimensión. Esto no solo simplifica el modelo, sino que también puede mejorar la capacidad de interpretación y generalización en aplicaciones futuras. El uso de PCA ha demostrado ser una herramienta efectiva para abordar problemas de alta dimensionalidad y mejorar la eficiencia en el análisis de datos.
La Regresión de Componentes Principales, o PCR (Principal Components Regression), es un enfoque que implica la construcción de un modelo de regresión lineal utilizando las componentes generadas a partir de un Análisis de Componentes Principales (PCA) como predictores. De esta manera, se busca explicar la mayor parte de la varianza en los datos utilizando un número reducido de componentes principales, lo que simplifica y optimiza el modelo de regresión.
La cuantificación del contenido en grasa de la carne pude hacerse
mediante técnicas de analítica química, sin embargo, este proceso es
costoso en tiempo y recursos. Una posible alternativa para reducir
costes y optimizar tiempo es emplear un espectrofotómetro (instrumento
capaz de detectar la absorbancia que tiene un material a diferentes
tipos de luz en función de sus características). Para comprobar su
efectividad se mide el espectro de absorbancia de 100 longitudes de onda
en 215 muestras de carne, cuyo contenido en grasa se obtiene también por
análisis químico para poder comparar los resultados. El set de
datos meatspec del paquete faraway contiene
toda la información.
Para poder evaluar la capacidad predictiva del modelo, se dividen las observaciones disponibles en dos grupos: uno de entrenamiento para ajustar el modelo (70% de los datos) y uno de test (30% de los datos).
library(pls)
##
## Attaching package: 'pls'
## The following object is masked from 'package:stats':
##
## loadings
library(faraway)
data(meatspec)
dim(meatspec)
## [1] 215 101
#use 80% of dataset as training set and 20% as test set
training <- meatspec[1:172, ]
test <- meatspec[173:215, ]
head(meatspec)
## V1 V2 V3 V4 V5 V6 V7 V8 V9
## 1 2.61776 2.61814 2.61859 2.61912 2.61981 2.62071 2.62186 2.62334 2.62511
## 2 2.83454 2.83871 2.84283 2.84705 2.85138 2.85587 2.86060 2.86566 2.87093
## 3 2.58284 2.58458 2.58629 2.58808 2.58996 2.59192 2.59401 2.59627 2.59873
## 4 2.82286 2.82460 2.82630 2.82814 2.83001 2.83192 2.83392 2.83606 2.83842
## 5 2.78813 2.78989 2.79167 2.79350 2.79538 2.79746 2.79984 2.80254 2.80553
## 6 3.00993 3.01540 3.02086 3.02634 3.03190 3.03756 3.04341 3.04955 3.05599
## V10 V11 V12 V13 V14 V15 V16 V17 V18
## 1 2.62722 2.62964 2.63245 2.63565 2.63933 2.64353 2.64825 2.65350 2.65937
## 2 2.87661 2.88264 2.88898 2.89577 2.90308 2.91097 2.91953 2.92873 2.93863
## 3 2.60131 2.60414 2.60714 2.61029 2.61361 2.61714 2.62089 2.62486 2.62909
## 4 2.84097 2.84374 2.84664 2.84975 2.85307 2.85661 2.86038 2.86437 2.86860
## 5 2.80890 2.81272 2.81704 2.82184 2.82710 2.83294 2.83945 2.84664 2.85458
## 6 3.06274 3.06982 3.07724 3.08511 3.09343 3.10231 3.11185 3.12205 3.13294
## V19 V20 V21 V22 V23 V24 V25 V26 V27
## 1 2.66585 2.67281 2.68008 2.68733 2.69427 2.70073 2.70684 2.71281 2.71914
## 2 2.94929 2.96072 2.97272 2.98493 2.99690 3.00833 3.01920 3.02990 3.04101
## 3 2.63361 2.63835 2.64330 2.64838 2.65354 2.65870 2.66375 2.66880 2.67383
## 4 2.87308 2.87789 2.88301 2.88832 2.89374 2.89917 2.90457 2.90991 2.91521
## 5 2.86331 2.87280 2.88291 2.89335 2.90374 2.91371 2.92305 2.93187 2.94060
## 6 3.14457 3.15703 3.17038 3.18429 3.19840 3.21225 3.22552 3.23827 3.25084
## V28 V29 V30 V31 V32 V33 V34 V35 V36
## 1 2.72628 2.73462 2.74416 2.75466 2.76568 2.77679 2.78790 2.79949 2.81225
## 2 3.05345 3.06777 3.08416 3.10221 3.12106 3.13983 3.15810 3.17623 3.19519
## 3 2.67892 2.68411 2.68937 2.69470 2.70012 2.70563 2.71141 2.71775 2.72490
## 4 2.92043 2.92565 2.93082 2.93604 2.94128 2.94658 2.95202 2.95777 2.96419
## 5 2.94986 2.96035 2.97241 2.98606 3.00097 3.01652 3.03220 3.04793 3.06413
## 6 3.26393 3.27851 3.29514 3.31401 3.33458 3.35591 3.37709 3.39772 3.41828
## V37 V38 V39 V40 V41 V42 V43 V44 V45
## 1 2.82706 2.84356 2.86106 2.87857 2.89497 2.90924 2.92085 2.93015 2.93846
## 2 3.21584 3.23747 3.25889 3.27835 3.29384 3.30362 3.30681 3.30393 3.29700
## 3 2.73344 2.74327 2.75433 2.76642 2.77931 2.79272 2.80649 2.82064 2.83541
## 4 2.97159 2.98045 2.99090 3.00284 3.01611 3.03048 3.04579 3.06194 3.07889
## 5 3.08153 3.10078 3.12185 3.14371 3.16510 3.18470 3.20140 3.21477 3.22544
## 6 3.43974 3.46266 3.48663 3.51002 3.53087 3.54711 3.55699 3.55986 3.55656
## V46 V47 V48 V49 V50 V51 V52 V53 V54
## 1 2.94771 2.96019 2.97831 3.00306 3.03506 3.07428 3.11963 3.16868 3.21771
## 2 3.28925 3.28409 3.28505 3.29326 3.30923 3.33267 3.36251 3.39661 3.43188
## 3 2.85121 2.86872 2.88905 2.91289 2.94088 2.97325 3.00946 3.04780 3.08554
## 4 3.09686 3.11629 3.13775 3.16217 3.19068 3.22376 3.26172 3.30379 3.34793
## 5 3.23505 3.24586 3.26027 3.28063 3.30889 3.34543 3.39019 3.44198 3.49800
## 6 3.54937 3.54169 3.53692 3.53823 3.54760 3.56512 3.59043 3.62229 3.65830
## V55 V56 V57 V58 V59 V60 V61 V62 V63
## 1 3.26254 3.29988 3.32847 3.34899 3.36342 3.37379 3.38152 3.38741 3.39164
## 2 3.46492 3.49295 3.51458 3.53004 3.54067 3.54797 3.55306 3.55675 3.55921
## 3 3.11947 3.14696 3.16677 3.17938 3.18631 3.18924 3.18950 3.18801 3.18498
## 4 3.39093 3.42920 3.45998 3.48227 3.49687 3.50558 3.51026 3.51221 3.51215
## 5 3.55407 3.60534 3.64789 3.68011 3.70272 3.71815 3.72863 3.73574 3.74059
## 6 3.69515 3.72932 3.75803 3.78003 3.79560 3.80614 3.81313 3.81774 3.82079
## V64 V65 V66 V67 V68 V69 V70 V71 V72
## 1 3.39418 3.39490 3.39366 3.39045 3.38541 3.37869 3.37041 3.36073 3.34979
## 2 3.56045 3.56034 3.55876 3.55571 3.55132 3.54585 3.53950 3.53235 3.52442
## 3 3.18039 3.17411 3.16611 3.15641 3.14512 3.13241 3.11843 3.10329 3.08714
## 4 3.51036 3.50682 3.50140 3.49398 3.48457 3.47333 3.46041 3.44595 3.43005
## 5 3.74357 3.74453 3.74336 3.73991 3.73418 3.72638 3.71676 3.70553 3.69289
## 6 3.82258 3.82301 3.82206 3.81959 3.81557 3.81021 3.80375 3.79642 3.78835
## V73 V74 V75 V76 V77 V78 V79 V80 V81
## 1 3.33769 3.32443 3.31013 3.29487 3.27891 3.26232 3.24542 3.22828 3.21080
## 2 3.51583 3.50668 3.49700 3.48683 3.47626 3.46552 3.45501 3.44481 3.43477
## 3 3.07014 3.05237 3.03393 3.01504 2.99569 2.97612 2.95642 2.93660 2.91667
## 4 3.41285 3.39450 3.37511 3.35482 3.33376 3.31204 3.28986 3.26730 3.24442
## 5 3.67900 3.66396 3.64785 3.63085 3.61305 3.59463 3.57582 3.55695 3.53796
## 6 3.77958 3.77024 3.76040 3.75005 3.73929 3.72831 3.71738 3.70681 3.69664
## V82 V83 V84 V85 V86 V87 V88 V89 V90
## 1 3.19287 3.17433 3.15503 3.13475 3.11339 3.09116 3.06850 3.04596 3.02393
## 2 3.42465 3.41419 3.40303 3.39082 3.37731 3.36265 3.34745 3.33245 3.31818
## 3 2.89655 2.87622 2.85563 2.83474 2.81361 2.79235 2.77113 2.75015 2.72956
## 4 3.22117 3.19757 3.17357 3.14915 3.12429 3.09908 3.07366 3.04825 3.02308
## 5 3.51880 3.49936 3.47938 3.45869 3.43711 3.41458 3.39129 3.36772 3.34450
## 6 3.68659 3.67649 3.66611 3.65503 3.64283 3.62938 3.61483 3.59990 3.58535
## V91 V92 V93 V94 V95 V96 V97 V98 V99
## 1 3.00247 2.98145 2.96072 2.94013 2.91978 2.89966 2.87964 2.85960 2.83940
## 2 3.30473 3.29186 3.27921 3.26655 3.25369 3.24045 3.22659 3.21181 3.19600
## 3 2.70934 2.68951 2.67009 2.65112 2.63262 2.61461 2.59718 2.58034 2.56404
## 4 2.99820 2.97367 2.94951 2.92576 2.90251 2.87988 2.85794 2.83672 2.81617
## 5 3.32201 3.30025 3.27907 3.25831 3.23784 3.21765 3.19766 3.17770 3.15770
## 6 3.57163 3.55877 3.54651 3.53442 3.52221 3.50972 3.49682 3.48325 3.46870
## V100 fat
## 1 2.81920 22.5
## 2 3.17942 40.1
## 3 2.54816 8.4
## 4 2.79622 5.9
## 5 3.13753 25.5
## 6 3.45307 42.7
La función lm() en R se utiliza para realizar análisis de regresión lineal. En términos simples, permite ajustar un modelo de regresión lineal para comprender la relación entre una variable dependiente (o respuesta) y una o más variables independientes (o predictores).
- data: Este argumento especifica el conjunto de datos en el que se encuentran las variables que se utilizan en la fórmula.
- fat: Este argumento es la variable a estimar dentro del modelo y corresponde a un campo en los datos.
modelo <- lm(fat ~ .,
data = training)
summary(modelo)
##
## Call:
## lm(formula = fat ~ ., data = training)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.09837 -0.35779 0.04555 0.38080 2.33860
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.324 2.012 3.143 0.002439 **
## V1 12134.077 3659.798 3.316 0.001443 **
## V2 -12585.857 5971.891 -2.108 0.038605 *
## V3 -5107.556 9390.265 -0.544 0.588200
## V4 23880.493 17143.644 1.393 0.167977
## V5 -40509.555 22129.359 -1.831 0.071360 .
## V6 28469.416 19569.400 1.455 0.150134
## V7 -20901.082 12501.639 -1.672 0.098952 .
## V8 8369.465 7515.467 1.114 0.269193
## V9 -1539.328 5397.505 -0.285 0.776327
## V10 4706.267 7406.895 0.635 0.527217
## V11 7012.943 11720.620 0.598 0.551516
## V12 14891.444 20169.170 0.738 0.462749
## V13 -30963.902 26186.839 -1.182 0.240983
## V14 34338.612 22323.830 1.538 0.128444
## V15 -22235.237 13842.268 -1.606 0.112640
## V16 -7466.797 8558.172 -0.872 0.385890
## V17 6716.653 6561.805 1.024 0.309500
## V18 -2033.071 6741.330 -0.302 0.763851
## V19 8541.212 9419.998 0.907 0.367627
## V20 -1667.207 17300.433 -0.096 0.923500
## V21 -31972.494 24622.615 -1.299 0.198317
## V22 59526.389 27730.712 2.147 0.035244 *
## V23 -49241.388 23117.226 -2.130 0.036632 *
## V24 16184.597 16679.609 0.970 0.335180
## V25 12077.951 10751.912 1.123 0.265081
## V26 -12632.330 6774.573 -1.865 0.066361 .
## V27 -6298.837 7032.334 -0.896 0.373442
## V28 29625.988 9011.227 3.288 0.001573 **
## V29 -39374.835 13561.228 -2.903 0.004914 **
## V30 31251.427 18742.000 1.667 0.099829 .
## V31 -27238.189 21335.756 -1.277 0.205887
## V32 23009.543 19776.156 1.163 0.248522
## V33 -4584.373 14572.471 -0.315 0.753995
## V34 -5437.943 10344.728 -0.526 0.600754
## V35 -6128.931 8762.663 -0.699 0.486564
## V36 5599.605 6652.640 0.842 0.402776
## V37 -5569.160 6670.198 -0.835 0.406557
## V38 97.451 9291.480 0.010 0.991661
## V39 36021.407 12574.711 2.865 0.005488 **
## V40 -54273.400 17144.384 -3.166 0.002280 **
## V41 52084.876 21758.024 2.394 0.019318 *
## V42 -48458.089 23950.549 -2.023 0.046813 *
## V43 29334.488 20232.617 1.450 0.151500
## V44 -18282.834 13508.157 -1.353 0.180200
## V45 22110.934 9725.348 2.274 0.026020 *
## V46 -11735.692 6631.245 -1.770 0.081061 .
## V47 -514.521 3800.612 -0.135 0.892696
## V48 2551.480 6131.893 0.416 0.678592
## V49 3707.639 8970.401 0.413 0.680618
## V50 -25762.703 10934.783 -2.356 0.021236 *
## V51 46844.468 15367.852 3.048 0.003233 **
## V52 -47783.626 18069.344 -2.644 0.010065 *
## V53 26233.604 18822.491 1.394 0.167744
## V54 87.825 17403.836 0.005 0.995988
## V55 -8475.119 13232.005 -0.641 0.523908
## V56 3488.507 7228.428 0.483 0.630858
## V57 -1520.733 4988.093 -0.305 0.761355
## V58 2275.175 5495.630 0.414 0.680124
## V59 -5415.427 5721.475 -0.947 0.347099
## V60 7152.015 4754.317 1.504 0.136935
## V61 -4494.234 4512.937 -0.996 0.322702
## V62 3662.045 4811.634 0.761 0.449129
## V63 13993.987 7098.106 1.972 0.052563 .
## V64 -23252.133 8973.839 -2.591 0.011604 *
## V65 4373.731 10048.591 0.435 0.664695
## V66 4580.913 10146.146 0.451 0.653011
## V67 -837.676 10747.974 -0.078 0.938097
## V68 -7074.425 10852.430 -0.652 0.516587
## V69 9506.571 9739.256 0.976 0.332325
## V70 -2765.100 9519.031 -0.290 0.772295
## V71 -1125.135 8586.061 -0.131 0.896113
## V72 -7295.096 7489.488 -0.974 0.333341
## V73 17059.811 6522.093 2.616 0.010870 *
## V74 -9889.553 6543.945 -1.511 0.135162
## V75 -325.615 6125.973 -0.053 0.957759
## V76 782.219 5421.002 0.144 0.885677
## V77 8058.935 5793.416 1.391 0.168554
## V78 -15869.978 6448.208 -2.461 0.016282 *
## V79 21768.619 6435.678 3.382 0.001172 **
## V80 -28338.145 8180.874 -3.464 0.000906 ***
## V81 8523.317 10053.153 0.848 0.399384
## V82 22319.451 12098.046 1.845 0.069226 .
## V83 -17244.722 13991.685 -1.232 0.221829
## V84 -18325.836 14959.964 -1.225 0.224627
## V85 33345.457 13868.197 2.404 0.018808 *
## V86 -7955.157 14571.278 -0.546 0.586813
## V87 -7837.966 16141.553 -0.486 0.628762
## V88 -1815.552 17261.928 -0.105 0.916532
## V89 631.595 15684.751 0.040 0.967992
## V90 -2701.955 16187.612 -0.167 0.867911
## V91 4375.678 19400.005 0.226 0.822199
## V92 12925.188 16456.244 0.785 0.434816
## V93 -7441.235 12417.883 -0.599 0.550923
## V94 -2464.532 11815.234 -0.209 0.835366
## V95 -2090.635 9666.576 -0.216 0.829394
## V96 10912.352 9950.716 1.097 0.276505
## V97 -20331.405 11022.234 -1.845 0.069270 .
## V98 3948.443 8227.133 0.480 0.632753
## V99 6358.930 8652.372 0.735 0.464800
## V100 -263.365 4104.463 -0.064 0.949019
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.074 on 71 degrees of freedom
## Multiple R-squared: 0.997, Adjusted R-squared: 0.9928
## F-statistic: 237.5 on 100 and 71 DF, p-value: < 2.2e-16
El valor R2 ajustado obtenido es extremadamente alto, alcanzando un valor de 0.9928. Esto sugiere que el modelo es capaz de predecir con una gran precisión el contenido en grasa de las observaciones con las que se ha entrenado. Un R2 ajustado cercano a 1 indica que una gran proporción de la variabilidad en la variable dependiente (contenido en grasa) es explicada por el modelo.
Sin embargo, es importante tener en cuenta que, aunque el modelo en su conjunto es significativo (p-value: < 2.2e-16), es decir, es estadísticamente válido, muy pocos de los predictores lo son a nivel individual. Esto se debe a presencia de multicolinealidad entre los predictores.
La capacidad de un modelo de regresión para predecir nuevas observaciones que no han participado en el ajuste es una medida fundamental de su rendimiento. El Mean Square Error (MSE) es una de las métricas más comunes utilizadas para evaluar la calidad de las predicciones de un modelo de regresión.
El MSE es una medida de cuánto difieren las predicciones del modelo de los valores reales en el conjunto de datos de prueba o validación. Cuanto menor sea el valor del MSE, mejor será el rendimiento del modelo en términos de predicción. El MSE se calcula como la suma de los cuadrados de las diferencias entre las predicciones del modelo y los valores reales, dividido por el número de observaciones.
Matemáticamente, el MSE se expresa como:
\[MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2\]
Donde:
- \(n\) es el número de observaciones en el conjunto de datos de prueba.
- \(y_i\) es el valor real de la variable dependiente para la observación \(i\).
- \(\hat{y}_i\) es la predicción del modelo para la observación \(i\).
Para evaluar la capacidad de un modelo de regresión en la predicción de nuevas observaciones, se utiliza el MSE como función de coste, y ademas, utilizando un conjunto de datos independiente (testing).
Un MSE bajo indicará que el modelo es capaz de hacer predicciones precisas en nuevos datos.
# MSE empleando las observaciones de entrenamiento
training_mse <- mean((modelo$fitted.values - training$fat)^2)
training_mse
## [1] 0.4765372
# MSE empleando nuevas observaciones
predicciones <- predict(modelo, newdata = test)
test_mse <- mean((predicciones - test$fat)^2)
test_mse
## [1] 14.54659
Se observa que el modelo tiene un MSE muy bajo (0.48) cuando predice las mismas observaciones con las que se ha entrenado, pero 30 veces más alto (14.54) al predecir nuevas observaciones. Esto significa que el modelo no es útil, ya que el objetivo es aplicarlo para predecir el contenido en grasa de futuras muestras de carne. A este problema se le conoce como overfitting. Una de las causas por las que un modelo puede sufrir overfitting es la incorporación de predictores innecesarios, que no aportan información o que la información que aportan es redundante.
La función pcr() del paquete
pls en R es una herramienta valiosa para
abordar el overfitting al reducir la dimensionalidad de los datos y
encontrar un número adecuado de componentes principales mediante la
validación cruzada, lo que debería mejorar la capacidad de predicción
del modelo en nuevos datos.
set.seed(123)
modelo_pcr <- pcr(formula = fat ~ .,
data = training,
scale = TRUE,
validation = "CV")
modelo_pcr_CV <- MSEP(modelo_pcr,
estimate = "CV")
which.min(modelo_pcr_CV$val)
## [1] 22
par(mfrow = c(1,2))
plot(modelo_pcr_CV$val,
main = "MSE vs nº componentes",
type = "l",
ylab = "MSE",
col = "blue",
xlab = "Componentes")
plot(modelo_pcr_CV$val,
main = "zoom",
type = "l",
ylab = "MSE",
xlab = "Componentes",
col = "blue",
ylim = c(0,20))
# Test-MSE
predicciones <- predict(modelo_pcr, newdata = test, ncomp = 18)
test_mse <- mean((predicciones - test$fat)^2)
test_mse
## [1] 4.460186
El número óptimo de componentes principales identificado por cross validation es de 18. Empleando este número en la PCR se consigue reducir el test-MSE a 4.52.