library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Loading required package: lattice
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(e1071)
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.4.3
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
train.data <- read_excel("D:/Data Mining/datatraining.xlsx")
test.data <- read_excel("D:/Data Mining/datatesting.xlsx")
print(train.data)
## # A tibble: 200 × 11
##     usia jenis_kelamin nilai_rata_rata dukungan_orang_tua fasilitas_belajar
##    <dbl> <chr>                   <dbl> <chr>              <chr>            
##  1    15 0                        85.2 1                  2                
##  2    19 0                        60.9 2                  3                
##  3    15 0                        60.5 2                  1                
##  4    15 1                        78.6 3                  2                
##  5    16 1                        66.2 2                  1                
##  6    18 1                        85.9 2                  1                
##  7    16 1                        45.2 1                  3                
##  8    16 0                        91.6 2                  2                
##  9    15 1                        74.1 2                  1                
## 10    21 1                        88.2 3                  3                
## # ℹ 190 more rows
## # ℹ 6 more variables: jam_belajar_per_hari <dbl>, kehadiran_persen <dbl>,
## #   minat_pada_pelajaran <chr>, kesulitan_ekonomi <chr>,
## #   jarak_rumah_sekolah <dbl>, motivasi_belajar <chr>
print(test.data)
## # A tibble: 15 × 10
##     usia jenis_kelamin nilai_rata_rata dukungan_orang_tua fasilitas_belajar
##    <dbl> <chr>                   <dbl> <chr>              <chr>            
##  1    15 1                        90.2 2                  2                
##  2    19 0                        79.6 1                  1                
##  3    17 0                        66.9 2                  3                
##  4    20 1                        85.6 3                  1                
##  5    16 1                        65.9 3                  1                
##  6    21 0                        70.8 2                  3                
##  7    21 0                        86.3 3                  2                
##  8    19 1                        84.3 3                  3                
##  9    17 0                        79.5 2                  2                
## 10    18 0                        74.4 1                  2                
## 11    16 1                        76.9 3                  2                
## 12    15 1                        81.9 2                  2                
## 13    17 1                        83.2 3                  2                
## 14    17 0                        65.2 3                  3                
## 15    20 1                        62   2                  1                
## # ℹ 5 more variables: jam_belajar_per_hari <dbl>, kehadiran_persen <dbl>,
## #   minat_pada_pelajaran <chr>, kesulitan_ekonomi <chr>,
## #   jarak_rumah_sekolah <dbl>
train.data[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi", "motivasi_belajar")] <- lapply(train.data[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi", "motivasi_belajar")], as.factor)
str(train.data)
## 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 ...
test.data[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi")] <- lapply(test.data[c("jenis_kelamin", "dukungan_orang_tua", "fasilitas_belajar", "minat_pada_pelajaran", "kesulitan_ekonomi")], as.factor)
str(test.data)
## 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 ...

#Metode SVM

svm_model <- svm(motivasi_belajar ~ ., data = train.data, kernel = "radial")
svm_pred <- predict(svm_model, newdata = test.data)
head(svm_pred, 15)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
##  2  2  1  2  1  2  2  2  2  2  1  1  2  1  1 
## Levels: 1 2 3

#Random Forest

model_rf <- randomForest(motivasi_belajar ~ ., data = train.data)
pred_rf <- predict(model_rf, newdata = test.data)
head(pred_rf, 15)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
##  2  2  1  2  1  2  2  2  2  2  1  1  2  2  1 
## Levels: 1 2 3

#Decision Tree

tree_model <- rpart(motivasi_belajar ~ ., data = train.data, method = "class")
tree_pred <- predict(tree_model, newdata = test.data, type = "class")
head(tree_pred, 15)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
##  2  2  1  2  1  2  2  3  1  2  2  1  1  2  1 
## Levels: 1 2 3
rpart.plot(tree_model, type = 2, extra = 104, fallen.leaves = TRUE, cex = 0.7)