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.
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.
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" ...
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.
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.
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.
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.
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.
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.
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
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.
mean(prediksi == data$Coping_Strategy)
## [1] 0.89
Akurasi ini menggambarkan seberapa sering model memprediksi kategori dengan benar.
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
corrplot(cor_matrix, method = "color", tl.col = "black", addCoef.col = "black")
Korelasi antar variabel input rendah (< 0.2), menunjukkan tidak ada
multikolinearitas yang berarti.
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.
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.