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)
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), ]
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")
Ö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), ]
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), ]
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.
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.
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.
datareg$cinsiyet <- as.factor(datareg$cinsiyet)
datareg$tutum <- as.factor(datareg$tutum)
datareg$deger <- as.factor(datareg$deger)
datareg$guven <- as.factor(datareg$guven)
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.
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.
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.
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.