👩🏻‍💻 Ödev 4: Değişkenler Arasındaki İlişkinin İncelenmesi

🎯 Ödevin Amacı

Bu ödevin amacı, bir veri setindeki değişkenler arasındaki ilişkiyi görselleştirerek ilişki biçimini (doğrusal / doğrusal olmayan), yönünü (pozitif / negatif) ve gücünü (zayıf / orta / güçlü) belirlemektir.

1. Uygulama

Adım 1: Veri seçimi

Bu ödev kapsamında kullanılacak veri seti olarak “iris” veri seti seçilmiştir. Bu veri seti, 1936 yılında Ronald A. Fisher tarafından yayımlanmış olup, istatistiksel sınıflandırma ve veri analizi alanlarında en sık kullanılan örneklerden biridir. Veri seti üç farklı Iris çiçeği türüne (setosa, versicolor, ve virginica) ait toplam 150 gözlem içermektedir. Her türden 50 örnek alınmış olup, her bir çiçek için dört sayısal değişken ölçülmüştür: çanak yaprak uzunluğu (Sepal.Length), çanak yaprak genişliği (Sepal.Width), taç yaprak uzunluğu (Petal.Length) ve taç yaprak genişliği (Petal.Width). Ayrıca Species adlı kategorik bir değişken her gözlemin türünü belirtmektedir. Bu veri seti türler arasındaki morfolojik farklılıkları incelemeye ve değişkenler arasındaki ilişkileri görselleştirmeye olanak sağlamaktadır. iris veri seti korelasyon analizi ve regresyon temelli görselleştirmeler için örnek olarak kullanılabilir.

📍paketlerin etkinleştirilmesi

library(ggplot2)
library(ggExtra)
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
library(ggcorrplot)

📍veri paketini inceleme

data(iris)
str(iris)          # değişken türleri ve örnek değerler
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)      
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
sapply(iris[, 1:4], function(x) sum(is.na(x)))  # eksik değer kontrolü
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##            0            0            0            0

Adım 2: Değişkenler arasındaki ilişkilerin görselleştirilmesi

Bu adımda veri setinde yer alan dört sayısal değişken arasındaki ilişkiler çeşitli görselleştirme yöntemleriyle incelenmiştir.

Değişkenler arası ilişki matrisi

# Grafiğin görsel ayarları
par(
  family = "Arial",       # Yazı tipi
  cex = 0.7,              # Yazı boyutu
  mar = c(3, 3, 3, 1),    # Kenar boşlukları (alt, sol, üst, sağ)
  oma = c(2, 2, 2, 2)     # Dış kenar boşlukları
)

# sayısal değişkenler
num_vars <- iris[, 1:4]
colnames(num_vars) <- c(
  "Canak U. (cm)",
  "Canak G. (cm)",
  "Tac U. (cm)",
  "Tac G. (cm)"
  )

# değişken çiftlerini aynı anda gösterme
pairs(
  num_vars,
      main = "Iris Veri Seti: Değişkenler Arası İlişki Matrisi",
      pch = 21, 
      bg = "#ffc1c1",
      cex.labels = 1.2,
  font.labels = 2,
  gap = 0.6
  )

Not:

Canak U : çanak yaprak uzunluğu

Canak G : çanak yaprak genişliği

Tac U : taç yaprak uzunluğu

Tac G : taç yaprak genişliği

Bu grafik, her değişken çiftinin ilişkisini ayrı bir küçük panelde gösterir.

taç yaprak uzunluğu ile genişliği arasında doğrusal ve pozitif bir ilişki vardır. Buna karşın çanak yaprak genişliği ile uzunluğu arasındaki ilişki zayıf ve dağınıktır.

Korelasyon matrisi

# Sayısal değişkenleri Türkçeleştirme
num_vars <- iris[, 1:4]
colnames(num_vars) <- c(
  "Canak U. (cm)",
  "Canak G. (cm)",
  "Tac U. (cm)",
  "Tac G. (cm)"
)

par(
  family = "Arial",       
  cex = 0.5,              
  mar = c(3, 3, 3, 1),    
  oma = c(2, 2, 2, 2)     
)

# Korelasyon matrisi oluşturma
cm <- cor(num_vars)  
suppressWarnings(
ggcorrplot(cm, 
           hc.order = TRUE, 
           type = "lower", 
           lab = TRUE, 
           lab_size = 3, 
           colors = c("#cd1076", "white", "#48d1cc"),
           title = "Iris Veri Setinde Korelasyon Matrisi",
           outline.col = "#96cdcd"
           )) +
  theme_minimal(base_family = "Arial", base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, size = 11),
    axis.text.x = element_text(angle = 45, hjust = 1),
    axis.title.x = element_blank(),  
    axis.title.y = element_blank()   
                               )

Matriste görüldüğü üzere

taç yaprak uzunluğu ve genişliği arasında çok güçlü pozitif ilişki (r ≈ 0.96)

çanak yaprak uzunluğu ile taç yaprak uzunluğu arasında da güçlü pozitif ilişki (r ≈ 0.87) gözlenmektedir.

çanak yaprak genişliği ile diğer değişkenler arasında zayıf veya ters yönlü ilişkiler gözlenmektedir.

Taç yaprak uzunluğu ile genişliği arasındaki ilişki

r_val <- cor(iris$Petal.Length, iris$Petal.Width)

# Scatter plot
p <- ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) +
  geom_point(shape = 8, fill = "white", size = 2.8, alpha = 0.7, stroke = 0.8) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linewidth = 0.8) +
  scale_color_manual(values = c(
    "setosa" = "#8E44AD",       # mor
    "versicolor" = "#16A085",   # turkuaz
    "virginica" = "#E67E22"     # mercan
  )) +
  labs(
    title = "Iris Veri Setinde Taç Yaprak Uzunluğu ve Genişliği Arasındaki İlişki",
    subtitle = paste0("Regresyon Çizgisi (LM) • Korelasyon Katsayısı: r = ", round(r_val, 3)),
    x = "Taç Yaprak Uzunluğu (cm)",
    y = "Taç Yaprak Genişliği (cm)",
    color = "Tür"
  ) +
  theme_minimal(base_family = "Arial", base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, size = 8),
    plot.subtitle = element_text(hjust = 0.5, size = 10),
    axis.title = element_text(face = "bold"),
    legend.position = "right"
  )

# Üst ve yan kutu grafikleri ekleme
ggMarginal(p, type = "boxplot", fill = "grey90", color = "grey40")
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

Bu grafik iris veri setinde taç yaprak uzunluğu ile taç yaprak genişliği arasındaki ilişkiyi göstermektedir. Her bir nokta bir çiçeği temsil etmektedir ve renkler türleri ayırt etmektedir.

Grafikteki regresyon çizgisi değişkenler arasındaki doğrusal eğilimi göstermekte; üst ve yan kutu grafikleri ise her değişkenin dağılımını özetlemektedir.

Korelasyon katsayısı r=0.963 olarak hesaplanmış olup, bu değer çok güçlü pozitif doğrusal bir ilişkiye işaret etmektedir. Bu bulgu taç yaprak uzunluğu arttıkça genişliğin de arttığını göstermektedir.

Değişkenler arası korelasyon matrisi

iris_num <- iris[, 1:4]

corr_matrix <- cor(iris_num)

# Korelasyon grafiği
ggcorrplot(
  corr_matrix,
  method = "circle",         
  lab = TRUE,                
  lab_size = 3,              
  colors = c("#cd1076", "white", "#48d1cc"), # Renk geçişi (negatif → pozitif)
  title = "Iris Veri Setinde Değişkenler Arası Korelasyon Matrisi"
) +
  coord_fixed() +            
  theme_minimal(base_family = "Arial") +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, size = 12),
    axis.text.y = element_text(size = 7),
    axis.text.x = element_text(size = 7, angle = 45, hjust = 1),
    legend.position = "top"
  ) +
  labs(x = "Değişkenler", y = "Değişkenler")
## Coordinate system already present.
## ℹ Adding new coordinate system, which will replace the existing one.

Bu grafikte iris veri setindeki dört sayısal değişkenin korelasyon katsayıları dairesel biçimde gösterilmiştir. Dairelerin boyutu korelasyonun gücünü; rengi ise yönünü ifade etmektedir. Dairenin büyüklüğü ilişkinin gücünü temsil etmektedir.

Sayısal değişkenler arasındaki ilişki

library(GGally)

sayisal_degiskenler <- iris[, 1:4]
suppressMessages(
# ggpairs grafiği
ggpairs(
  sayisal_degiskenler,
  title = "Iris Veri Setinde Sayısal Değişkenler Arasındaki İlişkiler",
  upper = list(continuous = wrap("cor", size = 2.5, color = "darkblue")),   
  lower = list(continuous = wrap("smooth", alpha = 0.3, color = "darkred")),
  diag = list(continuous = wrap("densityDiag", alpha = 0.5, fill = "#8E44AD"))
) +
  labs(x = "Değişkenler", y = "Değişkenler") +
  theme_minimal(base_family = "Arial") +
  theme(
    plot.title = element_text(size = 10, face = "bold", hjust = 0.5),
    axis.text.x = element_text(size = 6, angle = 45, hjust = 1),
    axis.text.y = element_text(size = 6)
  )
)

Bu grafik, iris veri setindeki dört sayısal değişkenin (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) birbiriyle olan ilişkilerini aynı anda göstermektedir. Grafiğin diyagonal çizgisi, her değişkenin dağılım yoğunluğunu (density) göstermekte; alt üçgende değişken çiftleri arasındaki saçılım ve regresyon eğilimleri, üst üçgende ise korelasyon katsayıları yer almaktadır.

Korelasyon değerleri incelendiğinde:

Petal.Length ile Petal.Width arasında güçlü pozitif ilişki (r = .963) gözlenmiştir. Bu, taç yaprak uzunluğu arttıkça taç yaprak genişliğinin de arttığını göstermektedir.

Sepal.Length değişkeniyle Petal değişkenleri arasında da yüksek pozitif korelasyonlar bulunmaktadır (r = .872, r = .818). Buna karşın Sepal.Width değişkeni diğer değişkenlerle zayıf veya negatif ilişkiler göstermektedir (örneğin r = –.428, r = –.366).

Grafiğin alt üçgenindeki regresyon çizgileri bu bulguları desteklemekte; pozitif ilişkilerde yukarı eğimli, negatif ilişkilerde ise aşağı eğimli çizgiler gözlenmektedir. Diyagonal yoğunluk grafikleri ise değişkenlerin dağılımlarının normalden sapmalar içerdiğini, özellikle Petal değişkenlerinde iki tepe noktasının tür farklılığından kaynaklandığını düşündürmektedir.

2. RMarkdown Günlüğüm

Saçılım grafiği (scatterplot), iki sayısal değişken arasındaki ilişkiyi göstermek için kullanılan en temel ve faydalı araçlardan biridir. Bir saçılım grafiğini doğru analiz etmek için noktaların oluşturduğu şekle, değişkenlerin hareket yönüne, ilişkinin ne düzeyde belirgin olduğuna ve genel desene uymayan aykırı noktaların olup olmadığına bakarız.

Bir kutu grafiği (boxplot), aslında özel bir tür saçılım grafiğidir. Bir saçılım grafiğini yan yana dizilmiş kutu grafiklerinin sürekli bir genellemesi olarak görebiliriz ancak kutu grafikleri, verinin özetini (medyan, çeyrekler vb.) göstererek bizi ham veriden koparır. Bu kopukluğu ortadan kaldırmak için ham veri noktalarını geom_jitter gibi bir fonksiyonla kutu grafiklerinin üzerine ekleyebiliriz. Bu teknik her bir gruptaki veri noktalarının gerçek dağılımını, yoğunluğunu ve varlığını net bir şekilde görmemizi sağlar.

Çok sayıda veri noktasıyla çalışırken saçılım grafiklerinde anlamsız bir leke görünümü oluşabilir. Noktaların üst üste binmesi (overplotting) altta yatan gerçek deseni ve veri yoğunluğunu gizleyebilir. Bu sorunu gidermek ve grafiği daha okunaklı hale getirmek için şeffaflık (alpha) (noktaları yarı saydam hale getirebiliriz ve üst üste binen noktaların olduğu alanlar giderek koyulaşır böylece veri yığınlarının nerede kümelendiğini bir bakışta görmemizi sağlar) ve jittering (noktalara küçük titreşimler ekler ve bu titreşimler özellikle ayrık ölçeklerde üst üste yığılmış veri noktalarını dağıtarak gizli kalan nokta sayısını ve dağılımını görünür kılar) ayarlaması yapabiliriz.

Korelasyon katsayısı (r), -1 ile 1 arasında değişen ve iki değişken arasındaki doğrusal bir ilişkinin gücünü ve yönünü ölçen sayısal bir değerdir. Eğer iki değişken arasında parabolik veya başka bir türde doğrusal olmayan ama güçlü bir ilişki varsa, korelasyon katsayısı sıfıra yakın çıkabilir ve bizi ortada bir ilişki olmadığı yanılgısına düşürebilir. Bu nedenle veriyi görselleştirmek oldukça önemlidir.

ggplot grafiklerinde geom_point() fonksiyonu kullanılarak nokta şekilleri belirlenebilir.

Bu fonksiyondaki temel argümanlar şunlardır:

shape: Sayısal bir değer alır ve pch parametresiyle nokta biçimini tanımlar.

size: Noktaların boyutunu (cex) ayarlamak için kullanılır.

color: Noktaların kenar rengi veya çizgi rengini belirtir; renk adı ya da renk kodu kullanılabilir.

Gruplara göre farklı şekil ve renkler atanmak istendiğinde scale_shape_manual() ve scale_color_manual() fonksiyonları kullanılabilir.

Bu fonksiyonlar her grup için nokta biçimini ve rengini tanımlamayı mümkün kılar.

ggpubr::show_point_shapes()
## Scale for y is already present.
## Adding another scale for y, which will replace the existing scale.