FIFA 21 adalah sebuah video gim simulasi sepakbola yang diterbitkan oleh Electronics Arts. Gim ini adalah seri ke-28 dari seri FIFA, yang dirilis pada 9 Oktober 2020 di berbagai platform. Ada beberapa jenis permainan dalam gim ini, seperti Ultimate Team, Career Mode, VOLTA Football, Pro Clubs, dll. Kualitas seorang pemain pada gim ini dilihat dari Overall Ratingnya. Overall Rating ditentukan dari beberapa attribut dari seorang pemain dalam gim ini. Manchester United adalah sebuah klub sepakbola profesional yang berbasis di Old Trafford, Greater Manchester, Inggris. Klub ini berkompetisi di Premier League, kompetisi tertinggi di sepakbola Inggris. Klub ini juga menjadi salah satu klub dengan pendukung terbanyak di dunia. Beberapa pemain yang merumput saat ini adalah Marcus Rashford, Bruno Fernandes, dan Aaron Wan-Bissaka
library(car)
## Loading required package: carData
library(corrplot)
## corrplot 0.92 loaded
library(MASS)
library(olsrr)
##
## Attaching package: 'olsrr'
## The following object is masked from 'package:MASS':
##
## cement
## The following object is masked from 'package:datasets':
##
## rivers
library(leaps)
library(plyr)
Dataset ini diambil dari web futwiz.com, yang merupakan salah satu
website yang menyediakan database overall rating seluruh pemain yang ada
di FIFA 21. Untuk kasus kali ini, diambil data pemain Manchester United,
kecuali penjaga gawang. Didapatkan 29 data dengan peubah respon
OVR dan 6 peubah penjelas (PAC,
SHO, PAS, DRI, DEF,
dan PHY).
datamu <- read.csv("RatingMUFIFA21.csv")
datamu <- datamu[,-1]
datamu$POS <- NULL
summary(datamu)
## OVR PAC SHO PAS
## Min. :63.00 Min. :44.00 Min. :36.00 Min. :54.00
## 1st Qu.:75.00 1st Qu.:69.00 1st Qu.:53.00 1st Qu.:65.00
## Median :79.00 Median :76.00 Median :68.00 Median :70.00
## Mean :77.86 Mean :73.72 Mean :64.55 Mean :70.59
## 3rd Qu.:83.00 3rd Qu.:81.00 3rd Qu.:78.00 3rd Qu.:76.00
## Max. :87.00 Max. :95.00 Max. :85.00 Max. :88.00
## DRI DEF PHY
## Min. :56.00 Min. :27.00 Min. :44.00
## 1st Qu.:70.00 1st Qu.:55.00 1st Qu.:68.00
## Median :76.00 Median :71.00 Median :74.00
## Mean :74.34 Mean :63.86 Mean :72.59
## 3rd Qu.:80.00 3rd Qu.:77.00 3rd Qu.:78.00
## Max. :87.00 Max. :81.00 Max. :85.00
korelasi <- cor(datamu)
korelasi
## OVR PAC SHO PAS DRI DEF
## OVR 1.00000000 0.05087659 0.5743234 0.79088593 0.70854738 0.15618077
## PAC 0.05087659 1.00000000 0.1956354 0.04403422 0.39214704 -0.35155858
## SHO 0.57432335 0.19563540 1.0000000 0.71454763 0.74975955 -0.45284949
## PAS 0.79088593 0.04403422 0.7145476 1.00000000 0.84068932 -0.01385047
## DRI 0.70854738 0.39214704 0.7497595 0.84068932 1.00000000 -0.30891585
## DEF 0.15618077 -0.35155858 -0.4528495 -0.01385047 -0.30891585 1.00000000
## PHY 0.51093113 -0.11282645 0.1158662 0.17071198 0.07982555 0.54418541
## PHY
## OVR 0.51093113
## PAC -0.11282645
## SHO 0.11586622
## PAS 0.17071198
## DRI 0.07982555
## DEF 0.54418541
## PHY 1.00000000
corrplot(korelasi, method = "number")
## Pemodelan
model.reg <- lm(OVR~.,data=datamu)
summary(model.reg)
##
## Call:
## lm(formula = OVR ~ ., data = datamu)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.6814 -1.4540 -0.3747 1.2559 6.1886
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.7725418 8.0541373 2.207 0.0381 *
## PAC -0.0184793 0.0669819 -0.276 0.7852
## SHO -0.0241283 0.0915084 -0.264 0.7945
## PAS 0.3570118 0.2064369 1.729 0.0977 .
## DRI 0.2360556 0.2118877 1.114 0.2773
## DEF 0.0009604 0.0765219 0.013 0.9901
## PHY 0.2782687 0.1018399 2.732 0.0122 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.17 on 22 degrees of freedom
## Multiple R-squared: 0.7893, Adjusted R-squared: 0.7318
## F-statistic: 13.73 on 6 and 22 DF, p-value: 1.848e-06
vif(model.reg)
## PAC SHO PAS DRI DEF PHY
## 1.773661 4.792689 8.831228 8.131389 4.354707 2.252408
ols_vif_tol(model.reg)
## Variables Tolerance VIF
## 1 PAC 0.5638056 1.773661
## 2 SHO 0.2086511 4.792689
## 3 PAS 0.1132345 8.831228
## 4 DRI 0.1229802 8.131389
## 5 DEF 0.2296366 4.354707
## 6 PHY 0.4439693 2.252408
ols_eigen_cindex(model.reg)
## Eigenvalue Condition Index intercept PAC SHO
## 1 6.8647911497 1.000000 1.128267e-04 0.0002874929 0.0001949268
## 2 0.0875621722 8.854324 7.698041e-05 0.0062567833 0.0278543418
## 3 0.0287072010 15.463872 5.119813e-03 0.3093293064 0.0795899462
## 4 0.0091083976 27.453181 3.408437e-04 0.0018807068 0.0592508928
## 5 0.0059247449 34.039160 4.648752e-01 0.3710300414 0.2102082703
## 6 0.0031368565 46.780659 5.281426e-01 0.0034706310 0.4882977007
## 7 0.0007694782 94.452945 1.331735e-03 0.3077450382 0.1346039213
## PAS DRI DEF PHY
## 1 3.394626e-05 2.915948e-05 0.0002734593 0.0001314793
## 2 2.240934e-04 5.350924e-04 0.0966256384 0.0025797536
## 3 3.655875e-03 4.537027e-07 0.0091187916 0.0014496207
## 4 4.589369e-02 1.556647e-02 0.0394523803 0.3793647296
## 5 7.814963e-04 5.648051e-03 0.3094561140 0.0350829728
## 6 4.158057e-02 8.706624e-02 0.1856119501 0.4110546614
## 7 9.078303e-01 8.911545e-01 0.3594616663 0.1703367825
subreg <- regsubsets(OVR ~ ., data = datamu)
summ_subreg <- summary(subreg)
summ_subreg
## Subset selection object
## Call: regsubsets.formula(OVR ~ ., data = datamu)
## 6 Variables (and intercept)
## Forced in Forced out
## PAC FALSE FALSE
## SHO FALSE FALSE
## PAS FALSE FALSE
## DRI FALSE FALSE
## DEF FALSE FALSE
## PHY FALSE FALSE
## 1 subsets of each size up to 6
## Selection Algorithm: exhaustive
## PAC SHO PAS DRI DEF PHY
## 1 ( 1 ) " " " " "*" " " " " " "
## 2 ( 1 ) " " " " "*" " " " " "*"
## 3 ( 1 ) " " " " "*" "*" " " "*"
## 4 ( 1 ) " " "*" "*" "*" " " "*"
## 5 ( 1 ) "*" "*" "*" "*" " " "*"
## 6 ( 1 ) "*" "*" "*" "*" "*" "*"
plot(summ_subreg$rsq, xlab = "Number of Variables", ylab = "R-squared", type
= "l")
Terlihat pada plot bahwa kenaikan 𝑅-Squared dari k = 1 ke k = 2 paling
signifikan dibandingkan dengan yang lainnya sehingga model yang dipilih
adalah ketika k = 2. Namun, belum dapat memastikan peubah penjelas mana
saja akan menghasilkan model terbaik.
plot(summ_subreg$adjr2, xlab = "Number of Variables", ylab = "Adjusted RSq",
type = "l")
adj_r2_max = which.max(summ_subreg$adjr2)
points(adj_r2_max, summ_subreg$adjr2[adj_r2_max], col ="red", cex = 2, pch =
20)
Terlihat pada plot bahwa nilai adjusted r-squared terbesar adalah ketika
peubah penjelas yang diikutkan sebanyak tiga peubah. Namun, belum dapat
memastikan peubah penjelas mana saja akan menghasilkan model
terbaik.
plot(summ_subreg$cp, xlab = "Number of Variables", ylab = "Cp", type = "l")
cp_min = which.min(summ_subreg$cp)
points(cp_min, summ_subreg$cp[cp_min], col = "red", cex = 2, pch = 20)
rsq <- as.matrix(summ_subreg$rsq)
rss <- as.matrix(summ_subreg$rss)
adjr2 <- as.matrix(summ_subreg$adjr2)
cp <- as.matrix(summ_subreg$cp)
summ <- as.table(cbind(as.matrix(summ_subreg$outmat),
rsq, rss, adjr2, cp))
colnames(summ) <- c("PAC", "SHO", "PAS", "DRI", "DEF", "PHY", "rsq", "rss", "adjr2", "cp")
par(mfrow = c(1,2))
plot(subreg, scale = "adjr2")
plot(subreg, scale = "Cp")
Berdasarkan kriteria Adjusted R-squared, model yang dipilih adalah model dengan tiga peubah penjelas, yaitu PAS, DRI, dan PHY. Berdasarkan kriteria R-squared dan Cp Mallows, model yang dipilih adalah model dengan dua peubah penjelas, yaitu PAS dan PHY.
reg1 <- lm(OVR ~ PAS + DRI + PHY, datamu)
reg2 <- lm(OVR ~ PAS + PHY, datamu)
summary(reg1)
##
## Call:
## lm(formula = OVR ~ PAS + DRI + PHY, data = datamu)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.730 -1.490 -0.522 1.412 6.239
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 18.02874 6.74912 2.671 0.013099 *
## PAS 0.37154 0.12322 3.015 0.005821 **
## DRI 0.17944 0.13029 1.377 0.180623
## PHY 0.27921 0.06539 4.270 0.000247 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.989 on 25 degrees of freedom
## Multiple R-squared: 0.7872, Adjusted R-squared: 0.7617
## F-statistic: 30.83 on 3 and 25 DF, p-value: 1.464e-08
summary(reg2)
##
## Call:
## lm(formula = OVR ~ PAS + PHY, data = datamu)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.0146 -1.8321 -0.4417 1.8705 6.0888
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 22.06225 6.18465 3.567 0.001429 **
## PAS 0.51445 0.06760 7.610 4.45e-08 ***
## PHY 0.26846 0.06603 4.066 0.000394 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.04 on 26 degrees of freedom
## Multiple R-squared: 0.7711, Adjusted R-squared: 0.7534
## F-statistic: 43.78 on 2 and 26 DF, p-value: 4.748e-09
PRESS <- function(model) {
i <- residuals(model)/(1 - lm.influence(model)$hat)
sum(i^2)
}
pred_r_squared <- function(linear.model) {
lm.anova <- anova(linear.model)
tss <- sum(lm.anova$'Sum Sq')
pred.r.squared <- 1-PRESS(linear.model)/(tss)
return(pred.r.squared)
}
model_fit_stats <- function(linear.model) {
r.sqr <- summary(linear.model)$r.squared
adj.r.sqr <- summary(linear.model)$adj.r.squared
pre.r.sqr <- pred_r_squared(linear.model)
PRESS <- PRESS(linear.model)
return.df <- data.frame(r.squared = r.sqr, adj.r.squared = adj.r.sqr, pred.r.squared = pre.r.sqr, press = PRESS)
return(return.df)
}
ldply(list(reg1, reg2), model_fit_stats)
## r.squared adj.r.squared pred.r.squared press
## 1 0.7872033 0.7616676 0.6565108 360.4742
## 2 0.7710563 0.7534453 0.6841665 331.4509
Model yang dipilih adalah model dengan nilai PRESS terkecil dan nilai Predictive R-squared tertinggi. Model yang memenuhi syarat tersebut adalah model reg2.
Model yang didapat adalah: \(OVR = 22.06225 + 0.51445PAS + 0.26846PHY\)
Note: Proyek ini adalah Tugaa Akhir yang saya buat untuk mata kuliah Analisis Regresi