library(haven)
library(dplyr)
library(knitr)
library(ggplot2)
library(tidyr)
library(naniar)
library(summarytools)

1 Giriş

Bu öğrenme günlüğünde çoklu regresyon, dummy kodlama ve moderatör etkili gibi konular üzerinde durulacaktır.

Analizleri ICILS2023 (USA - Öğrenci) veri seti üzerinden gerçekleştirdim.

2 Veri Seti Yükleme

load("BSGUSAI3.Rdata")
data <- BSGUSAI3 %>%
  select(S_SEX, # Cinsiyet (1-2)
         S_HOMLIT, # Ev okuyazarlığı indeksi (1-5)
         NISB, # Continuous
         S_SPECEFF, # Continuous 
         S_GENEFF,
         S_ICTPOSS) %>% # Continuous
  rename(CINSIYET = S_SEX,
         EV = S_HOMLIT,
         SES = NISB,
         SPECIFIC = S_SPECEFF,
         GENERAL = S_GENEFF,
         POZITIF = S_ICTPOSS) %>%
  expss::drop_var_labs() %>%
  mutate(across(everything(), ~ ifelse(. %in% c(8, 9, 998.000000000,999.00000), NA, .)))
knitr::kable(miss_var_summary(data),caption = "Kayıp Verilerin Özeti")
Kayıp Verilerin Özeti
variable n_miss pct_miss
POZITIF 540 23.0
SPECIFIC 467 19.9
GENERAL 440 18.7
SES 287 12.2
EV 273 11.6
CINSIYET 31 1.32

Veri setinde yer alan değişkenlerde kayıp veri oranı 1.32 - 23.00 arasında değişmektedir. Bu öğrenme günlüğünün konu kayıp veriler olmaması nedeniyle liste bazlı silme yöntemi ile NA içeren bireyler veri setinden çıkarılmıştır.

data <- na.omit(data)
head(data)
## # A tibble: 6 × 6
##   CINSIYET    EV    SES SPECIFIC GENERAL POZITIF
##      <dbl> <dbl>  <dbl>    <dbl>   <dbl>   <dbl>
## 1        1     4  1.06      48.5    56.8    47.4
## 2        1     3  0.305     45.1    40.2    40.3
## 3        1     2  0.739     41.4    48.9    40.3
## 4        1     1  0.138     45.1    59.7    47.4
## 5        0     2 -0.370     48.5    44.7    43.5
## 6        1     2 -0.599     36.8    46.0    47.4

Veri setine ilişkin temel betimsel istatistikleri inceleyelim.

psych::describe(data,fast = T)[,-11]
##          vars    n  mean    sd median   min   max range  skew kurtosis
## CINSIYET    1 1739  0.52  0.50   1.00  0.00  1.00  1.00 -0.08    -1.99
## EV          2 1739  1.83  1.28   2.00  0.00  4.00  4.00  0.20    -0.94
## SES         3 1739  0.04  0.99   0.11 -2.48  1.92  4.40 -0.19    -0.85
## SPECIFIC    4 1739 47.77  9.49  45.63 28.87 71.60 42.73  0.38     0.59
## GENERAL     5 1739 49.49 10.27  48.89 14.31 71.57 57.26 -0.03     1.17
## POZITIF     6 1739 47.07  9.00  47.45 19.76 69.61 49.85  0.45     1.26

3 Korelasyon Analizi

library(ggcorrplot)
corp <- cor_pmat(data)
ggcorrplot(cor(data),lab = T, method = "circle", title = "Değişkenler Arasındaki Korelasyon", p.mat = corp)

4 Çoklu Regresyon Analizi için Model Kurulumu

Bu çalışmada yordanan değişken olarak öğrencilerin öğrencilerin bilgisayar kullanımına yönelik pozitif inançlarını yordanan değişken olarak kabul edelim. Korelasyon matrisi incelendiğinde bağımsız değişkenler ve bağımlı değişken arasında istatistiksel olarak anlamlı bir ilişki olduğu görülmektedir. Bu nedenle modelden herhangi bir değişken çıkarılmamıştır.

Başlangıç denklemi: \[ pozitif = \beta_0 + \beta_1 * cinsiyet + \beta_2 * ev + \beta_3 * SES + \beta_4 * specific + \beta_5 * general + \epsilon \]

şeklinde kurulmuştur.

5 Dummy Kodlama

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

6 Regresyon Analizinin Varsayımlarının Test Edilmesi

model1 <- lm(POZITIF ~ CINSIYET + EV + SES + SPECIFIC + GENERAL, data  = data)
library(sjPlot)
tab_model(model1,
          show.ci = FALSE,       
          show.se = TRUE,        
          show.stat = TRUE,
          #dv.labels = "Yakıt Tüketimi", 
          title = "Coklu Regresyon Analizi Sonuçları")
Coklu Regresyon Analizi Sonuçları
  POZITIF
Predictors Estimates std. Error Statistic p
(Intercept) 33.26 1.27 26.16 <0.001
CINSIYET [1] -1.81 0.41 -4.37 <0.001
EV 0.16 0.23 0.69 0.493
SES -0.10 0.30 -0.33 0.739
SPECIFIC 0.05 0.03 1.87 0.062
GENERAL 0.25 0.02 10.25 <0.001
Observations 1739
R2 / R2 adjusted 0.106 / 0.103

Modele dahil edilen değişkenlerden Cinsiyet[1] (\(\beta = -1.71, p < 0.001\)) ve General (\(\beta = 0.21, p < 0.001\)) istatistiksel olarak anlamlı birer yordayıcıdır. Ev, SES ve Specific ise istatistiksel olarak anlamlı birer yordayıcı değildir (p > 0.05). Modelde yer alan değişkenler POZITIF inançlardaki değişkenliği \(R^2 = 0.11\)’ini açıklamaktadır.

6.1 Artıkların İncelenmesi

par(mfrow = c(2,2))
plot(model1)

Noktaların ince çizgi üzerinde takip etmesi gerekir ancak bazı noktaların çizgiden uzaklaştığını görebiliyoruz. Residuals-Fitter grafiğine göre noktalar yatay eksende dağılıyor gibi görünüyor ancak bazı noktalar yatay eksenden uzaklaşmış. Bu durum, modelin doğrusallık varsayımını ihlal edebilir. Q-Q Plot ise artıkların dağılımına ilişkin bilgi veriyor. Uçlarda normal dağılımdan sapmalar açıkça gözlenebilir. Scale-Location ise standart sapmanın verinin her yerinde benzer olmadığını, hafif bükük bir U biçimi gösterdiğine işaret ediyor. Aykırı değerler incelendiğinde birden fazla bireyin (örneğin 16) kaldıraç etkisi yarattığını görmekteyiz.

6.2 Çoklu Bağlantılılık

#Calculate VIF and Tolerance values
  #To obtain IF and TV values describe the model
  x_new <- data
  x_new$rn <- 1:nrow(data)
  model_for_collinearity <- lm(
    as.formula(paste(colnames(x_new)[ncol(x_new)], "~",
                     paste(colnames(x_new)[1:(ncol(x_new)-1)], collapse = "+"),
                     sep = ""
    )), data = x_new)
  mc_VIF_TOL <- as.data.frame(mctest::mctest(model_for_collinearity,
                                             type = "i")$idiags[,1:2]) #calculate VIF and Tollerance values
  #Calculate Condition Index
  mc_CI <- mctest::eigprop(mod = model_for_collinearity)$ci
  #A data frame for summary of multicollinearity
  mc_control <- data.frame(min_VIF = min(mc_VIF_TOL$VIF),
                           max_VIF = max(mc_VIF_TOL$VIF),
                           min_TOL = min(mc_VIF_TOL$TOL),
                           max_TOL = max(mc_VIF_TOL$TOL),
                           min_CI = min(mc_CI),
                           max_CI = max(mc_CI)) #giving a summary of multicollinearity
round(mc_control,2)
##   min_VIF max_VIF min_TOL max_TOL min_CI max_CI
## 1    1.03    2.12    0.47    0.97      1  19.67

VIF değerlerinin 1.05-2.13 arasında değiştiği ve kriter olan 10 değerinni altında olduğu görülmektedir. CI değerleri de 1-24.87 arasında değişmekte ve 30’dan küçük olması nedeniyle çoklu doğrusal bağlantılılık olmadığına işaret eder. TOL değerlerinin ise 0.2’den büyük olması çoklu doğrusal bağlantılılık olmadığının göstergesidir. Bu bağlamda veri setidne doğrusal bağlantılılık problemi söz konusu değiştir.

6.3 Aykırı Değerler ve Kaldıraç Etkisi

Cook’s Uzaklığı kriter değerden uzak bireyler veri setinden çıkarılarak kaldıraç etkisi indirgenmeye çalışılır.

library(gt)
cooks_values <- cooks.distance(model1)
limit <- 4 / nrow(data)

infvalues <- which(cooks_values > limit)
data <- data[-infvalues,]

Yeni veri seti ile yeniden kestirim yapalım.

model2 <- lm(POZITIF ~ CINSIYET + EV + SES + SPECIFIC + GENERAL, data  = data)
library(sjPlot)
tab_model(model2,
          show.ci = FALSE,       
          show.se = TRUE,        
          show.stat = TRUE,
          #dv.labels = "Yakıt Tüketimi", 
          title = "Coklu Regresyon Analizi Sonuçları")
Coklu Regresyon Analizi Sonuçları
  POZITIF
Predictors Estimates std. Error Statistic p
(Intercept) 35.24 1.11 31.88 <0.001
CINSIYET [1] -1.71 0.32 -5.34 <0.001
EV 0.18 0.18 0.99 0.324
SES 0.08 0.23 0.33 0.741
SPECIFIC 0.02 0.02 1.16 0.248
GENERAL 0.21 0.02 10.79 <0.001
Observations 1586
R2 / R2 adjusted 0.113 / 0.111

Model1 ve Model2’yi karşılaştıralım.

library(stargazer)
stargazer(model1, model2, type = "text", 
          title = "Model 1 ve Model 2'nin Karşılaştırılması",
          dep.var.labels = c("POZITIF"),
          covariate.labels = c("Cinsiyet", "Ev Okuryazarlığı", "SES", "Specific", "General"),
          omit.stat = c("f", "ser"),
          single.row = TRUE,
          no.space = TRUE)
## 
## Model 1 ve Model 2'nin Karşılaştırılması
## ====================================================
##                          Dependent variable:        
##                  -----------------------------------
##                                POZITIF              
##                         (1)               (2)       
## ----------------------------------------------------
## Cinsiyet         -1.809*** (0.413) -1.707*** (0.320)
## Ev Okuryazarlığı   0.158 (0.230)     0.179 (0.181)  
## SES               -0.100 (0.300)     0.077 (0.232)  
## Specific          0.047* (0.025)     0.024 (0.021)  
## General          0.247*** (0.024)  0.214*** (0.020) 
## Constant         33.263*** (1.271) 35.242*** (1.105)
## ----------------------------------------------------
## Observations           1,739             1,586      
## R2                     0.106             0.113      
## Adjusted R2            0.103             0.111      
## ====================================================
## Note:                    *p<0.1; **p<0.05; ***p<0.01

Anlamlı olmayan değişkenleri modelden çıkarıp yeniden kestirim yapalım.

model3 <- lm(POZITIF ~ CINSIYET + GENERAL, data  = data)
stargazer(model1,model2,model3, type = "text", 
          title = "Model 1, Model 2 ve Model 3'ün Karşılaştırılması",
          dep.var.labels = c("POZITIF"),
          covariate.labels = c("Cinsiyet", "Ev Okuryazarlığı", "SES", "Specific", "General"),
          omit.stat = c("f", "ser"),
          single.row = TRUE,
          no.space = TRUE)
## 
## Model 1, Model 2 ve Model 3'ün Karşılaştırılması
## ======================================================================
##                                   Dependent variable:                 
##                  -----------------------------------------------------
##                                         POZITIF                       
##                         (1)               (2)               (3)       
## ----------------------------------------------------------------------
## Cinsiyet         -1.809*** (0.413) -1.707*** (0.320) -1.740*** (0.316)
## Ev Okuryazarlığı   0.158 (0.230)     0.179 (0.181)                    
## SES               -0.100 (0.300)     0.077 (0.232)                    
## Specific          0.047* (0.025)     0.024 (0.021)                    
## General          0.247*** (0.024)  0.214*** (0.020)  0.231*** (0.017) 
## Constant         33.263*** (1.271) 35.242*** (1.105) 35.866*** (0.870)
## ----------------------------------------------------------------------
## Observations           1,739             1,586             1,586      
## R2                     0.106             0.113             0.111      
## Adjusted R2            0.103             0.111             0.110      
## ======================================================================
## Note:                                      *p<0.1; **p<0.05; ***p<0.01

7 Etkileşim Etkisi (Düzenleyicilik)

Cinsiyetin etkileşim etkisini modellediğimizde denklem şu şekilde oluşacaktır:

\[ POZITIF = \beta_0 + \beta_1 * CINSIYET + \beta_2 * GENERAL + \beta_4 * CINSIYET*GENERAL + \epsilon \]

Modeli kuralım

model4 <- lm(POZITIF ~ CINSIYET * GENERAL, data  = data)
tab_model(model4,
          show.ci = FALSE,       
          show.se = TRUE,        
          show.stat = TRUE,
          title = "Moderatör değişkenin eklenmesi")
Moderatör değişkenin eklenmesi
  POZITIF
Predictors Estimates std. Error Statistic p
(Intercept) 34.18 1.19 28.62 <0.001
CINSIYET [1] 1.76 1.73 1.02 0.308
GENERAL 0.27 0.02 10.96 <0.001
CINSIYET [1] × GENERAL -0.07 0.03 -2.06 0.039
Observations 1586
R2 / R2 adjusted 0.114 / 0.112

Model sonuçlarına göre yalnızca Cinsiyet[1] (\(\beta = -1.76, p > 0.05\)) anlamlı bir yordayıcı değil iken General (\(\beta = 0.27, p < 0.001\)) istatistiksel olarak anlamlı bir yordayıcıdır. Bu bağlamda erkeklerin kadınlara göre daha yüksek pozitif inanç sahibi olduğu söylemek anlamlı değildir. Bununla birlikte genel dijital özyeterlik, pozitif inançların pozitif bir yordayıcısıdır. Cinsiyet ve General değişkeninin etkileşim etkisi ise istatistiksel olarak anlamlıdır (\(\beta = -0.07, p < 0.05\)). ?Bu durumu ben yorumlayamadım. ? Modelde yer alan değişkenler POZITIF inançlardaki değişkenliği \(R^2 = 0.11\)’ini açıklamaktadır.