# Load library
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(e1071)
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
## 
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(rpart)

data_train <- read.csv("C:/Users/LENOVO D330/Downloads/data_train.csv")
data_test <- read.csv("C:/Users/LENOVO D330/Downloads/data_test.csv")

kategorik_vars <- c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar",
                    "minat_pada_pelajaran", "kesulitan_ekonomi", "motivasi_belajar")

data_train[kategorik_vars] <- lapply(data_train[kategorik_vars], as.factor)
data_test[kategorik_vars[-length(kategorik_vars)]] <- lapply(data_test[kategorik_vars[-length(kategorik_vars)]], as.factor)

model_svm <- svm(motivasi_belajar ~ ., data = data_train)
pred_svm <- predict(model_svm, newdata = data_test)

model_rf <- randomForest(motivasi_belajar ~ ., data = data_train, ntree = 100)
pred_rf <- predict(model_rf, newdata = data_test)

model_dt <- rpart(motivasi_belajar ~ ., data = data_train, method = "class")
pred_dt <- predict(model_dt, newdata = data_test, type = "class")

hasil <- data.frame(
  id = 1:nrow(data_test),
  prediksi_SVM = pred_svm,
  prediksi_RF = pred_rf,
  prediksi_DT = pred_dt
)

write.csv(hasil, "hasil_prediksi_uas.csv", row.names = FALSE)

print(hasil)
##    id prediksi_SVM prediksi_RF prediksi_DT
## 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