library(haven)
library(dplyr)
library(knitr)
library(ggplot2)
library(tidyr)
library(naniar)
library(summarytools)
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.
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")
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
library(ggcorrplot)
corp <- cor_pmat(data)
ggcorrplot(cor(data),lab = T, method = "circle", title = "Değişkenler Arasındaki Korelasyon", p.mat = corp)
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.
data$CINSIYET <- as.factor(data$CINSIYET)
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ı")
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.
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.
#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.
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ı")
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
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")
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.