Bu günlükte, ggplot2 paketindeki diamonds veri seti kullanılarak çoklu regresyon, dummy kodlama ve etkileşim etkisi analiz edilecektir. Bağımlı değişken olarak price (pırlanta fiyatı) alınmıştır.

  1. Veri Setinin Tanıtımı
data("diamonds")
glimpse(diamonds)
## Rows: 53,940
## Columns: 10
## $ carat   <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, 0.…
## $ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, Ver…
## $ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, I,…
## $ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1, …
## $ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, 64…
## $ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, 58…
## $ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, 34…
## $ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, 4.…
## $ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, 4.…
## $ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, 2.…
  1. Temel Betimleyici Analiz
summary(diamonds[, c("price", "carat", "depth", "table")])
##      price           carat            depth           table      
##  Min.   :  326   Min.   :0.2000   Min.   :43.00   Min.   :43.00  
##  1st Qu.:  950   1st Qu.:0.4000   1st Qu.:61.00   1st Qu.:56.00  
##  Median : 2401   Median :0.7000   Median :61.80   Median :57.00  
##  Mean   : 3933   Mean   :0.7979   Mean   :61.75   Mean   :57.46  
##  3rd Qu.: 5324   3rd Qu.:1.0400   3rd Qu.:62.50   3rd Qu.:59.00  
##  Max.   :18823   Max.   :5.0100   Max.   :79.00   Max.   :95.00
GGally::ggpairs(diamonds %>% select(price, carat, depth, table) %>% sample_n(1000))

- carat ile price arasında çok güçlü ve pozitif bir ilişki vardır (r = 0.931). - depth ve table değişkenlerinin korelasyonları daha düşüktür. - depth ~ table ilişkisinde negatif yönlü bir ilişki görülmektedir (r = -0.210). - Fiyat değişkeni sağa çarpık dağılıma sahiptir — uç gözlemler içerebilir.

  1. Temel Çoklu Regresyon
model1 <- lm(price ~ carat + depth + table, data = diamonds)
tab_model(model1, 
          title = "Model 1: Ağırlık, Derinlik ve Tabla Oranının Fiyata Etkisi")
Model 1: Ağırlık, Derinlik ve Tabla Oranının Fiyata Etkisi
  price
Predictors Estimates CI p
(Intercept) 13003.44 12237.24 – 13769.64 <0.001
carat 7858.77 7831.03 – 7886.51 <0.001
depth -151.24 -160.68 – -141.79 <0.001
table -104.47 -110.63 – -98.32 <0.001
Observations 53940
R2 / R2 adjusted 0.854 / 0.854

Model 1’de bağımlı değişken olarak pırlanta fiyatı (price), bağımsız değişkenler olarak ağırlık (carat), derinlik (depth) ve tabla oranı (table) kullanılmıştır.

Regresyon Katsayıları:

Modelin Açıklayıcılığı:

Genel Yorum:

Bu model sonuçları, pırlantanın ağırlığının fiyat üzerindeki en önemli belirleyici olduğunu net bir şekilde ortaya koymaktadır. Derinlik ve tabla oranı değişkenleri istatistiksel olarak anlamlı olmakla birlikte, etkileri carat kadar güçlü değildir. Modelin açıklayıcılığı oldukça yüksek olduğu için bu üç değişken birlikte pırlanta fiyatlarını başarılı şekilde tahmin edebilmektedir.

  1. Regresyon Varsayımları

5.1 Artıkların Dağılımı

par(mfrow = c(2,2))
plot(model1)

par(mfrow = c(1,1))

5.1 Artıkların Dağılımı – Model Varsayımları

Regresyon modeli için oluşturulan tanılayıcı grafikler aşağıdaki gözlemleri ortaya koymuştur:

Sonuç olarak, modelin bazı varsayımlarında kısmi ihlaller mevcuttur. Bu nedenle varsayımları iyileştirmek için dönüşüm, etkileşim terimi ekleme veya etkili gözlemleri dışlama gibi stratejiler değerlendirilebilir.

5.2 Normallik

qqnorm(resid(model1))
qqline(resid(model1))

shapiro.test(sample(resid(model1), 5000))
## 
##  Shapiro-Wilk normality test
## 
## data:  sample(resid(model1), 5000)
## W = 0.87926, p-value < 2.2e-16

5.2 Normallik Varsayımı: Q-Q Plot ve Shapiro-Wilk Testi

Modelin artıklarının normal dağılıma uygunluğu hem grafiksel hem de istatistiksel olarak değerlendirilmiştir.

Ancak örneklem büyüklüğü (n ≈ 54,000) çok yüksek olduğu için bu test fazla hassas çalışmakta, küçük sapmaları bile istatistiksel olarak anlamlı gösterebilmektedir. Bu nedenle grafiksel değerlendirme ile birlikte yorumlanmalıdır.

Sonuç olarak, normallik varsayımı özellikle uç değerlerde tam olarak sağlanmamaktadır. Gerekirse artıklar üzerinde dönüşüm (örneğin Box-Cox) ya da robust regresyon gibi yöntemler tercih edilebilir.

5.3 Multicollinearity (VIF)

car::vif(model1)
##    carat    depth    table 
## 1.042039 1.104275 1.141032

5.3 Çoklu Bağlantı (Multicollinearity) Analizi

Modeldeki değişkenler arası doğrusal bağlantıyı kontrol etmek amacıyla VIF (Variance Inflation Factor) değerleri hesaplanmıştır:

Değişken VIF
carat 1.042
depth 1.104
table 1.141

Tüm VIF değerleri 2’nin altındadır. Bu, bağımsız değişkenler arasında anlamlı bir çoklu bağlantı olmadığını ve model katsayılarının güvenle yorumlanabileceğini göstermektedir. Dolayısıyla bu modelde multicollinearity sorunu bulunmamaktadır.

  1. Etkili Gözlemler (Outliers)
diamonds$cooks_d <- cooks.distance(model1)
threshold <- 4 / nrow(diamonds)
diamonds %>%
  filter(cooks_d > threshold) %>%
  select(price, carat, depth, table, cooks_d) %>%
  arrange(desc(cooks_d)) %>%
  head()
## # A tibble: 6 × 5
##   price carat depth table cooks_d
##   <int> <dbl> <dbl> <dbl>   <dbl>
## 1 18018  5.01  65.5    59  0.0572
## 2 18531  4.5   65.8    58  0.0263
## 3 11668  3.65  67.1    53  0.0224
## 4 15223  4.01  61      61  0.0177
## 5 15223  4.01  62.5    62  0.0171
## 6 15984  4     63.3    58  0.0157

6. Etkili Gözlemler (Outliers): Cook’s Distance Analizi

Cook’s Distance değerleri, her bir gözlemin regresyon modeline olan etkisini ölçer. “4/n” kuralına göre (n = 53940, 4/n ≈ 0.000074), bu sınırın üzerinde olan gözlemler etkili gözlemler olarak değerlendirilir.

İlk 6 gözlemin Cook’s Distance değeri 0.015 – 0.057 arasında değişmektedir; bu değerler eşik değeri büyük ölçüde aşmıştır. Bu gözlemler, büyük karat değerine (carat > 4.0) ve yüksek fiyata sahip olup model üzerinde belirgin etkiler oluşturabilir.

Bu tür etkili gözlemler, modelin tahmin gücünü ve doğruluğunu bozabileceği için incelenmeli ve gerekiyorsa analiz dışında bırakılarak modeller yeniden kurulmalıdır.

  1. Dummy Kodlama: cut
diamonds$cut <- factor(diamonds$cut,
                       levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"))
model2 <- lm(price ~ carat + depth + table + cut, data = diamonds)
tab_model(model2, 
          title = "Model 2: Kesim Kalitesinin (cut) Eklenmesi")
Model 2: Kesim Kalitesinin (cut) Eklenmesi
  price
Predictors Estimates CI p
(Intercept) 4296.95 3378.77 – 5215.13 <0.001
carat 7890.77 7863.24 – 7918.30 <0.001
depth -73.69 -84.08 – -63.30 <0.001
table -41.82 -49.42 – -34.21 <0.001
cut [linear] 1028.09 969.94 – 1086.24 <0.001
cut [quadratic] -483.30 -529.85 – -436.75 <0.001
cut [cubic] 325.17 284.94 – 365.41 <0.001
cut [4th degree] 59.23 26.96 – 91.50 <0.001
Observations 53940
R2 / R2 adjusted 0.857 / 0.857

7. Dummy Kodlama: Kesim Kalitesi (cut)

Model 2’de, cut değişkeni faktör olarak modele dahil edilmiş ve R tarafından otomatik olarak dummy (yapay) değişkenlere dönüştürülmüştür. Bu değişken, pırlantanın kesim kalitesini belirtmekte olup 5 kategoriden oluşmaktadır (Fair, Good, Very Good, Premium, Ideal).

Referans kategori: “Fair” kesim.

Sonuçlara göre:

Bu sonuçlar, kesim kalitesinin fiyat üzerinde anlamlı bir rol oynadığını göstermektedir. Bu nedenle cut gibi kategorik değişkenlerin dummy kodlama ile modele dahil edilmesi önemlidir.

  1. Etkileşim: carat * cut
model3 <- lm(price ~ carat * cut + depth + table, data = diamonds)
tab_model(model3,
          title = "Model 3: Ağırlık ile Kesim Kalitesi Etkileşimi")
Model 3: Ağırlık ile Kesim Kalitesi Etkileşimi
  price
Predictors Estimates CI p
(Intercept) 4580.35 3669.00 – 5491.70 <0.001
carat 7494.57 7456.27 – 7532.86 <0.001
cut [linear] -466.63 -581.31 – -351.95 <0.001
cut [quadratic] 393.63 294.68 – 492.58 <0.001
cut [cubic] -231.09 -315.90 – -146.28 <0.001
cut [4th degree] 38.90 -26.61 – 104.41 0.245
depth -69.12 -79.43 – -58.80 <0.001
table -44.31 -51.88 – -36.74 <0.001
carat × cut [linear] 1518.29 1418.51 – 1618.06 <0.001
carat × cut [quadratic] -775.56 -865.53 – -685.59 <0.001
carat × cut [cubic] 526.10 444.85 – 607.36 <0.001
carat × cut [4th degree] 81.08 13.76 – 148.39 0.018
Observations 53940
R2 / R2 adjusted 0.860 / 0.860

8. Etkileşim (Moderatör) Etkisi: carat * cut

Model 3’te, carat (pırlanta ağırlığı) ile cut (kesim kalitesi) değişkeni arasında etkileşim terimleri dahil edilmiştir. Bu sayede ağırlığın fiyat üzerindeki etkisinin kesim kalitesine göre değişip değişmediği test edilmiştir.

Sonuçlara göre:

Bu sonuçlar, pırlanta fiyatlarının yalnızca ağırlık ve kesim kalitesine bağlı olmadığını; bu iki değişkenin birbirleriyle olan ilişkilerinin de önemli rol oynadığını göstermektedir.

  1. Model Karşılaştırması
library(performance)
compare_performance(model1, model2, model3, rank = TRUE)
## # Comparison of Model Performance Indices
## 
## Name   | Model |    R2 | R2 (adj.) |     RMSE |    Sigma | AIC weights
## ----------------------------------------------------------------------
## model3 |    lm | 0.860 |     0.860 | 1494.663 | 1494.829 |        1.00
## model2 |    lm | 0.857 |     0.857 | 1508.238 | 1508.350 |   8.71e-211
## model1 |    lm | 0.854 |     0.854 | 1526.038 | 1526.094 |    0.00e+00
## 
## Name   | AICc weights | BIC weights | Performance-Score
## -------------------------------------------------------
## model3 |         1.00 |        1.00 |           100.00%
## model2 |    8.72e-211 |   4.64e-203 |            32.50%
## model1 |     0.00e+00 |    0.00e+00 |             0.00%

9. Model Karşılaştırması

Üç modelin karşılaştırılmasında şu performans metrikleri kullanılmıştır: R², RMSE, AIC, BIC ve Performance Score.

Model RMSE AIC Weight Performance Score
Model 3 0.860 1494.66 1.00 100%
Model 2 0.857 1508.24 8.7e-211 32.5%
Model 1 0.854 1526.04 0.00 0.0%

Sonuçlara göre:

Bu sonuçlar, çoklu regresyon analizlerinde dummy değişkenlerin ve özellikle etkileşim terimlerinin modele dahil edilmesinin önemini net biçimde göstermektedir.

  1. Sonuçlar ve Yorum

Model 3, etkileşim içeren en kapsamlı modeldir. Kesim kalitesi ile ağırlık arasında anlamlı bir etkileşim olduğu görülmektedir. Ağırlık arttıkça fiyat tahmini kesim kalitesine göre farklılık göstermektedir. Ayrıca, dummy değişken olarak cut dahil edildiğinde modelin açıklayıcılığı artmıştır. Model varsayımları büyük ölçüde sağlanmaktadır.