#Contoh Soal
# Membuat data frame dengan variabel yang relevan
data <- data.frame(
E_I = rep(c("E", "I"), each = 8),
S_N = rep(c("S", "N", "S", "N"), each = 4),
T_F = rep(c("T", "F", "T", "F"), each = 2, times = 2),
J_P = rep(c("J", "P"), times = 8),
Alcohol_Yes = c(10, 8, 5, 7, 3, 2, 4, 15, 17, 3, 6, 4, 1, 5, 1, 6),
Alcohol_No = c(67, 34, 101, 72, 20, 16, 27, 65, 123, 49, 132, 102, 12, 30, 30, 73)
)
View(data)
str(data)
## 'data.frame': 16 obs. of 6 variables:
## $ E_I : chr "E" "E" "E" "E" ...
## $ S_N : chr "S" "S" "S" "S" ...
## $ T_F : chr "T" "T" "F" "F" ...
## $ J_P : chr "J" "P" "J" "P" ...
## $ Alcohol_Yes: num 10 8 5 7 3 2 4 15 17 3 ...
## $ Alcohol_No : num 67 34 101 72 20 16 27 65 123 49 ...
#Transformasi Data
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(stringr)
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
# Transformasi untuk mengubah data menjadi long format
data2 <- data %>%
pivot_longer(cols = c("Alcohol_Yes", "Alcohol_No"),
names_to = "Alcohol", values_to = "Count") %>%
mutate(Alcohol = ifelse(str_detect(Alcohol, "Yes"), "Yes", "No")) %>%
uncount(weights = Count) %>%
dplyr::select(E_I, S_N, T_F, J_P, Alcohol) %>%
mutate(
E_I = as.factor(E_I),
S_N = as.factor(S_N),
T_F = as.factor(T_F),
J_P = as.factor(J_P),
Alcohol = as.factor(Alcohol)
)
# Tampilkan tabel hasil transformasi
datatable(data2)
#Data Checking
str(data2)
## tibble [1,050 × 5] (S3: tbl_df/tbl/data.frame)
## $ E_I : Factor w/ 2 levels "E","I": 1 1 1 1 1 1 1 1 1 1 ...
## $ S_N : Factor w/ 2 levels "N","S": 2 2 2 2 2 2 2 2 2 2 ...
## $ T_F : Factor w/ 2 levels "F","T": 2 2 2 2 2 2 2 2 2 2 ...
## $ J_P : Factor w/ 2 levels "J","P": 1 1 1 1 1 1 1 1 1 1 ...
## $ Alcohol: Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
data_restored <- data2 %>%
group_by(E_I, S_N, T_F, J_P, Alcohol, .drop = TRUE) %>%
summarize(Count = n(), .groups = 'drop') %>%
pivot_wider(names_from = Alcohol, values_from = Count) %>%
ungroup()
datatable(data_restored)
# Membuat regresi logistik dengan empat skala sebagai prediktor
logistic_model <- glm(Alcohol ~ E_I + S_N + T_F + J_P,
family = binomial, data = data2)
# Menampilkan ringkasan model
summary(logistic_model)
##
## Call:
## glm(formula = Alcohol ~ E_I + S_N + T_F + J_P, family = binomial,
## data = data2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.1140 0.2715 -7.788 6.82e-15 ***
## E_II -0.5550 0.2170 -2.558 0.01053 *
## S_NS -0.4292 0.2340 -1.834 0.06663 .
## T_FT 0.6873 0.2206 3.116 0.00184 **
## J_PP 0.2022 0.2266 0.893 0.37209
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 646.83 on 1049 degrees of freedom
## Residual deviance: 627.49 on 1045 degrees of freedom
## AIC: 637.49
##
## Number of Fisher Scoring iterations: 5
Model Logit
logit[π(x)^]= −2.1140 − 0.5550c1 − 0.4292c2 + 0.6873c3 + 0.2022c4
Secara default, R menetapkan menghasilkan koefisien regresi yang diestimasi untuk I = 1, S = 1, T = 1, dan P = 1. Sehingga diketahui : c1 : nilai Intervesion 1, selain itu 0 c2 : nilai Sensing 1, selain itu 0 c3 : nilai Thinking 1, selain itu 0 c4 : nilai Perceiving 1,selain itu 0
Parameter Model:
• E_II (-0.5550): Individu dengan preferensi I (Introversion) dibandingkan dengan E (Extraversion) memiliki log-odds lebih rendah untuk minum alkohol. P-value = 0.01053 menunjukkan bahwa variabel ini signifikan pada tingkat 5% (p-value < 0.05), artinya ada pengaruh yang signifikan antara Extroversion/Introversion terhadap kebiasaan minum alkohol.
• S_NS (-0.4292): Individu dengan preferensi N (iNtuition) dibandingkan dengan S (Sensing) memiliki log-odds lebih rendah untuk minum alkohol. P-value = 0.06663 menunjukkan bahwa variabel ini tidak signifikan pada tingkat 5% (p-value > 0.05). Artinya, ada indikasi bahwa kategori ini tidak berpengaruh signifikan terhadap kebiasaan minum alkohol.
• T_FT (0.6873): Individu dengan preferensi F (Feeling) dibandingkan dengan T (Thinking) memiliki log-odds lebih tinggi untuk minum alkohol. P-value = 0.00184 menunjukkan bahwa variabel ini sangat signifikan pada tingkat 1% (p-value < 0.05), yang berarti ada pengaruh antara Thinking/Feeling terhadap kebiasaan minum alkohol.
• J_PP (0.2022): Individu dengan preferensi P (Perceiving) dibandingkan dengan J (Judging) memiliki sedikit log-odds lebih tinggi untuk minum alkohol. P-value = 0.37209 menunjukkan bahwa variabel ini tidak signifikan pada tingkat 5% (p-value > 0.05). Artinya, ada indikasi bahwa kategori ini tidak berpengaruh signifikan terhadap kebiasaan minum alkohol.
Soal : Find π for someone of personality type ESTJ dan ENTP.
# Mengambil koefisien model regresi logistik
coefficients <- coef(logistic_model)
# Menghitung log-odds untuk tipe kepribadian ESTJ
log_odds_ESTJ <- coefficients[1] + coefficients[2] * 0 + coefficients[3] * 1 + coefficients[4] * 1 + coefficients[5] * 0
# Menghitung probabilitas (pi)
pi_ESTJ <- 1 / (1 + exp(-log_odds_ESTJ))
# Menampilkan probabilitas
pi_ESTJ
## (Intercept)
## 0.135186
Artinya, probabilitas bahwa seseorang dengan tipe kepribadian ESTJ akan melaporkan sering minum alkohol adalah sekitar 13.5%.
# Mengambil koefisien model regresi logistik
coefficients <- coef(logistic_model)
# Menghitung log-odds untuk tipe kepribadian ENTP
log_odds_ENTP <- coefficients[1] + coefficients[2] * 0 + coefficients[3] * 0 + coefficients[4] * 1 + coefficients[5] * 1
# Menghitung probabilitas (pi)
pi_ENTP <- 1 / (1 + exp(-log_odds_ENTP))
# Menampilkan probabilitas
pi_ENTP
## (Intercept)
## 0.2271486