library(nnet)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.4.3
library(ggplot2)
library(pscl)
## Warning: package 'pscl' was built under R version 4.4.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.

Pendahuluan

Penelitian ini bertujuan untuk memprediksi jenis strategi coping stres mahasiswa selama ujian akhir. yang digunakan individu berdasarkan karakteristik kepribadian dan faktor pendukung lainnya seperti jam belajar, dukungan sosial, dan kebiasaan tidur. Metode yang digunakan adalah Regresi Multinomial, mengingat target variabel memiliki lebih dari dua kategori.

Memuat Dataset

data <- read.csv("C:/Users/Darren Eduardo/Downloads/anmul regresi/multinomial_coping.csv", header = TRUE)
str(data)
## 'data.frame':    200 obs. of  10 variables:
##  $ Neuroticism      : num  0.3745 0.156 0.0206 0.1834 0.6119 ...
##  $ Extraversion     : num  0.9507 0.0581 0.9699 0.3042 0.1395 ...
##  $ Openness         : num  0.732 0.866 0.832 0.525 0.292 ...
##  $ Agreeableness    : num  0.599 0.601 0.212 0.432 0.366 ...
##  $ Conscientiousness: num  0.156 0.708 0.182 0.291 0.456 ...
##  $ Study_Hours      : num  4.27 2 4.57 4.92 4.84 ...
##  $ Social_Support   : int  5 1 1 4 1 3 3 1 1 4 ...
##  $ Sleep_Hours      : int  8 5 6 6 5 4 5 8 4 6 ...
##  $ Used_Counseling  : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ Coping_Strategy  : chr  "Avoidance" "Avoidance" "Avoidance" "Avoidance" ...

Mengonversi Variabel Target ke Faktor

data$Coping_Strategy <- as.factor(data$Coping_Strategy)

Pada R, regresi multinomial hanya dapat dijalankan jika variabel target adalah tipe faktor (categorical). Fungsi as.factor() digunakan untuk memastikan bahwa Coping_Strategy dikenali sebagai variabel kategorik, bukan numerik atau string biasa. Ini penting karena paket nnet::multinom() akan memperlakukan kategori ini sebagai kelas klasifikasi, dan menghitung probabilitas relatif terhadap referensi baseline (kategori pertama secara default). Tanpa langkah ini, R bisa menghasilkan error atau hasil model yang tidak valid. Mengonversi ke faktor adalah langkah krusial agar model dapat mengenali struktur target sebagai klasifikasi multinomial.

Membangun Model Multinomial

model_multi <- multinom(Coping_Strategy ~ Neuroticism + Extraversion + Openness +
                        Agreeableness + Conscientiousness + Study_Hours +
                        Social_Support + Sleep_Hours + Used_Counseling, data = data)
## # weights:  33 (20 variable)
## initial  value 219.722458 
## iter  10 value 72.615998
## iter  20 value 60.478904
## iter  30 value 57.717214
## iter  40 value 57.141540
## iter  50 value 57.138256
## iter  60 value 57.137689
## final  value 57.137473 
## converged

Model di atas menggunakan fungsi multinom() dari paket nnet, yang membangun regresi logistik multinomial, cocok untuk target dengan >2 kategori (multiclass). Formula menunjukkan bahwa Coping_Strategy diprediksi oleh 9 prediktor: 5 kepribadian Big Five (Neuroticism, Extraversion, Openness, Agreeableness, Conscientiousness). 4 faktor gaya hidup (Study_Hours, Social_Support, Sleep_Hours, Used_Counseling). Model ini menghasilkan beberapa fungsi logit, satu untuk setiap kategori (k-1, di mana k = jumlah kategori pada target). Secara internal, R memilih kategori baseline dan menghitung koefisien log-odds dari kategori lain terhadap baseline. Setiap koefisien menunjukkan pengaruh satu unit perubahan pada prediktor terhadap probabilitas relatif memilih strategi tertentu dibanding baseline. Catatan: Pemodelan ini tidak mengasumsikan normalitas residual seperti regresi linear, tapi lebih fokus pada akurasi klasifikasi dan probabilitas tiap kategori.

Ringkasan Model

summary(model_multi)
## Call:
## multinom(formula = Coping_Strategy ~ Neuroticism + Extraversion + 
##     Openness + Agreeableness + Conscientiousness + Study_Hours + 
##     Social_Support + Sleep_Hours + Used_Counseling, data = data)
## 
## Coefficients:
##                 (Intercept) Neuroticism Extraversion   Openness Agreeableness
## Emotion-Focused  -266.14581   112.65581   17.1406568 -4.7967994    16.4312604
## Problem-Focused    -7.20184    10.40745    0.7812016  0.5506068    -0.4408279
##                 Conscientiousness Study_Hours Social_Support Sleep_Hours
## Emotion-Focused       -34.9572189  -4.1353418       -2.33834  22.8367889
## Problem-Focused         0.9626115   0.1309941       -1.13235   0.5091093
##                 Used_Counseling
## Emotion-Focused       6.3271277
## Problem-Focused      -0.5218478
## 
## Std. Errors:
##                 (Intercept) Neuroticism Extraversion   Openness Agreeableness
## Emotion-Focused    2.076297   35.892816   50.7112968 53.9690485    54.2842452
## Problem-Focused    1.941805    1.532833    0.9042551  0.8559691     0.9230554
##                 Conscientiousness Study_Hours Social_Support Sleep_Hours
## Emotion-Focused         4.4581323  36.8158179     62.2744263  16.5211000
## Problem-Focused         0.8372651   0.1639718      0.2342743   0.1788688
##                 Used_Counseling
## Emotion-Focused     143.0783880
## Problem-Focused       0.6460429
## 
## Residual Deviance: 114.2749 
## AIC: 154.2749

Sebagian besar koefisien pada strategi Emotion-Focused memiliki standar error tinggi dan nilai p-value > 0.05, yang menunjukkan bahwa prediktor tersebut tidak signifikan untuk kategori ini.

Uji Simultan (Likelihood Ratio Test)

model_null <- multinom(Coping_Strategy ~ 1, data = data)
## # weights:  6 (2 variable)
## initial  value 219.722458 
## iter  10 value 141.138344
## final  value 141.138145 
## converged
anova(model_null, model_multi, test = "Chisq")
## Likelihood ratio tests of Multinomial Models
## 
## Response: Coping_Strategy
##                                                                                                                                      Model
## 1                                                                                                                                        1
## 2 Neuroticism + Extraversion + Openness + Agreeableness + Conscientiousness + Study_Hours + Social_Support + Sleep_Hours + Used_Counseling
##   Resid. df Resid. Dev   Test    Df LR stat. Pr(Chi)
## 1       398   282.2763                              
## 2       380   114.2749 1 vs 2    18 168.0013       0

Jika p-value < 0.05, maka seluruh variabel independen secara bersama-sama berpengaruh signifikan terhadap Coping_Strategy.

Uji Parsial (Z-Test dan P-Value)

z <- summary(model_multi)$coefficients / summary(model_multi)$standard.errors
p <- 2 * (1 - pnorm(abs(z)))
round(p, 4)
##                 (Intercept) Neuroticism Extraversion Openness Agreeableness
## Emotion-Focused       0e+00      0.0017       0.7354   0.9292        0.7621
## Problem-Focused       2e-04      0.0000       0.3876   0.5201        0.6330
##                 Conscientiousness Study_Hours Social_Support Sleep_Hours
## Emotion-Focused            0.0000      0.9106           0.97      0.1669
## Problem-Focused            0.2503      0.4244           0.00      0.0044
##                 Used_Counseling
## Emotion-Focused          0.9647
## Problem-Focused          0.4192

Variabel dengan p < 0.05 dianggap berpengaruh secara signifikan terhadap kategori tertentu.

Uji Kesesuaian Model

pR2(model_multi)
## fitting null model for pseudo-r2
## # weights:  6 (2 variable)
## initial  value 219.722458 
## iter  10 value 141.138344
## final  value 141.138145 
## converged
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
##  -57.1374726 -141.1381451  168.0013450    0.5951663    0.5682924    0.7515169

Nilai McFadden R² > 0.2 menunjukkan bahwa model memiliki kualitas baik dalam menjelaskan variabel target.

Prediksi dan Confusion Matrix

data$Coping_Strategy <- factor(data$Coping_Strategy)
prediksi <- factor(predict(model_multi, newdata = data), levels = levels(data$Coping_Strategy))
conf_matrix <- table(Predicted = prediksi, Actual = data$Coping_Strategy)
print(conf_matrix)
##                  Actual
## Predicted         Avoidance Emotion-Focused Problem-Focused
##   Avoidance             105               0              10
##   Emotion-Focused         0               1               0
##   Problem-Focused        12               0              72

Visualisasi Confusion Matrix

conf_melt <- melt(conf_matrix)
ggplot(conf_melt, aes(x = Actual, y = Predicted, fill = value)) +
  geom_tile() +
  geom_text(aes(label = value), color = "white", size = 5) +
  scale_fill_gradient(low = "lightblue", high = "blue") +
  labs(title = "Confusion Matrix", x = "Actual", y = "Predicted")

Model cukup baik dalam memprediksi Avoidance dan Problem-Focused, tetapi buruk dalam memprediksi Emotion-Focused.

Akurasi Model

mean(prediksi == data$Coping_Strategy)
## [1] 0.89

Akurasi ini menggambarkan seberapa sering model memprediksi kategori dengan benar.

Analisis Korelasi

num_vars <- data[, c("Neuroticism", "Extraversion", "Openness", 
                     "Agreeableness", "Conscientiousness", "Study_Hours", 
                     "Social_Support", "Sleep_Hours", "Used_Counseling")]

cor_matrix <- cor(num_vars)
print(cor_matrix)
##                   Neuroticism Extraversion      Openness Agreeableness
## Neuroticism        1.00000000  -0.08310060 -0.0502544877    0.09977832
## Extraversion      -0.08310060   1.00000000  0.0757611107   -0.03365535
## Openness          -0.05025449   0.07576111  1.0000000000   -0.04724745
## Agreeableness      0.09977832  -0.03365535 -0.0472474457    1.00000000
## Conscientiousness  0.09200011  -0.03688652 -0.0679950534    0.19299837
## Study_Hours        0.03542040  -0.08262476  0.0005152933    0.02653899
## Social_Support     0.02116724   0.01535901  0.0260075672   -0.06104147
## Sleep_Hours       -0.08208604  -0.09312030  0.0262957730   -0.03952090
## Used_Counseling   -0.15728631   0.01223306 -0.0864581254   -0.04734736
##                   Conscientiousness   Study_Hours Social_Support  Sleep_Hours
## Neuroticism             0.092000107  0.0354203951     0.02116724 -0.082086040
## Extraversion           -0.036886521 -0.0826247602     0.01535901 -0.093120300
## Openness               -0.067995053  0.0005152933     0.02600757  0.026295773
## Agreeableness           0.192998369  0.0265389926    -0.06104147 -0.039520904
## Conscientiousness       1.000000000  0.0216496650    -0.06293433 -0.009542544
## Study_Hours             0.021649665  1.0000000000    -0.04743511 -0.026149299
## Social_Support         -0.062934328 -0.0474351080     1.00000000 -0.088321672
## Sleep_Hours            -0.009542544 -0.0261492994    -0.08832167  1.000000000
## Used_Counseling        -0.041647743  0.0033038229    -0.11461866 -0.040000060
##                   Used_Counseling
## Neuroticism          -0.157286312
## Extraversion          0.012233061
## Openness             -0.086458125
## Agreeableness        -0.047347363
## Conscientiousness    -0.041647743
## Study_Hours           0.003303823
## Social_Support       -0.114618663
## Sleep_Hours          -0.040000060
## Used_Counseling       1.000000000

Visualisasi Korelasi

corrplot(cor_matrix, method = "color", tl.col = "black", addCoef.col = "black")

Korelasi antar variabel input rendah (< 0.2), menunjukkan tidak ada multikolinearitas yang berarti.

Perbandingan Model Lengkap vs Sederhana (AIC)

model_sederhana <- multinom(Coping_Strategy ~ Neuroticism + Extraversion + Openness, data = data)
## # weights:  15 (8 variable)
## initial  value 219.722458 
## iter  10 value 89.848747
## iter  20 value 86.605897
## iter  30 value 85.137716
## iter  40 value 84.229979
## iter  50 value 84.095719
## iter  60 value 84.094371
## iter  70 value 84.080051
## iter  80 value 84.067269
## iter  90 value 84.065976
## iter 100 value 84.063027
## final  value 84.063027 
## stopped after 100 iterations
AIC(model_multi)
## [1] 154.2749
AIC(model_sederhana)
## [1] 184.1261

Model lengkap lebih baik karena memiliki AIC(model_multi) lebih kecil.

Kesimpulan

Model regresi logistik multinomial yang dibangun dalam penelitian ini menunjukkan bahwa secara simultan, seluruh prediktor yang digunakan termasuk lima dimensi kepribadian dan faktor gaya hidup berpengaruh signifikan terhadap pemilihan strategi koping (p < 0.05). Namun, berdasarkan uji parsial, hanya sebagian prediktor yang memiliki pengaruh signifikan secara individual, khususnya terhadap kategori Problem Focused dan Avoidance. Model menunjukkan kinerja yang cukup baik dengan nilai McFadden R² > 0.2, serta akurasi prediksi yang tinggi pada dua strategi tersebut. Meski demikian, model kurang mampu memprediksi kategori Emotion-Focused, yang dapat disebabkan oleh ketidakseimbangan data atau kurangnya relevansi prediktor terhadap strategi tersebut. Tidak ditemukan multikolinearitas yang mencolok di antara variabel bebas, karena korelasi antar prediktor sangat rendah. Selain itu, model lengkap terbukti lebih baik dibandingkan model sederhana berdasarkan perbandingan nilai AIC yang lebih rendah. Konversi variabel target ke bentuk faktor menjadi langkah penting agar fungsi multinom() dapat dijalankan dengan tepat. Secara keseluruhan, model ini sesuai untuk masalah klasifikasi dengan banyak kategori dan mampu memetakan pengaruh masing-masing prediktor terhadap kecenderungan individu dalam memilih strategi koping. Untuk peningkatan lebih lanjut, disarankan untuk mengeksplorasi variabel tambahan dan menerapkan teknik seperti penyeimbangan data (data balancing) guna meningkatkan prediksi pada kategori yang lemah seperti Emotion-Focused.