#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