Sunumdaki örnek Roth, Wiebe, Fillingim ve Shay’in (1989) çalışmasından gelmektedir. Çalışmalarında üniversite öğrencilerinde egzersiz, dayanıklılık, form ve stresin hastalık üzerindeki etkilerini incelemişlerdir.

🔗illness.dat adlı veri setinde 5 değişken, 400 birey vardır. Değişkenler egzersiz, dayanıklılık, form, stres ve hastalık değişkenleri olup sürekli değişkenlerdir.

Araştırma hipotezleri:

egzersiz ve dayanıklılık formu etkiler.

egzersiz ve dayanıklılık stresi etkiler.

egzersiz, dayanıklılık, form ve stres hastalığı (illness) etkiler.

Bu üç hipotezin her biri çoklu regresyon modelidir:

form𝑖=𝛽0+𝛽eegzersiz𝑖+𝛽dayanıklılık𝑖+𝑒𝑓𝑖

stres𝑖=𝛽0+𝛽eegzersiz𝑖+𝛽dayanıklılık𝑖+𝑒𝑓𝑖

hastalık𝑖=𝛽0+𝛽eegzersiz𝑖+𝛽dayanıklılık𝑖+𝛽form𝑖+𝛽stres𝑖+𝑒𝑓𝑖

Bu modeller R’da lavaan paketi ile model denklemi oluşturularak kullanılmalıdır.

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'
library(readr)
veri <- read_table("import/illness.dat", col_names = FALSE)
## 
## ── 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")
library(lavaan)
yol_model <-  'stres     ~ egzersiz + dayaniklilik
               hastalik  ~ egzersiz + dayaniklilik + form + stres
               form      ~ egzersiz + dayaniklilik
egzersiz ~~ dayaniklilik'
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
yol_model
## [1] "stres     ~ egzersiz + dayaniklilik\n               hastalik  ~ egzersiz + dayaniklilik + form + stres\n               form      ~ egzersiz + dayaniklilik\negzersiz ~~ dayaniklilik"

#bagımlı degsken icsel, bagmsız degskenler dıssal gozlenen degsken. nedenleri bilinmeyen ve modelde gosterilmeyen degiskenler dıssal degsken nedenleri arastrmmada arastırılan, degskenlik gostermekte serbest olmayan dgskenler icsel degsken. her icsel degskenin bozuklugu vardır,hata terimi.icsel degskende acıklanamayan kısım.

bu arastrmada toplam 8 dogrudan etki vardır. dayanıklılık dogrudan hastalıgı dogrudan etkilerken aynı zamanda form üzerinden de dolaylı mediator) etkilemekte. egzersiz stresi etkiler, stres üzerinden de dolaylı hastalıgı etkiler. egzersiz form üzerinden hastalığı, dayanıklılık stres uzeriden hastalıgı etklyr.

library(lavaan)
library(semPlot)
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)

İCSEL DEGSKENİN DISSAL DEGSENLER TARAFNDAN ACIKLANMAYAN KISMI BOZUKLUK VARYANSı 8 yol kaytsayısı gozlennen kovaryanns elemanının 15 modeli var .kurulan modelle 14 model acıklanır. sd 0 olursa moodel tum kestrmleri mukemmel gosterir.bu istenmez. sd=15-14=1 3 gizil degskenmz var. bagımlı degskenin acıklanamayan kısmı. gozlem eksikliği tanımlanamayan modele sebep olur. model veri uyumunun degerlendirileblmesi icin sd>0 olmalı. bir grup iyilik, bir grup da kotuluk uyum degeri yorumlanmalı.sd 1’e yaklaştıkca iyilik, 0’a yakın kotuluk

fitmeasures(yol_fit,fit.measures = c("chisq" ,"df" , "pvalue"))
##  chisq     df pvalue 
## 12.307  1.000  0.000
  # 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

#model veriye uymuyor.alt sınırı 0.093, üst sınır 0,258 cıkmış.RMSEA degeri <0,08 olması istenen durum oldugu icin kabl edilebilir. modelde vernin bir kısmı uyum saglarken bir kısmı uyum saglamıyor.

fitMeasures(yol_fit, "srmr")
##  srmr 
## 0.043
fitmeasures(yol_fit,fit.measures = c("cfi","tli","nnfi"))
##   cfi   tli  nnfi 
## 0.948 0.485 0.485

uyum indekslerinde en azından ki kare, ki-kare/sd, srmr, cfı, rmsea verlmeli.

fitmeasures(yol_fit,fit.measures = c("chisq" ,"df" ,"pvalue",
                                     "cfi","tli","rmsea",    
                                     "rmsea.ci.lower","rmsea.ci.upper"
                                     ,"srmr"))
##          chisq             df         pvalue            cfi            tli 
##         12.307          1.000          0.000          0.948          0.485 
##          rmsea rmsea.ci.lower rmsea.ci.upper           srmr 
##          0.168          0.093          0.258          0.043

model veriye uyum saglamıyorsa bazı degsimler yapılmalı.

# 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

hastalık ve stres arassı acıklanamayan varyans cok az bunlar arası iliski ok. form ve stres arasında acıklanamyan varyans degeri -2,95 cıkmıs demekki baska degskenler de etki etmiş. >1,96 ise bu modelde acıklanamayan seyler var. modifikasyon indekslerii incelendiğinde form stres arasnda sonuc verecektr mhtemelen.

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

ki kare degerimiz 12.3 iken önerilen modellerden birnin eklemek 12.1’e dusuuyor. ancak bu cok anlamlı olmayablr.form stres arası artık maddesinde 2.satırdaki modiifkasyon stresin formdan yordandıgı yol eklenr ancak sd=0 olur ve modelden yorum yapılamaz. stres ve form arasına birsey eklenincce ki-kare de sd de düser. sd =1 oldugu icin baska birsey eklerken modelde islevsz birseyi cıkarmk iyi olablr.

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)
yol_fit_v1
## lavaan 0.6-21 ended normally after 27 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        15
## 
##   Number of observations                           400
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0

sd 0 oldugu icn mantklı degl.

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)

fitmeasures(yol_fit_v1,fit.measures=c("chisq","p","df"))
## chisq    df 
##     0     0
p_pa <- 
semPaths(yol_fit_v1, 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_v1)
plot(p_pa_2)

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)

anlamlı olmayan yol katsayıları kaldırıldır

fitmeasures(yol_fit_v2,c("df","rmsea","rmsea.ci.lower","rmsea.ci.upper","cfi","srmr"))
##             df          rmsea rmsea.ci.lower rmsea.ci.upper            cfi 
##          3.000          0.000          0.000          0.061          1.000 
##           srmr 
##          0.011

yol semasını olustururken bagımsız degskenlerimizi nerde gostermek istyrsak bunun dizaynı layout icin m matrisi olsturup semPath fonksyonu icine layout icinde gosterlrl. degskenin adı neyse matrise onu yazmalı.

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)

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)
plot(p_pa_2)

egzersz hastalıgı dogrudan etkilemyordu, öncekilerde anlamlı cıkmamıstı bu yolu kaldırmak tutumlulağa goturdu ve sd’yi yukseltti. formu iyi olan bireyin stres seviyesi daha dusuk. dayaanıklılıgı yuksek olanın formu iyi ve anlamlı, egzersiz ile form arasnda anlamlı poztf iliski var.form ile hastalık arasnda negatf iliski var.

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

yeni modelde istenen degerlere ulasıldı.ilk model veriye kotu uyum gosterdi.modifikasyon indeksinde önerilen ilki sd=0 olunca 2.modele gectk.2.model daha iyi uyum sagladı. eğer her iki model de uyum saglasaydı o zaman ki-kare fark testi yapılır. birden fazla model veriye uyum sagladığında ki-kare fark testi ile bakılıp yorumlanır.ki-kare fark testinde modellerin ki kareleri, sd’leri arasındaki farklarda; ki*-kare farkı sd’farkından hangisi anlamlıysa o tercih edilr. buna bakarken es zamanlı olarak aıc ve bıca bakılır aıc ve bıc kucuk olan daha iyi uyum demektir.

fitmeasures(yol_fit_v1,fit.measures = c("AIC","BIC"))
##      aic      bic 
## 21422.85 21482.72
fitmeasures(yol_fit_v2,fit.measures = c("AIC","BIC"))
##     aic     bic 
## 21418.2 21466.1