Araştırma Problemi: Teksas Üniversitesi’nde (UT Austin) yapılan bir araştırmada, eğitmenlerin öğretim değerlendirme puanları (score) ile güzellik puanları (bty_avg) arasındaki ilişki incelenmiştir. Veriler moderndive paketindeki evals veri setinde yer almaktadır.
Öğretim puanını (score) bağımlı değişken (y) ve güzellik puanını (bty_avg) bağımsız değişken (x) olarak kullanarak bir basit doğrusal regresyon modeli oluşturun.
lm() ve get_regression_table() fonksiyonlarını kullanarak regresyon tablosunu elde edin.
Regresyon denklemini yazın ve güzellik puanının eğim katsayısını (slope) yorumlayın.
library(moderndive)
library(ggplot2) #regresyon için doğrusallık gerktiği için kuruldu.
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
data(evals)
head(evals)
## # A tibble: 6 × 14
## ID prof_ID score age bty_avg gender ethnicity language rank pic_outfit
## <int> <int> <dbl> <int> <dbl> <fct> <fct> <fct> <fct> <fct>
## 1 1 1 4.7 36 5 female minority english tenu… not formal
## 2 2 1 4.1 36 5 female minority english tenu… not formal
## 3 3 1 3.9 36 5 female minority english tenu… not formal
## 4 4 1 4.8 36 5 female minority english tenu… not formal
## 5 5 2 4.6 59 3 male not minori… english tenu… not formal
## 6 6 2 4.3 59 3 male not minori… english tenu… not formal
## # ℹ 4 more variables: pic_color <fct>, cls_did_eval <int>, cls_students <int>,
## # cls_level <fct>
model_basit <- lm(formula = score ~ bty_avg, data=evals)
get_regression_table(model_basit)
## # A tibble: 2 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 3.88 0.076 51.0 0 3.73 4.03
## 2 bty_avg 0.067 0.016 4.09 0 0.035 0.099
summary(model_basit)
##
## Call:
## lm(formula = score ~ bty_avg, data = evals)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9246 -0.3690 0.1420 0.3977 0.9309
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.88034 0.07614 50.96 < 2e-16 ***
## bty_avg 0.06664 0.01629 4.09 5.08e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5348 on 461 degrees of freedom
## Multiple R-squared: 0.03502, Adjusted R-squared: 0.03293
## F-statistic: 16.73 on 1 and 461 DF, p-value: 5.083e-05
YORUM: Güzellik puanı (bty_avg) 1 birim arttığında, öğretim değerlendirme puanı (score) ortalama 0.067 puan artmaktadır.
score =3.88+0.067.bty_avg
Adjusted R-squared: 0.03293
ggplot(evals, aes(x= bty_avg, y=score)) +
geom_point(alpha=0.3) +
geom_smooth(method="lm", se=FALSE) +
labs(title="Güzellik ve Ders Puanı İlişkisi")
## `geom_smooth()` using formula = 'y ~ x'
get_regression_table(model_basit) #REGRESYON TABLOSU ALDIK.
## # A tibble: 2 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 3.88 0.076 51.0 0 3.73 4.03
## 2 bty_avg 0.067 0.016 4.09 0 0.035 0.099
Araştırma Problemi: Eğitmenlerin öğretim puanlarını tahmin ederken sadece güzellik puanlarının değil, cinsiyetlerinin de (kategorik değişken) etkili olabileceğini düşünüyoruz. Bu durumu hem etkileşim (çarpım) modeli hem de paralel eğimler modeli ile analiz edeceğiz.
evals veri setini kullanarak, bağımlı değişkeni score, bağımsız değişkenleri ise bty_avg (güzellik puanı) ve gender (cinsiyet) olan iki farklı çoklu regresyon modeli kurun:
Etkileşim (Interaction) Modeli: Güzellik puanının öğretim puanı üzerindeki etkisinin cinsiyete göre değişebileceğini varsayan etkileşim modelini kurun. R kodunu yazın.
Paralel Eğimler (Parallel Slopes) Modeli: Her iki cinsiyet için güzellik puanının öğretim puanına etkisinin (eğimin) aynı olduğunu varsayan paralel eğimler modelini kurun.
Bu iki modelin temel varsayım farkını kısaca açıklayın.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ lubridate 1.9.5 ✔ tibble 3.3.0
## ✔ purrr 1.2.0 ✔ tidyr 1.3.1
## ✔ readr 2.1.6
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
model_etkilesim <- lm(score ~ bty_avg * gender, data=evals)
get_regression_table(model_etkilesim)
## # A tibble: 4 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 3.95 0.118 33.5 0 3.72 4.18
## 2 bty_avg 0.031 0.024 1.28 0.202 -0.017 0.078
## 3 gender: male -0.184 0.153 -1.20 0.232 -0.485 0.118
## 4 bty_avg:gendermale 0.08 0.032 2.45 0.015 0.016 0.143
model_paralel <- lm(score ~ bty_avg + gender, data=evals)
get_regression_table(model_paralel)
## # A tibble: 3 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 3.75 0.085 44.3 0 3.58 3.91
## 2 bty_avg 0.074 0.016 4.56 0 0.042 0.106
## 3 gender: male 0.172 0.05 3.43 0.001 0.074 0.271
library(patchwork)
p1 <-ggplot(evals, aes(x=bty_avg, y=score, color=gender))+
geom_point(alpha=0.3)+
geom_parallel_slopes(se=FALSE)+
labs(title= "paralel Eğimler modeli",
subtitle = " her cinsiyet için aynı eğim",
x = "güzellik puanı" , y="öğretim programı") +
theme_minimal()
p1
NOT: ERKEKLERDE GÜZELLİK PUANINDAKİ BİR BİRİMLİK ARTIŞ DEĞERLENDİRME PUANINI 0.172 BİRİM ARTIRIR. YANİ AYNI GÜZELLİK PUANINA SAHİP BİR ERKEK HOCANIN KADIN HOCADAN 0.17 PUAN DAHA YÜKSEK ALMASI BEKLENİR.
model_paralel<-lm(data=evals, score ~ bty_avg+gender)
get_regression_table(model_paralel)
## # A tibble: 3 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 3.75 0.085 44.3 0 3.58 3.91
## 2 bty_avg 0.074 0.016 4.56 0 0.042 0.106
## 3 gender: male 0.172 0.05 3.43 0.001 0.074 0.271
ggplot(evals, aes(x=bty_avg, y=score, color=gender))+
geom_point(alpha=0.3)+
geom_parallel_slopes(se=FALSE)+
labs(title= "Cinsiyet Kontrol Edildiginde Guzellik Etkisi")
ISLR paketinden türetilen ve kredi kartı kullanıcılarının finansal bilgilerini içeren bir veri seti (örneğin credit_ch6) kullanılarak, kredi kartı borcu (Balance) incelenmektedir.
Kredi kartı borcunu (Balance) bağımlı değişken, kredi limitini (credit_limit) ve geliri (income) bağımsız değişkenler olarak kullanarak bir çoklu regresyon modeli oluşturun.
Modelin regresyon tablosunu oluşturacak R kodunu yazın.
Çıktıdaki income (gelir) değişkeninin katsayısını, diğer değişkenleri sabit tuttuğumuzu belirterek yorumlayın.
library(ISLR)
data(Credit)
head(Credit)
## ID Income Limit Rating Cards Age Education Gender Student Married Ethnicity
## 1 1 14.891 3606 283 2 34 11 Male No Yes Caucasian
## 2 2 106.025 6645 483 3 82 15 Female Yes Yes Asian
## 3 3 104.593 7075 514 4 71 11 Male No No Asian
## 4 4 148.924 9504 681 3 36 11 Female No No Asian
## 5 5 55.882 4897 357 2 68 16 Male No Yes Caucasian
## 6 6 80.180 8047 569 4 77 10 Male No No Caucasian
## Balance
## 1 333
## 2 903
## 3 580
## 4 964
## 5 331
## 6 1151
library(ISLR)
data("Credit")
model_limit <- lm(Balance ~Limit, data = Credit)
get_regression_table(model_limit)
## # A tibble: 2 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept -293. 26.7 -11.0 0 -345. -240.
## 2 Limit 0.172 0.005 33.9 0 0.162 0.182
NOT: limit 0.17 birimlik artışa neden oluyor.
summary(model_limit)
##
## Call:
## lm(formula = Balance ~ Limit, data = Credit)
##
## Residuals:
## Min 1Q Median 3Q Max
## -676.95 -141.87 -11.55 134.11 776.44
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.928e+02 2.668e+01 -10.97 <2e-16 ***
## Limit 1.716e-01 5.066e-03 33.88 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 233.6 on 398 degrees of freedom
## Multiple R-squared: 0.7425, Adjusted R-squared: 0.7419
## F-statistic: 1148 on 1 and 398 DF, p-value: < 2.2e-16
model_income <- lm(Balance ~ Income, data = Credit)
get_regression_table(model_income)
## # A tibble: 2 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept 247. 33.2 7.42 0 181. 312.
## 2 Income 6.05 0.579 10.4 0 4.91 7.19
NOT: income 6 birimlik artışa neden oluyor.
summary(model_income)
##
## Call:
## lm(formula = Balance ~ Income, data = Credit)
##
## Residuals:
## Min 1Q Median 3Q Max
## -803.64 -348.99 -54.42 331.75 1100.25
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 246.5148 33.1993 7.425 6.9e-13 ***
## Income 6.0484 0.5794 10.440 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 407.9 on 398 degrees of freedom
## Multiple R-squared: 0.215, Adjusted R-squared: 0.213
## F-statistic: 109 on 1 and 398 DF, p-value: < 2.2e-16
model_coklu <- lm(Balance ~ Limit + Income, data = Credit)
get_regression_table(model_coklu)
## # A tibble: 3 × 7
## term estimate std_error statistic p_value lower_ci upper_ci
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 intercept -385. 19.5 -19.8 0 -423. -347.
## 2 Limit 0.264 0.006 45.0 0 0.253 0.276
## 3 Income -7.66 0.385 -19.9 0 -8.42 -6.91
NOT: limit ve income birlikte ele alındığında limit artarken income tersine dönerek negatif etki yaratıyor.
summary(model_coklu )
##
## Call:
## lm(formula = Balance ~ Limit + Income, data = Credit)
##
## Residuals:
## Min 1Q Median 3Q Max
## -232.79 -115.45 -48.20 53.36 549.77
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -385.17926 19.46480 -19.79 <2e-16 ***
## Limit 0.26432 0.00588 44.95 <2e-16 ***
## Income -7.66332 0.38507 -19.90 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 165.5 on 397 degrees of freedom
## Multiple R-squared: 0.8711, Adjusted R-squared: 0.8705
## F-statistic: 1342 on 2 and 397 DF, p-value: < 2.2e-16
NOT: limit ve income birlikte ele alındığında limit artarken income tersine dönerek negatif etki yaratıyor. burada bir gariplik var deyip iki değişken arası korelasyona bakıyoruz.
cor(Credit$Income, Credit$Limit)
## [1] 0.7920883
NOT: Limit ve income aralarındaki korelasyon yüksek çıktı. Aralarında çoklu bağlantı olduğu için regresyona dahil ettiğimizde olduğundan farklı etki yarattı. Bu bizim denklemi yanlış kurduğumuzu gösterir.
O yüzden regresyon yapmadan önce bağımsız değişkenler arası ilişkiye bakarak .80 den fazla ise analize dahil etmemeliyiz. Yada temel bileşenler analizi gibi değişkenleri birleştirerek analiz edebiliriz.
YOL ANALİZİ MODELİ YEM AİLESİNİN EN ESKİ ÜYELERİNDENDİR. YOL ANALİZİNDE SADECE GÖZLENEN DEĞİŞKENLER MODELLENİR. BU MODEL GÖZLENEN DEĞİŞKENLER İÇİN BİR YAPISAL EŞİTLİK MODELİDİR. * TEMELDE GÖZLENEN DEĞİŞKENLERİN VARYANSLARINA VE GÖZLENEN DEĞİŞKENLER ARASINDAKİ KOVARYANSLARA DAYALI OLAN YEM ANALİZLERİNİN AMACI BİR GRUP GÖZLENEN DEĞİŞKEN ARASINDAKİ KOVARYANS ÖRÜNTÜSÜNÜ ANLAMAK VE ARAŞTIRMA MODELİ İLE GÖZLENEN DEĞİŞKENLERİN VARYANSLARINI AÇIKLAMAKTIR.
NOT: SADECE GÖZLENEN DEĞİŞKENLER İLE YAPILAN EN AZ İKİ ÇOKLU REGRESYONA YOL ANALİZİ DENİR.
ARAŞTIRMA SENARYOSU: üniversite öğrencilerinde egzersiz, dayanıklılık, form ve stresin hastalık üzerindeki etkileri incelenecektir.
ARAŞTIRMA HİPOTEZLERİ: 1. egzersiz ve dayanıklılık formu etkiler 2. egzersiz ve dayanıklılık stresi etkiler 3. egzersiz,dayanıklılık form ve stres hastalığı etkiler. NOT: bu üç hipotezin her biri çoklu regresyon modelidir.
yol_model <- ‘stres ~ egzersiz + dayaniklilik hastalik ~ egzersiz + dayaniklilik + form + stres form ~ egzersiz + dayaniklilik’
library(readr) # veri setini okuduk
veri <- read_table("illness.dat", col_names = FALSE) # colnames false olma nedeni değişkenlerin sütun başlığı olmamamsı.
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## X1 = col_double(),
## X2 = col_double(),
## X3 = col_double(),
## X4 = col_double(),
## X5 = col_double()
## )
colnames(veri) <- c("form", "stres", "hastalik", "egzersiz", "dayaniklilik") # sütunda değişken adı atadık.
YOL MODELİNİ KURDUK
library(lavaan)
## This is lavaan 0.6-21
## lavaan is FREE software! Please report any bugs.
yol_model <- 'stres ~ egzersiz + dayaniklilik
hastalik ~ egzersiz + dayaniklilik + form + stres
form ~ egzersiz + dayaniklilik
egzersiz ~~ dayaniklilik' #egzersiz ve dayanıklılık dışsal bağımsız değişken
yol_fit <- sem(yol_model, veri)
yol_fit
## lavaan 0.6-21 ended normally after 8 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 14
##
## Number of observations 400
##
## Model Test User Model:
##
## Test statistic 12.307
## Degrees of freedom 1
## P-value (Chi-square) 0.000
NOT: EGZERSİZ VE DAYANIKLILIK DIŞSAL DEĞİŞKEN (nedeni bilinmeyen ve modelde gösterilmeyen) * FORM, STRES VE HASTALIK İÇSEL DEĞİŞKEN(varsayılan nedenleri modelde açıkça gösterilen) *içsel değişkenlerin üzerindeki çift yönlü ok D (bozukluk yani hata) Bozukluk içsel değişkende gözlenen varyansın açıklanmayan kısmını temsil eder.Doğası ve sayısı bilinmediğinden Gizil değişken gibi düşünülür.Doğrudan ölçülemezler.
library(lavaan)
library(semPlot)
## Registered S3 method overwritten by 'openxlsx':
## method from
## as.character.formula formula.tools
yol_model <- 'stres ~ egzersiz + dayaniklilik
hastalik ~ egzersiz + dayaniklilik + form + stres
form ~ egzersiz + dayaniklilik
egzersiz ~~ dayaniklilik'
yol_fit <- sem(yol_model, veri)
semPaths(yol_fit,rotation=2, curvePivot = TRUE,
sizeMan = 12, sizeInt = 1,
sizeLat = 4,
edge.label.cex = 1.8,
pastel=TRUE,
nCharNodes = 0, nCharEdges = 0)
library(lavaan)
fitMeasures(yol_fit, fit.measures = c("chisq","df","pvalue",
"cfi","tli", "rmsea","srmr", "nnfi"))
## chisq df pvalue cfi tli rmsea srmr nnfi
## 12.307 1.000 0.000 0.948 0.485 0.168 0.043 0.485
YORUM: Model uyum indeksleri birlikte değerlendirildiğinde, CFI’nin kabul edilebilir düzeyde olduğu (≥ .90), SRMR’nin iyi uyum gösterdiği (≤ .08), ancak TLI’nin düşük (< .90) ve RMSEA’nin yüksek (> .10) ve TLI değeri değeri 0.90 değerinden küçük olması nedeniyle modelin genel olarak yeterli uyum göstermediği söylenebilir.
# summary(yol_fit, fit.measures = TRUE)
fitMeasures(yol_fit, c("rmsea","rmsea.ci.lower",
"rmsea.ci.upper","rmsea.pvalue"))
## rmsea rmsea.ci.lower rmsea.ci.upper rmsea.pvalue
## 0.168 0.093 0.258 0.006
# lavResiduals(yol_fit)
# resid(yol_fit)
resid(yol_fit, type='normalized')
## $type
## [1] "normalized"
##
## $cov
## stres hastlk form egzrsz dynkll
## stres 0.002
## hastalik 0.718 0.392
## form -2.950 -1.031 0.006
## egzersiz -0.021 -0.011 0.010 0.000
## dayaniklilik -0.005 -0.005 0.025 0.067 0.000
NOT: Standarlaştırılmış hata kovaryans matrisinde yer alan diyagonal dışındaki her bir değerin mutlak değerinin 1.96’dan küçük olması beklenir.
modindices(yol_fit, sort = TRUE)
## lhs op rhs mi epc sepc.lv sepc.all sepc.nox
## 25 stres ~ form 12.115 -0.326 -0.326 -0.180 -0.180
## 24 stres ~ hastalik 12.115 0.799 0.799 0.693 0.693
## 26 form ~ stres 12.115 -0.093 -0.093 -0.168 -0.168
## 27 form ~ hastalik 12.115 -0.296 -0.296 -0.464 -0.464
YORUM: Tabloda 4 parametreden herhangi birinin modelin ki-kare değerini 12.1 kadar düşüreceğini görüyoruz.form ve hastalık arasındaki doğrudan etkide açıklanamayan varyans olduğunu ve bununda yeni bir parametre eklenerek sağlanabilieceğini söyleyebiliriz.
NOT: stres ~ form yolu eklendi.
yol_model_v1 <-
'stres ~ egzersiz + dayaniklilik
hastalik ~ egzersiz + dayaniklilik + form + stres
form ~ egzersiz + dayaniklilik
stres ~ form
egzersiz ~~ dayaniklilik'
yol_fit_v1 <- sem(yol_model_v1, veri)
semPaths(yol_fit_v1,rotation=2, curvePivot = TRUE,
sizeMan = 12, sizeInt = 1,
sizeLat = 4,
edge.label.cex = 1.8,
pastel=TRUE,
nCharNodes = 0, nCharEdges = 0)
NOT: yeni modelde uyum indekslerine bakalım.
fitmeasures(yol_fit_v1,fit.measures=c("chisq","p","df"))
## chisq df
## 0 0
YORUM: Modelin serbestlik derecesinin sıfır (df = 0) olması nedeniyle model doygun (just-identified) yapıdadır ve bu nedenle uyum indeksleri (χ² = 0) anlamlı biçimde yorumlanamaz.Bu durumda model veriye mükemmel uyar gibi görünür, ama bu gerçek bir uyum değildir.
p_pa <- semPaths(yol_fit,
whatLabels = "est",
sizeMan = 10,
edge.label.cex = 1.15,
style = "ram",
layout = "spring",
nCharNodes = 0,
nCharEdges = 0)
p_pa_2 <- semptools::mark_sig(p_pa, yol_fit)
plot(p_pa_2)
#Anlamlı olmayan yol katsayıları kaldırılarak model tekrar kurulur
yol_model_v1 <-
'stres ~ egzersiz + dayaniklilik
hastalik ~ egzersiz + dayaniklilik + form + stres
form ~ egzersiz + dayaniklilik
stres ~ form
egzersiz ~~ dayaniklilik'
yol_model_v2 <-
'stres ~ dayaniklilik
hastalik ~ form + stres
form ~ egzersiz + dayaniklilik
stres ~ form
egzersiz ~~ dayaniklilik'
yol_fit_v2 <- sem(yol_model_v2, veri)
NOT: v2 modelinde, v1’deki egzersiz → stres, egzersiz → hastalık ve dayanıklılık → hastalık doğrudan yolları kaldırılmış.
fitMeasures(yol_fit_v2,c("rmsea","cfi","srmr"))
## rmsea cfi srmr
## 0.000 1.000 0.011
m <- matrix(c(NA, NA, "form", NA, NA,
"egzersiz", NA, NA, NA, NA,
NA, NA, NA, NA, "hastalik",
"dayaniklilik", NA, NA, NA, NA,
NA, NA, "stres", NA, NA
), byrow = TRUE, 5, 5)
m
## [,1] [,2] [,3] [,4] [,5]
## [1,] NA NA "form" NA NA
## [2,] "egzersiz" NA NA NA NA
## [3,] NA NA NA NA "hastalik"
## [4,] "dayaniklilik" NA NA NA NA
## [5,] NA NA "stres" NA NA
p_pa <- semPaths(yol_fit_v2, whatLabels = "est",
sizeMan = 10,
edge.label.cex = 1.15,
style = "ram",
nCharNodes = 0, nCharEdges = 0,
layout=m)
p_pa_2 <- semptools::mark_sig(p_pa, yol_fit_v2) #katsayıların üzerine yıldız koymak için
plot(p_pa_2)
fitmeasures(yol_fit_v2,fit.measures = c("chisq" ,"df" , "pvalue",
"cfi","tli","rmsea",
"rmsea.ci.lower", "rmsea.ci.upper"
,"srmr"))
## chisq df pvalue cfi tli
## 1.354 3.000 0.716 1.000 1.025
## rmsea rmsea.ci.lower rmsea.ci.upper srmr
## 0.000 0.000 0.061 0.011
YORUM: sd = 3 için ki-karenin 0.05 alfa düzeyindeki kritik değeri 7.82’dir. 1.354 değeri 7.82 değerinden küçük olduğundan gözlenen ki-kare değeri (1,354) 0.05 alfa düzeyinde istatistiksel olarak anlamlı değildir.
RMSEA, CFI ve SRMR indekslerinin değerleri istenilen değerdedir
NOT: revize etmeden önceki ve sonraki model arasındaki farka bakarak hangisinin daha iyi olduğuna Kİ-KARE VEYA AIC ve BIC YORDAYICI UYUM İNDEKSLERİ ile bakılabilir.
NOT: Akaike Information Criterion (AIC) ve Bayesian Information Criterion (BIC) evren dayanaklı yordayıcı uyum indeksleri olarak bilinir.
AIC ve BIC değerleri çoğunlukla aynı veriden kestirilen hiyerarşik olmayan modellerin arasından seçim yapmak için kullanılır. Bağıl olarak daha küçük değerler uygundur.
MODEL 1
fitmeasures(yol_fit_v1,fit.measures = c("AIC","BIC"))
## aic bic
## 21422.85 21482.72
MODEL 2
fitmeasures(yol_fit_v2,fit.measures = c("AIC","BIC"))
## aic bic
## 21418.2 21466.1
NOT: model 2 model 1 den üretildiği için kümelenmeiş yani biri diğerinin içinde olan modeller olarak tanımlanır. ki model kümelenmiş modeller olduğundan, iki model arasında AIC ve BIC değerlerinin karşılaştırılmasına gerek yoktur.
summary(yol_fit)
## lavaan 0.6-21 ended normally after 8 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 14
##
## Number of observations 400
##
## Model Test User Model:
##
## Test statistic 12.307
## Degrees of freedom 1
## P-value (Chi-square) 0.000
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Structured
##
## Regressions:
## Estimate Std.Err z-value P(>|z|)
## stres ~
## egzersiz -0.080 0.048 -1.678 0.093
## dayaniklilik -0.556 0.086 -6.475 0.000
## hastalik ~
## egzersiz 0.047 0.042 1.115 0.265
## dayaniklilik -0.010 0.075 -0.138 0.891
## form -0.408 0.076 -5.342 0.000
## stres 0.314 0.041 7.704 0.000
## form ~
## egzersiz 0.206 0.025 8.118 0.000
## dayaniklilik 0.161 0.046 3.506 0.000
##
## Covariances:
## Estimate Std.Err z-value P(>|z|)
## egzersiz ~~
## dayaniklilik 0.000 135.170 0.000 1.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|)
## .stres 4419.143 312.481 14.142 0.000
## .hastalik 2937.014 207.678 14.142 0.000
## .form 1261.565 89.206 14.142 0.000
## egzersiz 4883.673 345.328 14.142 0.000
## dayaniklilik 1496.499 105.818 14.142 0.000
NOT: yukarıdaki tablodaki değerlerin her biri farklı ölçekte olduğu için karşılaştırma yapılamayacağı için aşağıdaki tabloda standardize edilmiş yol katsayıları alınarak yorumlanır.
standardizedsolution(yol_fit)
## lhs op rhs est.std se z pvalue ci.lower ci.upper
## 1 stres ~ egzersiz -0.080 0.047 -1.683 0.092 -0.172 0.013
## 2 stres ~ dayaniklilik -0.307 0.045 -6.802 0.000 -0.396 -0.219
## 3 hastalik ~ egzersiz 0.054 0.048 1.116 0.264 -0.041 0.148
## 4 hastalik ~ dayaniklilik -0.007 0.048 -0.138 0.891 -0.100 0.087
## 5 hastalik ~ form -0.260 0.048 -5.474 0.000 -0.354 -0.167
## 6 hastalik ~ stres 0.362 0.044 8.165 0.000 0.275 0.449
## 7 form ~ egzersiz 0.371 0.043 8.721 0.000 0.288 0.455
## 8 form ~ dayaniklilik 0.160 0.045 3.544 0.000 0.072 0.249
## 9 egzersiz ~~ dayaniklilik 0.000 0.050 0.000 1.000 -0.098 0.098
## 10 stres ~~ stres 0.899 0.029 31.527 0.000 0.843 0.955
## 11 hastalik ~~ hastalik 0.795 0.035 22.445 0.000 0.725 0.864
## 12 form ~~ form 0.836 0.034 24.730 0.000 0.770 0.903
## 13 egzersiz ~~ egzersiz 1.000 0.000 NA NA 1.000 1.000
## 14 dayaniklilik ~~ dayaniklilik 1.000 0.000 NA NA 1.000 1.000
Örneğin, form ~ egzersiz standartlaştırılmış kestirimi 0.371’dir. Bu değer, egzersiz puanındaki bir standart sapmalık artışın yordanan form puanını 0.71 standart sapma artıracağını önerir.
fitted(yol_fit)$cov
## stres hastlk form egzrsz dynkll
## stres 4913.491
## hastalik 1620.570 3695.190
## form -214.411 -637.267 1508.175
## egzersiz -389.731 -304.437 1007.492 4883.673
## dayaniklilik -832.615 -374.968 240.862 0.000 1496.499
YORUM: Örneğin, form değişkenindeki açıklanmayan varyans oranı yaklaşık 0.836’dır. form değişkeni için toplam varyansın yaklaşık %83.6’sı açıklanmamıştır. 1261.4 / 1508.75 = 0.836
inspectSampleCov(yol_fit,data=veri)
## Warning: 'inspectSampleCov' is deprecated.
## Use 'lavInspectSampleCov' instead.
## See help("Deprecated")
## $cov
## stres hastlk form egzrsz dynkll
## stres 4914.301
## hastalik 1788.526 3800.642
## form -626.495 -766.862 1508.781
## egzersiz -394.803 -306.722 1008.959 4883.673
## dayaniklilik -833.343 -375.536 242.743 9.118 1496.498
*STANDARTLAŞTIRILMIŞ SONUÇLAR
parameterEstimates(yol_fit,standardized = TRUE)
## lhs op rhs est se z pvalue ci.lower
## 1 stres ~ egzersiz -0.080 0.048 -1.678 0.093 -0.173
## 2 stres ~ dayaniklilik -0.556 0.086 -6.475 0.000 -0.725
## 3 hastalik ~ egzersiz 0.047 0.042 1.115 0.265 -0.035
## 4 hastalik ~ dayaniklilik -0.010 0.075 -0.138 0.891 -0.157
## 5 hastalik ~ form -0.408 0.076 -5.342 0.000 -0.557
## 6 hastalik ~ stres 0.314 0.041 7.704 0.000 0.234
## 7 form ~ egzersiz 0.206 0.025 8.118 0.000 0.156
## 8 form ~ dayaniklilik 0.161 0.046 3.506 0.000 0.071
## 9 egzersiz ~~ dayaniklilik 0.000 135.170 0.000 1.000 -264.929
## 10 stres ~~ stres 4419.143 312.481 14.142 0.000 3806.692
## 11 hastalik ~~ hastalik 2937.014 207.678 14.142 0.000 2529.972
## 12 form ~~ form 1261.565 89.206 14.142 0.000 1086.724
## 13 egzersiz ~~ egzersiz 4883.673 345.328 14.142 0.000 4206.843
## 14 dayaniklilik ~~ dayaniklilik 1496.499 105.818 14.142 0.000 1289.098
## ci.upper std.lv std.all
## 1 0.013 -0.080 -0.080
## 2 -0.388 -0.556 -0.307
## 3 0.129 0.047 0.054
## 4 0.136 -0.010 -0.007
## 5 -0.258 -0.408 -0.260
## 6 0.394 0.314 0.362
## 7 0.256 0.206 0.371
## 8 0.251 0.161 0.160
## 9 264.929 0.000 0.000
## 10 5031.593 4419.143 0.899
## 11 3344.056 2937.014 0.795
## 12 1436.406 1261.565 0.836
## 13 5560.503 4883.673 1.000
## 14 1703.899 1496.499 1.000
Çıktı her bir içsel değişken için 𝑅2 değerinin kestirimini verir. 𝑅2 değerinin anlamı çoklu regresyondakinin anlamına benzerdir: bağımlı değişkendeki varyansın yordayıcılar tarafından açıklanan yüzdesi.
Örneğin, form için 𝑅2 değeri 0.164 olarak tahmin edilmiştir. Bu değer, form değişkenindeki varyansın yaklaşık %16’sının yordayıcılar tarafından açıklandığını önerir.
Not: Her bir içsel değişken için 𝑅2 değeri ve standartlaştırılmış artık varyansının toplamı “1”e eşit olmalıdır: 0.164 + 0.836 = 1
inspect(yol_fit, "rsquare")
## stres hastalik form
## 0.101 0.205 0.164
YORUM: FORM TARAFINDAN AÇIKLANAN VARYANS 0.164 GİBİ YORUMLANIR.
library(knitr)
standardizedsolution(yol_fit) %>%
filter(op == "~") %>%
select('Bağımlı Değişkenler'=lhs, Gosterge=rhs,
B=est.std, SE=se, Z=z, 'p-value'=pvalue) %>%
knitr::kable(digits = 3, booktabs=TRUE, format="markdown",
caption="Factor Loadings")
| Bağımlı Değişkenler | Gosterge | B | SE | Z | p-value |
|---|---|---|---|---|---|
| stres | egzersiz | -0.080 | 0.047 | -1.683 | 0.092 |
| stres | dayaniklilik | -0.307 | 0.045 | -6.802 | 0.000 |
| hastalik | egzersiz | 0.054 | 0.048 | 1.116 | 0.264 |
| hastalik | dayaniklilik | -0.007 | 0.048 | -0.138 | 0.891 |
| hastalik | form | -0.260 | 0.048 | -5.474 | 0.000 |
| hastalik | stres | 0.362 | 0.044 | 8.165 | 0.000 |
| form | egzersiz | 0.371 | 0.043 | 8.721 | 0.000 |
| form | dayaniklilik | 0.160 | 0.045 | 3.544 | 0.000 |
library(lavaan)
fit_v1 <- fitMeasures(yol_fit_v1, c("chisq","df","cfi","tli","rmsea","srmr","aic","bic"))
fit_v2 <- fitMeasures(yol_fit_v2, c("chisq","df","cfi","tli","rmsea","srmr","aic","bic"))
tablo <- rbind(Model_1 = fit_v1,
Model_2 = fit_v2)
round(tablo, 3)
## chisq df cfi tli rmsea srmr aic bic
## Model_1 0.000 0 1 1.000 0 0.000 21422.85 21482.72
## Model_2 1.354 3 1 1.025 0 0.011 21418.20 21466.10
rbind(
Model_1 = fitMeasures(yol_fit_v1, c("chisq","df","cfi","tli","rmsea","srmr","aic","bic")),
Model_2 = fitMeasures(yol_fit_v2, c("chisq","df","cfi","tli","rmsea","srmr","aic","bic"))
)
## chisq df cfi tli rmsea srmr aic bic
## Model_1 0.000000 0 1 1.000 0 2.269702e-08 21422.84 21482.72
## Model_2 1.353926 3 1 1.025 0 1.146713e-02 21418.20 21466.10
yol_model <- 'stres ~ s_d*dayaniklilik
hastalik ~ h_f*form + h_s*stres
form ~ f_e*egzersiz + f_d*dayaniklilik
egzersiz ~~ dayaniklilik
# Direct Effect
dir_fm:=h_f
dir_sh:=h_s
# InDirect Effect
ind_h1:=f_e*h_f
# formun egzersiz ve hastalık arasındaki aracılık etkisi
ind_h2:=s_d*h_s
#stresin dayanıklılık ve hastalık arasındaki aracılık etkisi
ind_h3:=f_d*h_f
#formun dayanıklılık ve hastalık arasındaki aracı etkisi
# total InDirect Effect
tot_ind:=ind_h1 +ind_h2+ind_h3
# Total Effect
tot:=tot_ind'
fsem1 <- sem(yol_model,veri)
standardizedsolution(fsem1)
## lhs op rhs label est.std se z pvalue
## 1 stres ~ dayaniklilik s_d -0.307 0.045 -6.787 0.000
## 2 hastalik ~ form h_f -0.241 0.044 -5.526 0.000
## 3 hastalik ~ stres h_s 0.365 0.042 8.708 0.000
## 4 form ~ egzersiz f_e 0.371 0.043 8.721 0.000
## 5 form ~ dayaniklilik f_d 0.160 0.045 3.544 0.000
## 6 dayaniklilik ~~ egzersiz 0.000 0.050 0.000 1.000
## 7 stres ~~ stres 0.906 0.028 32.542 0.000
## 8 hastalik ~~ hastalik 0.800 0.035 22.752 0.000
## 9 form ~~ form 0.836 0.034 24.730 0.000
## 10 dayaniklilik ~~ dayaniklilik 1.000 0.000 NA NA
## 11 egzersiz ~~ egzersiz 1.000 0.000 NA NA
## 12 dir_fm := h_f dir_fm -0.241 0.044 -5.526 0.000
## 13 dir_sh := h_s dir_sh 0.365 0.042 8.708 0.000
## 14 ind_h1 := f_e*h_f ind_h1 -0.090 0.020 -4.573 0.000
## 15 ind_h2 := s_d*h_s ind_h2 -0.112 0.021 -5.223 0.000
## 16 ind_h3 := f_d*h_f ind_h3 -0.039 0.013 -2.971 0.003
## 17 tot_ind := ind_h1+ind_h2+ind_h3 tot_ind -0.240 0.033 -7.220 0.000
## 18 tot := tot_ind tot -0.240 0.033 -7.220 0.000
## ci.lower ci.upper
## 1 -0.396 -0.219
## 2 -0.327 -0.156
## 3 0.283 0.447
## 4 0.288 0.455
## 5 0.072 0.249
## 6 -0.098 0.098
## 7 0.851 0.960
## 8 0.731 0.869
## 9 0.770 0.903
## 10 1.000 1.000
## 11 1.000 1.000
## 12 -0.327 -0.156
## 13 0.283 0.447
## 14 -0.128 -0.051
## 15 -0.154 -0.070
## 16 -0.064 -0.013
## 17 -0.306 -0.175
## 18 -0.306 -0.175
Yüksek lisans tezimde YEM analizi yapmıştım. O zamanki bilgimle sadece ezbere çalıştığımı farkettim. Ben tezimde uyum indekslerini bu kadar anlamlandırarak yorumlamamıştım.Otomatikleşerek sadece uyum indeksleri aralıklarının tablosu ile karşılaştırıp yorumlamıştım.Bu derste RMESEA değerinin %90 güven aralığında yorumlanmasınındaha kabul edilebilir olduğunu ve bunun yazılmasının önemli olduğunu öğrendim. Sağlıklı model uyum katsayılarının elde edilmesi için sd>0 olması gerektiğinide öğrendim. Lisrelde çalışırken değişkenimizin varyansını öncelikle neden 1 e sabitlediğimizi de bilmiyordum. Sadece kopyala yapıştır şeklinde yazılan syntex benim için şimdi daha anlaşılır oldu. Bu Yol analizi dersi YEM için hem tekrar hemde daha da derinlemesine öğrenme sağladı. Daha önce yaptığım tez çalışmasında da gözlemlediğim en önemli noktalardan birininde model kurulurken içsel ve dışsal değişkenlerin kuramsal temellere dayanarak iyi tanımlanması olduğu söylenebilir. Modelin çalışmanın başından itibaren doğru kurulması önemlidir.