REGRESYON

SORU 1. BASİT REGRESYON

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

MODELİN KURULMASI

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

SORU 2. ÇOKLU REGRESYON

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")

SORU 3. ÇOKLU REGRESYON

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İ

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)

uyum indisleri

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

Standartlaştırılmış Artık Değerleri

# 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.

Modifikasyon İndeksleri

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.

Modifikasyon önerisi sonrası modelin yeniden tanımlanması

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.

yol analizi modeli

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.

AIC ve BIC YORDAYICI UYUM İNDEKSLERİ

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.

Standartlaştırılmış Artık

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

PARAMETRE KESTİRİMLERİ

*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.

MODEL SONUÇLARININ RAPOR EDİLMESİ

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")
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

MODEL KARŞILAŞTIRMA

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

Model Karşılaştırmalarının Rapor Edilmesi

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

Doğrudan, Dolaylı ve Toplam Etkiler

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

:) ÖĞRENME GÜNLÜĞÜ :)

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.