library(moderndive)
## Warning: package 'moderndive' was built under R version 4.5.2
library(ggplot2)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## 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
library(ISLR)
## Warning: package 'ISLR' was built under R version 4.5.2
library(tidyverse)
## Warning: package 'tibble' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.1.0     ✔ tidyr     1.3.1
## ✔ readr     2.1.5
## ── 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
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>

REGRESYON

Soru 1: Basit 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

#Modelin Kurulması
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

Yorum bty_avg kaatsayısı yaklaşık 0.006’dır. Yani güzellik puanındaki 1 birimlik artış, ders puanına 0.06 artış anlamına gelir.

Görselleştirme

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'

Doğrusal bir ilişki var ve regresyon denklemi kurulabilir.

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

# Paralel eğimler modeli
model_coklu <- lm(score ~ bty_avg + gender, data = evals)

#Katsayıların incelenmesi
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       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
#gendermale katsayısı pozitifse (0.17) aynı güzellik puanına sahip bir erkek hocanın, kadın hocadan 0.17 puan daha yüksek alması beklenir.

# Sonuçları görüntüleme
summary(model_coklu)
## 
## Call:
## lm(formula = score ~ bty_avg + gender, data = evals)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8305 -0.3625  0.1055  0.4213  0.9314 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.74734    0.08466  44.266  < 2e-16 ***
## bty_avg      0.07416    0.01625   4.563 6.48e-06 ***
## gendermale   0.17239    0.05022   3.433 0.000652 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5287 on 460 degrees of freedom
## Multiple R-squared:  0.05912,    Adjusted R-squared:  0.05503 
## F-statistic: 14.45 on 2 and 460 DF,  p-value: 8.177e-07

Grafik Olarak Görüntüleme

ggplot(evals, aes(x=bty_avg, y= score, color =gender)) + 
  geom_point(alpha =0.3) +
  geom_parallel_slopes(se= FALSE) +
  labs(title = "Cinsiyet Kontrol Edildiğinde Güzellik Etkisi")

# Etkileşim modeli
model_coklu_etkilesim <- lm(score ~ bty_avg*gender, data = evals)

#Katsayıların incelenmesi
get_regression_table(model_coklu_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
#gendermale katsayısı pozitifse (0.17) aynı güzellik puanına sahip bir erkek hocanın, kadın hocadan 0.17 puan daha yüksek alması beklenir.

# Sonuçları görüntüleme
summary(model_coklu_etkilesim)
## 
## Call:
## lm(formula = score ~ bty_avg * gender, data = evals)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8084 -0.3828  0.0903  0.4037  0.9211 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         3.95006    0.11800  33.475   <2e-16 ***
## bty_avg             0.03064    0.02400   1.277   0.2024    
## gendermale         -0.18351    0.15349  -1.196   0.2325    
## bty_avg:gendermale  0.07962    0.03247   2.452   0.0146 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5258 on 459 degrees of freedom
## Multiple R-squared:  0.07129,    Adjusted R-squared:  0.06522 
## F-statistic: 11.74 on 3 and 459 DF,  p-value: 1.997e-07

Modelleri Karşılaştırma (İstatistiksel Test)

anova(model_coklu, model_coklu_etkilesim)
## Analysis of Variance Table
## 
## Model 1: score ~ bty_avg + gender
## Model 2: score ~ bty_avg * gender
##   Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
## 1    460 128.57                              
## 2    459 126.91  1    1.6625 6.0128 0.01457 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

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 (debt) incelenmektedir.

Kredi kartı borcunu (debt) 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

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
cor(Credit$Income, Credit$Limit)
## [1] 0.7920883
cor(Credit$Balance, Credit$Limit)
## [1] 0.8616973
cor(Credit$Income, Credit$Balance)
## [1] 0.4636565

(ISLR Paketi)

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
#Kredi kartı limiti arttıkça borç 017 artmaktadır.

model_gelir <- lm(Balance ~ Income, data= Credit)
get_regression_table(model_gelir)
## # 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
# Gelir arttırğında limit 6 birim artmaktadır.

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

YOL ANALİZİ

Yol analizinde sadece gözlenen değişkenler modellenir. Sadece gözlenen değişkenlerle yapılan çok sayıda regresyonun birleşmiş haline yol analizi denir.

library(readr)
veri <- read_table("illness.dat")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   `328` = col_double(),
##   `246` = col_double(),
##   `111` = col_double(),
##   `282` = col_double(),
##   `149` = col_double()
## )
colnames(veri) <- c("form", "stres", "hastalik", "egzersiz", "dayaniklilik")
library(lavaan)
## Warning: package 'lavaan' was built under R version 4.5.3
## 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'

yol_fit <- sem(yol_model, veri)

Hastalık Faktörleri Yol Modeli

library(semPlot)
## Warning: package 'semPlot' was built under R version 4.5.3
## Registered S3 method overwritten by 'openxlsx':
##   method               from         
##   as.character.formula formula.tools
semPaths(yol_fit, rotation = 2, curvePivot= TRUE,
         sizeMan = 12, sizeInt = 1,
         sizeLat = 4,
         edge.label.cex = 1.8,
         pastel = TRUE,
         nCharNodes = 0, nCharEdges = 0)

Modelin Yeniden Tanımlanması (Revised Model)

Anlamlılık Derecelerini Görmek İçin

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)

library(semptools)
## Warning: package 'semptools' was built under R version 4.5.3
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)

Anlamsız Yol Katsayıları Modelden Çıkarıldığında

yol_model_v2 <- 'stres ~ dayaniklilik
              hastalik ~ form + stres
              form ~ egzersiz + dayaniklilik
              stres ~ form
              egzersiz ~~ dayaniklilik'
yol_fit_v2 <- sem(yol_model_v2, veri)
fitMeasures(yol_fit_v2, c("rmsea", "df", "rmsea.ci.lower", "rmsea.ci.upper", "cfi", "srmr"))
##          rmsea             df rmsea.ci.lower rmsea.ci.upper            cfi 
##          0.000          3.000          0.000          0.062          1.000 
##           srmr 
##          0.012

YORUM

Üst sınır değerinin (rmsea upper) 0.08’in altında olması beklenir. Elde ettiğimiz değer (0.06) ile uygun görünmektedir.

ÖĞRENME GÜNLÜĞÜ

Regresyon denklemi kurulabilmesi için değişkenler arası ilişkinin doğrusal olması gereklidir.

Regresyonda artık gözlenen ve yordanan değer arasındaki farktır.

R kare değeri= açıklanan varyans (değişkenin açıklama oranı)

Adjusted r kare her zaman r kareden daha küçüktür.

Regresyon bakılırken çoklu bağlantı es geçilmemelidir.

Kategorik Bağımsız değişken varsa kategorilere göre bağımsız değişkenin bağımlı değişkeni etkileme düzeyi değişebilir. Kategorik değişkenin modere edip etmediğine mutlaka bakılmalıdır.

YOL ANALİZİ

Yol analizinde sadece gözlenen değişkenler modellenir. Sadece gözlenen değişkenlerle yapılan çok sayıda regresyonun birleşmiş haline yol analizi denir.

Birden fazla model veriye iyi uyum sağladığında ki kare fark testine bakılaarak seçim yapılır.

Ne kadar az parametre kestirirsek o kadar uyumlu modeller olur.çöö