library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(caret)    
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: lattice
library(e1071)    
library(randomForest) 
## Warning: package 'randomForest' was built under R version 4.4.3
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
## The following object is masked from 'package:dplyr':
## 
##     combine
library(rpart)    
library(rpart.plot) 
## Warning: package 'rpart.plot' was built under R version 4.4.3
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
data_train <- read_excel("D:/Semester 6/UASDATMIN/datatraining.xlsx")
data_test <- read_excel("D:/Semester 6/UASDATMIN/datatesting.xlsx")
data_train[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi", "motivasi_belajar")]<-
  lapply(data_train[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi", "motivasi_belajar")], as.factor)
str(data_train)
## tibble [200 × 11] (S3: tbl_df/tbl/data.frame)
##  $ usia                : num [1:200] 15 19 15 15 16 18 16 16 15 21 ...
##  $ jenis_kelamin       : Factor w/ 2 levels "0","1": 1 1 1 2 2 2 2 1 2 2 ...
##  $ nilai_rata_rata     : num [1:200] 85.2 60.9 60.5 78.6 66.2 85.9 45.2 91.6 74.1 88.2 ...
##  $ dukungan_orang_tua  : Factor w/ 3 levels "1","2","3": 1 2 2 3 2 2 1 2 2 3 ...
##  $ fasilitas_belajar   : Factor w/ 3 levels "1","2","3": 2 3 1 2 1 1 3 2 1 3 ...
##  $ jam_belajar_per_hari: num [1:200] 4.1 3.8 6.1 5.1 5.5 3.7 2.8 6.2 4.6 3 ...
##  $ kehadiran_persen    : num [1:200] 79.7 89.8 86.7 78.5 81 85.4 78.9 78.1 96.8 82.1 ...
##  $ minat_pada_pelajaran: Factor w/ 3 levels "1","2","3": 2 2 1 3 1 2 1 2 2 3 ...
##  $ kesulitan_ekonomi   : Factor w/ 2 levels "0","1": 1 2 2 2 2 2 1 1 1 2 ...
##  $ jarak_rumah_sekolah : num [1:200] 11.5 6.3 15.9 9.8 3.5 1 6.4 4.9 6.5 9.5 ...
##  $ motivasi_belajar    : Factor w/ 3 levels "1","2","3": 1 2 1 2 1 1 1 2 1 3 ...
data_test[c("jenis_kelamin","dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi")] <- 
  lapply(data_test[c("jenis_kelamin","dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi")], as.factor)
str(data_test)
## tibble [15 × 10] (S3: tbl_df/tbl/data.frame)
##  $ usia                : num [1:15] 15 19 17 20 16 21 21 19 17 18 ...
##  $ jenis_kelamin       : Factor w/ 2 levels "0","1": 2 1 1 2 2 1 1 2 1 1 ...
##  $ nilai_rata_rata     : num [1:15] 90.2 79.6 66.9 85.6 65.9 70.8 86.3 84.3 79.5 74.4 ...
##  $ dukungan_orang_tua  : Factor w/ 3 levels "1","2","3": 2 1 2 3 3 2 3 3 2 1 ...
##  $ fasilitas_belajar   : Factor w/ 3 levels "1","2","3": 2 1 3 1 1 3 2 3 2 2 ...
##  $ jam_belajar_per_hari: num [1:15] 5.4 4.6 2.9 3.9 5.3 1.9 4.4 1.5 2 5.5 ...
##  $ kehadiran_persen    : num [1:15] 78.3 88.2 76.3 89.4 74 100 100 92.1 84.5 90.3 ...
##  $ minat_pada_pelajaran: Factor w/ 3 levels "1","2","3": 2 3 1 1 1 1 1 1 3 3 ...
##  $ kesulitan_ekonomi   : Factor w/ 2 levels "0","1": 2 1 1 1 2 2 1 1 1 1 ...
##  $ jarak_rumah_sekolah : num [1:15] 4.7 10.8 11.8 5.7 3.1 7.1 8.2 5.4 4.2 10.7 ...
svm_model <- svm(motivasi_belajar ~ ., 
                 data = data_train,
                 kernel = "radial", # Radial basis function kernel
                 probability = TRUE)
svm_pred <- predict(svm_model, newdata = data_test)
set.seed(123) # Untuk reproduktibilitas
rf_model <- randomForest(motivasi_belajar ~ .,
                        data = data_train,
                        ntree = 500, # Jumlah trees
                        importance = TRUE)
rf_pred <- predict(rf_model, newdata = data_test)
dt_model <- rpart(motivasi_belajar ~ .,
                  data = data_train,
                  method = "class", 
                  control = rpart.control(minsplit = 20, cp = 0.01))
rpart.plot(dt_model, type = 4, extra = 104)

dt_pred <- predict(dt_model, newdata = data_test, type = "class")
results <- data.frame(
  No = 1:nrow(data_test),
  SVM_Prediction = svm_pred,
  RF_Prediction = rf_pred,
  DT_Prediction = dt_pred
)
print(results)
##    No SVM_Prediction RF_Prediction DT_Prediction
## 1   1              2             2             2
## 2   2              2             2             2
## 3   3              1             1             1
## 4   4              2             2             2
## 5   5              1             1             1
## 6   6              2             2             2
## 7   7              2             2             2
## 8   8              2             2             3
## 9   9              2             2             1
## 10 10              2             2             2
## 11 11              1             1             2
## 12 12              1             1             1
## 13 13              2             2             1
## 14 14              1             2             2
## 15 15              1             1             1