Gerekli paketler

library(haven)
## Warning: package 'haven' was built under R version 4.3.3
library(sjlabelled)
## 
## Attaching package: 'sjlabelled'
## The following objects are masked from 'package:haven':
## 
##     as_factor, read_sas, read_spss, read_stata, write_sas, zap_labels
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:sjlabelled':
## 
##     as_label
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
library(psych)
## Warning: package 'psych' was built under R version 4.3.3

Analiz edilecek verinin içe aktarılması

data <- read_sav("data/bsgturm4.sav")

head(data)

Veri yapısının gözden geçirilmesi

str(data)
## tibble [323 × 6] (S3: tbl_df/tbl/data.frame)
##  $ IDSTUD  : num [1:323] 10111 10125 20207 30111 40105 ...
##   ..- attr(*, "label")= chr "STUDENT ID"
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 9
##  $ BS4GSEX : dbl+lbl [1:323] 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, ...
##    ..@ label        : chr "GEN\\SEX OF STUDENT"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:3] 1 2 9
##    .. ..- attr(*, "names")= chr [1:3] "GIRL" "BOY" "OMITTED"
##  $ BSMMAT01: num [1:323] 709 661 729 802 374 ...
##   ..- attr(*, "label")= chr "1ST PLAUSIBLE VALUE MATHEMATICS"
##   ..- attr(*, "format.spss")= chr "F6.2"
##   ..- attr(*, "display_width")= int 10
##  $ BSDMPATM: dbl+lbl [1:323]  1,  1,  1,  1,  3,  2,  1,  2,  1,  1,  3,  2, NA,  1...
##    ..@ label        : chr "INDEX STDS POS AFFECT TO MATH (PATM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 10
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"
##  $ BSDMSVM : dbl+lbl [1:323] 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
##    ..@ label        : chr "INDEX OF STUDENTS VALUING MATH (SVM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"
##  $ BSDMSCM : dbl+lbl [1:323]  1,  1,  1,  1, NA,  3,  1, NA,  2,  3,  3,  3,  3,  1...
##    ..@ label        : chr "INDEX OF SELF-CONFID LEARNING MATH (SCM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"

Etiketlerin kaldırılması

data <- remove_all_labels(data)

verideki değişken isimlerinin düzenlenmesi

data <- data %>%
    rename(
    cinsiyet = BS4GSEX,
    basari = BSMMAT01,
    tutum = BSDMPATM,
    deger = BSDMSVM,
    guven = BSDMSCM)

Verinin incelenmesi

library(reactable)
## Warning: package 'reactable' was built under R version 4.3.3
data %>%
  dplyr::select(2:6) %>%
  summarytools::descr(transpose = TRUE) %>%
  as.data.frame() %>%
  reactable()

hatalı kodlamaların silinmesi

400707 ve 680204 nolu kodlamalar hatalı olduğundan analiz dışı bırakılmıştır

data <- data[!data$IDSTUD %in% c(400707, 680204), ]

Eksik Veri

data %>% is.na() %>% colSums
##   IDSTUD cinsiyet   basari    tutum    deger    guven 
##        0        0        0       23        7       21

Eksik veri sayıları yukarıda belirtildiği gibidir.

library(MissMech)
## Warning: package 'MissMech' was built under R version 4.3.3
TestMCARNormality(data)
## Call:
## TestMCARNormality(data = data)
## 
## Number of Patterns:  3 
## 
## Total number of cases used in the analysis:  310 
## 
##  Pattern(s) used:
##           IDSTUD   cinsiyet   basari   tutum   deger   guven   Number of cases
## group.1        1          1        1       1       1       1               286
## group.2        1          1        1       1       1      NA                11
## group.3        1          1        1      NA       1       1                13
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  1.463842e-06 
## 
##     Either the test of multivariate normality or homoscedasticity (or both) is rejected.
##     Provided that normality can be assumed, the hypothesis of MCAR is 
##     rejected at 0.05 significance level. 
## 
## Non-Parametric Test:
## 
##     P-value for the non-parametric test of homoscedasticity:  0.4193982 
## 
##     Reject Normality at 0.05 significance level.
##     There is not sufficient evidence to reject MCAR at 0.05 significance level.

Eksik veriler rastgele olarak dağılmaktadır. (p>0.05)

Hot Deck yöntemi ile veri atama yapılacaktır. Donör değişken olarak eksik veri olmayan cinsiyet değişkeni seçilmiştir.

library(VIM)
## Warning: package 'VIM' was built under R version 4.3.3
## Loading required package: colorspace
## Warning: package 'colorspace' was built under R version 4.3.3
## Loading required package: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
datareg <- hotdeck(data, variable = c("tutum","deger","guven"), ord_var = "cinsiyet")

Uç Değerler

Öncelikle değişkenli uç değer analizi gerçekeleştireceğim

library(outliers)
## 
## Attaching package: 'outliers'
## The following object is masked from 'package:psych':
## 
##     outlier
z_scores <- scores(datareg[, c("tutum", "deger","guven")], type = "z")

Uc_Degerler <- which(
  abs(z_scores[, "tutum"]) > 3 |
  abs(z_scores[, "deger"]) > 3 |
  abs(z_scores[, "guven"]) > 3
)

tek_degiskenli_uc_degerler <- datareg[Uc_Degerler, ]

print("Tek Değişkenli Uç Değerler:")
## [1] "Tek Değişkenli Uç Değerler:"
print(Uc_Degerler)
## [1]  45  68 215 229 321

Bu değerleri veri setinden çıkaracağım

datareg <- datareg[-c(45,68,215,229,321), ]

Çok Değişkenli Uç değerler

dataregresyon <- datareg[,c("tutum","deger","guven")]

md <- mahalanobis(dataregresyon, center = colMeans(dataregresyon, na.rm = TRUE), 
                  cov = cov(dataregresyon))

head(md, 20)
##          1          2          3          4          5          6          7 
##  0.8932155  0.8932155  0.8932155  0.8932155 12.5553944  3.6726052  9.8352367 
##          8          9         10         11         12         13         14 
##  3.4557567  9.2941182  3.7137911 10.1685157  3.6726052  3.6726052  0.8932155 
##         15         16         17         18         19         20 
##  3.7137911  0.8932155  0.5852652  0.8932155  0.8932155  0.5852652
alpha <- 0.001

cutoff <- qchisq(p = 1 - alpha, df = ncol(dataregresyon))

cutoff
## [1] 16.26624
cducdegerler <- which(md>cutoff)
print("Çok Değişkenli Uç Değerlerin Satır Numaraları:")
## [1] "Çok Değişkenli Uç Değerlerin Satır Numaraları:"
print(rownames(dataregresyon)[cducdegerler])
## [1] "197" "221" "240" "241"
dataregresyon[cducdegerler, ]

Bu değerleri de siliyoruz

datareg <- datareg[-c(197,221,240,241), ]

Normallik varsayımı

library(moments)
skewness(datareg$basari)
## [1] 0.2301021
kurtosis(datareg$basari)
## [1] 2.947174
qqnorm(datareg$basari)
qqline(datareg$basari, col = "blue")

Çarpıklık basıklık değerleri ve qqplot incelendiğinde başarı değişkeninin genel anlamda normallik varsayımını karşıladığı söylenebilecektir.

Çoklu Bağlantı Varsayımı

pairs(datareg[,2:6])

Görünene göre bariz bir çoklu bağlantı sorunu bulunmamaktadır.

VIF değerlerini de inceleyelim

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
model <- lm(basari ~ tutum + deger + guven + cinsiyet, data = datareg)
vif(model)
##    tutum    deger    guven cinsiyet 
## 1.091466 1.011510 1.083615 1.002558

VIF değerlerinin tamamı 1’e yakın. Herhangi bir sorun gözükmüyor.

library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(ggcorrplot)
## Warning: package 'ggcorrplot' was built under R version 4.3.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
## The following object is masked from 'package:sjlabelled':
## 
##     as_label
cor(datareg[,2:6]) %>% kable(digit=2)
cinsiyet basari tutum deger guven
cinsiyet 1.00 0.09 0.03 0.04 0.00
basari 0.09 1.00 -0.09 -0.04 -0.42
tutum 0.03 -0.09 1.00 0.10 0.28
deger 0.04 -0.04 0.10 1.00 0.05
guven 0.00 -0.42 0.28 0.05 1.00
ggcorrplot(cor(datareg[,2:6]),lab=TRUE,lab_size = 6)

Görselde de görüldüğü üzere çoklu bağlantıya işaret eden bir durum ortada yoktur.

Varyans Homojenliği

plot(model$fitted.values, model$residuals,
     xlab = "Fitted Values", ylab = "Residuals",
     main = "Residuals vs Fitted Plot")
abline(h = 0, col = "red")

Residuals vs Fitted Plot incelendiğinde, artık değerlerin sabit bir varyansla kırmızı çizgi etrafında rastgele dağıldığı görülmekte ve varyans homojenliği varsayımının sağlandığı söylenebilecektir.

ÇOKLU REGRESYON

datareg$cinsiyet <- as.factor(datareg$cinsiyet)
datareg$tutum   <- as.factor(datareg$tutum)
datareg$deger   <- as.factor(datareg$deger)
datareg$guven   <- as.factor(datareg$guven)

Full model

ile başlayalım

model_full <- lm(basari ~ cinsiyet + tutum + deger + guven, data = datareg)

summary(model_full)
## 
## Call:
## lm(formula = basari ~ cinsiyet + tutum + deger + guven, data = datareg)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -376.54  -65.99   -2.90   68.62  294.01 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  484.631     10.808  44.840  < 2e-16 ***
## cinsiyet2     23.781     12.378   1.921   0.0556 .  
## tutum2       -28.102     19.091  -1.472   0.1421    
## tutum3        30.079     25.395   1.184   0.2372    
## deger2        -5.942     20.209  -0.294   0.7690    
## guven2       -83.999     14.681  -5.721 2.52e-08 ***
## guven3      -123.585     16.682  -7.408 1.26e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 108.7 on 305 degrees of freedom
## Multiple R-squared:  0.2025, Adjusted R-squared:  0.1868 
## F-statistic: 12.91 on 6 and 305 DF,  p-value: 5.289e-13

F testi incelendiğinde modelin anlamlı olduğu söylenebilecektir. Değerler incelendiğinde güvenin 2 ve 3. düzeyinin başarıyı anlamlı düzeyde yordadığı görülmektedir. Diğer değişkenler için yordayıcılık anlamlı düzeyde değildir.

Yorum yapılırken değerlerin ters puanlandığı göz ardı edilmemelidir. Full modele göre matematik başarısını en güçlü yordayan faktör güven düzeyidir. Özellikle, öğrencilerin gerçek güven seviyeleri düştükçe (ters puanlamaya göre yüksek puan aldıkça), başarılarında belirgin bir azalma gözlemlenmektedir. Tutum ve değer değişkenlerinin başarı üzerinde doğrudan ve anlamlı bir etkisi bulunmamıştır.

Aşamalı Regresyon

ile devam edelim.

model_stepwise <- step(model_full, direction = "both")
## Start:  AIC=2932.8
## basari ~ cinsiyet + tutum + deger + guven
## 
##            Df Sum of Sq     RSS    AIC
## - deger     1      1022 3607100 2930.9
## <none>                  3606078 2932.8
## - tutum     2     48351 3654430 2933.0
## - cinsiyet  1     43642 3649720 2934.6
## - guven     2    797669 4403748 2991.2
## 
## Step:  AIC=2930.89
## basari ~ cinsiyet + tutum + guven
## 
##            Df Sum of Sq     RSS    AIC
## <none>                  3607100 2930.9
## - tutum     2     48379 3655480 2931.1
## - cinsiyet  1     43269 3650369 2932.6
## + deger     1      1022 3606078 2932.8
## - guven     2    801691 4408791 2989.5
summary(model_stepwise)
## 
## Call:
## lm(formula = basari ~ cinsiyet + tutum + guven, data = datareg)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -375.67  -65.25   -5.01   69.06  294.50 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   484.25      10.72  45.194  < 2e-16 ***
## cinsiyet2      23.67      12.35   1.916   0.0563 .  
## tutum2        -28.46      19.02  -1.496   0.1356    
## tutum3         29.52      25.29   1.168   0.2439    
## guven2        -84.37      14.60  -5.777 1.87e-08 ***
## guven3       -123.61      16.66  -7.421 1.16e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 108.6 on 306 degrees of freedom
## Multiple R-squared:  0.2023, Adjusted R-squared:  0.1892 
## F-statistic: 15.52 on 5 and 306 DF,  p-value: 1.313e-13

Aşamalı modele göre değer değişkeni modele anlamlı bir katkıda bulunmamaktadır. Güven değişkeninin modele güçlü ve anlamlı bir etkisi bulunmaktadır. Güven puanı arttıkça (veya ters puanlama göz önünde bulundurulduğunda güven azaldıkça) başarı düzeyi de düşmektedir. Cinsiyet değişkeni ve tutumun kategorilerinin etkisi bulunmaktadır fakat bu etki anlamlı düzeyde değildir.

Düzenleyici Etki

Bu aşamada değer değişkenini analiz dışı bırakıyorum. Tutum değişkeni aşamalı regresyonda da modele dahil eidldiği için burada da modele dahile edilmiştir. Bu aşamada güvenin başarıyı etkilemesinde tutumun düzenleyici rolünü inceleyeceğim. (Birkaç farklı deneme yaptım bunu daha uygun buldum.)

model_moderation <- lm(basari ~ tutum * guven + cinsiyet, data = datareg)

summary(model_moderation)
## 
## Call:
## lm(formula = basari ~ tutum * guven + cinsiyet, data = datareg)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -374.94  -61.26   -9.36   70.13  282.07 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     491.33      10.60  46.333  < 2e-16 ***
## tutum2          -82.17      28.63  -2.870  0.00439 ** 
## tutum3         -159.20      53.48  -2.977  0.00315 ** 
## guven2          -97.53      15.49  -6.297 1.07e-09 ***
## guven3         -160.76      18.51  -8.684 2.45e-16 ***
## cinsiyet2        29.02      12.06   2.406  0.01674 *  
## tutum2:guven2    65.69      42.79   1.535  0.12575    
## tutum3:guven2   213.70      76.03   2.811  0.00527 ** 
## tutum2:guven3   134.81      46.97   2.870  0.00440 ** 
## tutum3:guven3   260.71      62.64   4.162 4.12e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 105.3 on 302 degrees of freedom
## Multiple R-squared:  0.2598, Adjusted R-squared:  0.2377 
## F-statistic: 11.78 on 9 and 302 DF,  p-value: 6.848e-16

F testi incelendiğinde modelin anlamlı olduğu söylenebilecektir. Açıklanan varyansın önceki modele arttığı görülmüştür.

Burada karşılaştığım önemli bir durum var. Modele tutum-güven etkileşimleri dahil edildiğinde tutum değerleri de anlamlı hale geldi. Bu değerler full modelde anlamlı değildi.

Tutum ve güven düzeyleri arasındaki etkileşimlerin etkileri incelendiğinde bu etkilerin anlamlı olduğu görülmektedir. Bir başka ifade ile güvenin başarıyı yordamasında tutumun düzenleyici rolü bulunmaktadır.

Aracılık Analizi

datareg$tutum_num <- as.numeric(as.character(datareg$tutum))
datareg$guven_num <- as.numeric(as.character(datareg$guven))
datareg$deger_num <- as.numeric(as.character(datareg$deger))

Burada veriyi faktör olarak analiz edemediğimden biraz sorun yaşadım. Başta değer modelde yoktu ama df=0 olduğundan bir değişken daha dahil etmek istedim.

library(lavaan)
## Warning: package 'lavaan' was built under R version 4.3.3
## This is lavaan 0.6-19
## lavaan is FREE software! Please report any bugs.
## 
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
## 
##     cor2cov
model_med <- 'tutum_num ~ a1*guven_num
  deger_num ~ a2*guven_num
  basari ~ b1*tutum_num + b2*deger_num + c*guven_num

  guven_num ~~ guven_num

  indirect_tutum := a1*b1
  indirect_deger := a2*b2
  total_indirect := indirect_tutum + indirect_deger
  total_effect := c + total_indirect'

fit <- sem(model_med, data = datareg, estimator = "ML", se="bootstrap", bootstrap=100)
## Warning: lavaan->lav_data_full():  
##    some observed variances are (at least) a factor 1000 times larger than 
##    others; use varTable(fit) to investigate
summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
## lavaan 0.6-19 ended normally after 13 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           312
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 2.268
##   Degrees of freedom                                 1
##   P-value (Chi-square)                           0.132
## 
## Model Test Baseline Model:
## 
##   Test statistic                                88.268
##   Degrees of freedom                                 6
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.985
##   Tucker-Lewis Index (TLI)                       0.908
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2612.737
##   Loglikelihood unrestricted model (H1)      -2611.603
##                                                       
##   Akaike (AIC)                                5243.474
##   Bayesian (BIC)                              5277.161
##   Sample-size adjusted Bayesian (SABIC)       5248.616
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.064
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.178
##   P-value H_0: RMSEA <= 0.050                    0.275
##   P-value H_0: RMSEA >= 0.080                    0.535
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.026
## 
## Parameter Estimates:
## 
##   Standard errors                            Bootstrap
##   Number of requested bootstrap draws              100
##   Number of successful bootstrap draws             100
## 
## Regressions:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv   Std.all
##   tutum_num ~                                                             
##     guven_num (a1)     0.201    0.043    4.702    0.000     0.201    0.276
##   deger_num ~                                                             
##     guven_num (a2)     0.020    0.018    1.085    0.278     0.020    0.052
##   basari ~                                                                
##     tutum_num (b1)     5.448   12.480    0.437    0.662     5.448    0.026
##     deger_num (b2)    -8.134   19.265   -0.422    0.673    -8.134   -0.021
##     guven_num  (c)   -64.200    7.212   -8.902    0.000   -64.200   -0.424
## 
## Variances:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv   Std.all
##     guven_num          0.634    0.029   21.942    0.000     0.634    1.000
##    .tutum_num          0.309    0.035    8.934    0.000     0.309    0.924
##    .deger_num          0.094    0.013    6.988    0.000     0.094    0.997
##    .basari         11942.403  998.641   11.959    0.000 11942.403    0.824
## 
## R-Square:
##                    Estimate 
##     tutum_num          0.076
##     deger_num          0.003
##     basari             0.176
## 
## Defined Parameters:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv   Std.all
##     indirect_tutum     1.094    2.763    0.396    0.692     1.094    0.007
##     indirect_deger    -0.162    0.488   -0.332    0.740    -0.162   -0.001
##     total_indirect     0.932    2.798    0.333    0.739     0.932    0.006
##     total_effect     -63.267    7.054   -8.969    0.000   -63.267   -0.418

Yapılan aracılık analizi sonucunda, güven değişkeninin başarıyı doğrudan anlamlı bir şekilde yordadığı bulunmuştur (B = -64.20, p < .001). Ancak güvenin tutum ve değer değişkenleri üzerinden başarıya dolaylı etkileri anlamlı bulunmamıştır (p > .05). Modelin genel uyum indeksleri iyi düzeydedir (CFI = .985, RMSEA = .064, SRMR = .026). Bu bulgular, öğrencilerin güven düzeylerinin başarıları üzerinde doğrudan bir etkiye sahip olduğunu, ancak tutum ve değer değişkenlerinin bu ilişkide aracılık rolü üstlenmediğini göstermektedir.