R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Install dan load library

if (!require(nnet)) install.packages(“nnet”) if (!require(MASS)) install.packages(“MASS”) if (!require(caret)) install.packages(“caret”) if (!require(ggplot2)) install.packages(“ggplot2”) if (!require(dplyr)) install.packages(“dplyr”) if (!require(knitr)) install.packages(“knitr”) if (!require(corrplot)) install.packages(“corrplot”) if (!require(MVN)) install.packages(“MVN”)

library(nnet) library(MASS) library(caret) library(ggplot2) library(dplyr) library(knitr) library(corrplot) library(MVN)

1. LOAD DATA

data(iris) str(iris) head(iris) dim(iris)

2. STATISTIKA DESKRIPTIF

summary(iris)

Mean per kelompok

aggregate(. ~ Species, data = iris, FUN = mean)

Standar deviasi per kelompok

aggregate(. ~ Species, data = iris, FUN = sd)

3. VISUALISASI DATA

Boxplot per variabel

par(mfrow = c(2,2)) for(i in 1:4){ boxplot(iris[,i] ~ iris$Species, main = names(iris)[i], xlab = “Species”, ylab = names(iris)[i], col = c(“lightblue”, “lightgreen”, “lightyellow”)) } par(mfrow = c(1,1))

Scatter plot matrix

pairs(iris[,1:4], col = as.numeric(iris$Species), main = “Scatter Plot Matrix - Iris Dataset”)

4. UJI ASUMSI

— Asumsi LDA —

4a. Uji Normalitas Multivariat (Mardia’s Test)

mvn_result <- mvn(data = iris[,1:4], mvn_test = “mardia”) print(mvn_result\(multivariateNormality) print(mvn_result\)univariateNormality)

4b. Uji Homogenitas Matriks Kovarians (Box’s M Test)

Menggunakan fungsi manual atau dari biotools

if (!require(biotools)) install.packages(“biotools”) library(biotools) boxM_result <- boxM(iris[,1:4], iris$Species) print(boxM_result)

4c. Uji Multikolinearitas (Korelasi antar variabel)

cor_matrix <- cor(iris[,1:4]) print(round(cor_matrix, 3)) corrplot(cor_matrix, method = “color”, addCoef.col = “black”, title = “Matriks Korelasi Variabel Iris”, mar = c(0,0,1,0))

5. PEMBAGIAN DATA TRAINING DAN TESTING

set.seed(123) index <- createDataPartition(iris$Species, p = 0.8, list = FALSE) train_data <- iris[index, ] test_data <- iris[-index, ]

cat(“Jumlah data training:”, nrow(train_data), “”) cat(“Jumlah data testing:”, nrow(test_data), “”)

6. MULTINOMIAL LOGISTIC REGRESSION

Set referensi kelas

train_data\(Species <- relevel(train_data\)Species, ref = “setosa”)

Model Multinomial

model_multinom <- multinom(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = train_data, trace = FALSE)

Ringkasan model

summary(model_multinom)

Nilai Z dan p-value

z_scores <- summary(model_multinom)\(coefficients / summary(model_multinom)\)standard.errors p_values <- 2 * (1 - pnorm(abs(z_scores))) print(“Z-scores:”) print(round(z_scores, 4)) print(“P-values:”) print(round(p_values, 4))

Odds Ratio

odds_ratio <- exp(coef(model_multinom)) print(“Odds Ratio:”) print(round(odds_ratio, 4))

Prediksi pada data testing

pred_multinom <- predict(model_multinom, newdata = test_data)

Confusion Matrix Multinomial

cm_multinom <- confusionMatrix(pred_multinom, test_data$Species) print(cm_multinom)

Akurasi

acc_multinom <- cm_multinom$overall[“Accuracy”] cat(“Akurasi Multinomial:”, round(acc_multinom * 100, 2), “%”)

7. LINEAR DISCRIMINANT ANALYSIS (LDA)

Model LDA

model_lda <- lda(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = train_data)

Ringkasan LDA

print(model_lda)

Proporsi varians yang dijelaskan

cat(“Varians LD:”) print(round(model_lda\(svd^2 / sum(model_lda\)svd^2), 4))

Prediksi pada data testing

pred_lda <- predict(model_lda, newdata = test_data)

Confusion Matrix LDA

cm_lda <- confusionMatrix(pred_lda\(class, test_data\)Species) print(cm_lda)

Akurasi

acc_lda <- cm_lda$overall[“Accuracy”] cat(“Akurasi LDA:”, round(acc_lda * 100, 2), “%”)

8. VISUALISASI LDA

Plot LDA scores

lda_scores <- as.data.frame(predict(model_lda, train_data)\(x) lda_scores\)Species <- train_data$Species

ggplot(lda_scores, aes(x = LD1, y = LD2, color = Species, shape = Species)) + geom_point(size = 3, alpha = 0.8) + stat_ellipse(level = 0.95) + labs(title = “Plot Linear Discriminant Analysis (LDA)”, x = “LD1”, y = “LD2”) + theme_bw() + scale_color_manual(values = c(“red”, “blue”, “green3”))

9. PERBANDINGAN PERFORMA MODEL

Tabel perbandingan

comparison <- data.frame( Metode = c(“Multinomial Logistic Regression”, “Linear Discriminant Analysis”), Akurasi = c(round(acc_multinom * 100, 2), round(acc_lda * 100, 2)), Kappa = c(round(cm_multinom\(overall["Kappa"], 4), round(cm_lda\)overall[“Kappa”], 4)) ) print(comparison)

Sensitivity dan Specificity per kelas - Multinomial

cat(“— Performa per Kelas: Multinomial —”) print(cm_multinom$byClass[, c(“Sensitivity”, “Specificity”, “F1”)])

cat(“— Performa per Kelas: LDA —”) print(cm_lda$byClass[, c(“Sensitivity”, “Specificity”, “F1”)])

10. CROSS VALIDATION (10-fold)

set.seed(123) ctrl <- trainControl(method = “cv”, number = 10)

Cross-val Multinomial

cv_multinom <- train(Species ~ ., data = iris, method = “multinom”, trControl = ctrl, trace = FALSE) cat(“CV Akurasi Multinomial:”, round(max(cv_multinom\(results\)Accuracy)*100,2), “%”)

Cross-val LDA

cv_lda <- train(Species ~ ., data = iris, method = “lda”, trControl = ctrl) cat(“CV Akurasi LDA:”, round(max(cv_lda\(results\)Accuracy)*100,2), “%”)

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.