📚 İlk Bölüme Dair Notlar

Bu bölümde regresyon modellemesi ve korelasyon hesaplamasının R’da hangi paketler ve komutlarla yapıldığı üzerinde durmaktayız.

ggpubr paketi kullanılan paketlerden biridir.

ggscatter fonksiyonu aracılığıyla saçılım grafiği oluşturabiliriz. Bu fonksiyon aracılığıyla regresyon çizgisi, güven aralığı ve korelasyon katsayısı gibi özellikler kolaylıkla eklenebiliyor.

geom_jitter() noktaların çakıştığı yeri alıp ona küçük bir hareket vererek sallamak olarak düşünülebilir.

patchwork ya da ggarrange grafikleri görsel olarak birlikte vermek için kullanılır.

(grafik1) / (grafik2 | grafik3)

Dönüşümleri yapabilmek için;

coord_trans (x= “log10”, y= “log10”)

ya da

scale_x_log10(), scale_y_log10() kullanılabilir.

Korelasyon için:

  • cor() fonksiyonu Pearson çarpım-momentum korelasyonunu hesaplar.

  • Himsc, corrplot, ggcorplot paketlerini yükleyebiliriz.

  • psch paketindeki corPlot fonksiyonunu kullanabiliriz.

  • PerformanceAnalytics paketindeki; chart.Correlation fonksiyonu kullanılabilir.

  • GGally paketindeki ggpairs() fonksiyonu kullanılabilir.

🧩Veri Kümesinin Tanıtımı

Bu etkinlikte “midiPISA” veri seti kullanılmış olup veri seti; öğrenci id (OGRENCIID), sınıf düzeyi (SINIF), cinsiyet (CINSIYET), anne eğitim düzeyi (Anne_Egitim), baba eğitim düzeyi (Baba_Egitim), okumaktan zevk alma (OKUMA_ZEVK), öğrenciler öğretmenin söylediklerini dinlemezler ST097Q01TA, gürültü ve düzensizlik vardır ST097Q02TA, öğretmen öğrencilerin susması için uzun süre bekler ST097Q03TA, öğrenciler derse iyi odaklanamıyorlar ST097Q04TA, öğrenciler, ders başladıktan sonra, uzun bir süre derse dikkatlerini vermiyorlar ST097Q05TA, okuma puanı olası değer 1 (ODOKUMA1), okuma puanı olası değer 2 (ODOKUMA2), okuma puanı olası değer 3 (ODOKUMA3), okuma puanı olası değer 4 (ODOKUMA4), okuma puanı olası değer 5 (ODOKUMA5) değişkenleri olmak üzere toplam 16 değişkenden oluşmaktadır.

🤓 Kodlamaya Başlayalım

Öncelikle ilgili paketleri çağırıyoruz.

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(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.2
## ✔ lubridate 1.9.4     ✔ tibble    3.3.0
## ✔ 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

Çalışmamızda kullanacağımız midiPISA veri setimize bir göz atalım.

load("C:/Users/Huawei/Desktop/OLC731/data/midiPISA.rda")
glimpse(midiPISA)
## Rows: 6,890
## Columns: 16
## $ OGRENCIID   <dbl> 79200768, 79201064, 79201118, 79201275, 79201481, 79201556…
## $ SINIF       <hvn_lbll> 10, 10, 10, 9, 9, 10, 10, 10, 10, 10, 10, 11, 9, 10, …
## $ CINSIYET    <hvn_lbll> 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 2, 1,…
## $ Anne_Egitim <hvn_lbll> 2, 2, 1, 6, 4, 4, 5, 5, 1, 0, 1, 6, 4, 4, 2, 4, 2, 5,…
## $ Baba_Egitim <hvn_lbll> 2, 2, 2, 6, 4, 6, 5, 5, 4, 2, 5, 6, 4, 1, 4, 5, 4, 5,…
## $ OKUMA_ZEVK  <dbl> -0.2891, 0.6040, 0.6380, -1.1538, 0.6669, 0.3568, -0.0886,…
## $ ST097Q01TA  <hvn_lbll> 1, 3, 2, 2, 3, 3, 3, 3, 3, 3, 4, 1, 1, 2, 4, 2, 3, 3,…
## $ ST097Q02TA  <hvn_lbll> 2, 2, 3, 2, 3, 3, NA, 3, 4, 4, 4, 2, 1, 2, 3, 3, 3, 4…
## $ ST097Q03TA  <hvn_lbll> 1, 3, 3, 3, 4, 2, 3, 2, 3, 2, 3, 1, 1, 3, 4, 4, 3, 3,…
## $ ST097Q04TA  <hvn_lbll> 1, 3, 3, 1, 3, 2, 3, 1, 4, 1, 4, 2, 1, 2, 3, 3, 2, 3,…
## $ ST097Q05TA  <hvn_lbll> 1, 3, 3, 1, 1, 3, 4, 2, 3, 1, 4, 2, 1, 3, 3, 3, 1, 3,…
## $ ODOKUMA1    <dbl> 376.022, 512.316, 396.383, 393.006, 552.457, 441.286, 410.…
## $ ODOKUMA2    <dbl> 417.746, 473.229, 413.859, 428.757, 570.109, 415.682, 421.…
## $ ODOKUMA3    <dbl> 420.630, 563.902, 423.121, 364.850, 562.955, 406.586, 425.…
## $ ODOKUMA4    <dbl> 413.837, 485.396, 452.124, 382.522, 530.835, 437.001, 384.…
## $ ODOKUMA5    <dbl> 434.434, 500.394, 392.434, 378.563, 532.487, 473.036, 461.…
dim(midiPISA)
## [1] 6890   16

Veri setimizde NA’ları bulalım.

colSums(is.na(midiPISA))
##   OGRENCIID       SINIF    CINSIYET Anne_Egitim Baba_Egitim  OKUMA_ZEVK 
##           0           0           0          55          57          69 
##  ST097Q01TA  ST097Q02TA  ST097Q03TA  ST097Q04TA  ST097Q05TA    ODOKUMA1 
##          64          83         111          81          69           0 
##    ODOKUMA2    ODOKUMA3    ODOKUMA4    ODOKUMA5 
##           0           0           0           0

Veri setimizdeki NA’ları temizleyelim.

midiPISA1 <- na.omit(midiPISA)

Label olan bir veri seti ile çalıştığımız için labellardan kurtulalım.

midiPISA1 <- midiPISA1 %>% 
  mutate(across(where(haven::is.labelled), ~ as.numeric(haven::zap_labels(.x))))

🔎 Saçılım Grafiği

Okuma zevkinin 1. okuma puanı olası değeri ile ilişkisini saçılım grafiği ile çizdirdik.

library(ggplot2)
g1<-ggplot(midiPISA1, aes(x=OKUMA_ZEVK,y=ODOKUMA1))+
  geom_point(alpha=0.5, shape="square", size=0.8, color="darkblue") +
  geom_smooth(method="lm", se = FALSE)+
  labs(
    x= "okumaya karsi duyulan zevk",
    y= "1.okuma puani olasi degeri"
  )
g1
## `geom_smooth()` using formula = 'y ~ x'

Şimdi ise regresyon eğrisinin denklemini yazalım.

library(ggpubr) 
g2<-ggplot(midiPISA1, aes(x =OKUMA_ZEVK, y= ODOKUMA1)) +
    geom_point(size = 1, color = "skyblue") +
    geom_smooth(method = "lm", color = "orange", se = FALSE) +
  # Regresyon denklemini otomatik olarak ekle (stat_regline_equation)
  # label.y ve label.x ile denklemin grafikteki konumunu ayarlıyoruz.
  stat_regline_equation() +
  labs(
    x = "okumaya karsi duyulan zevk",
    y = "1.okuma puani olasi degeri"
  ) +
    theme_pubr()
g2
## `geom_smooth()` using formula = 'y ~ x'

Korelasyon katsayısını ekleyelim.

library(ggpubr)
g3<-ggscatter(midiPISA1, x = "OKUMA_ZEVK", y = "ODOKUMA1",
          add = "reg.line",
          size= 1,
          conf.int = TRUE, 
          cor.coef = TRUE, 
          cor.method = "pearson")+
          labs(
                x = "okumaya karsi duyulan zevk",
                y = "1.okuma puani olasi degeri"
          )+
          theme_minimal()
g3

Şimdi bu 3 grafiği patchwork aracılığıyla birarada gösterelim.

library(patchwork)
library(ggplot2)
g1<-ggplot(midiPISA1, aes(x=OKUMA_ZEVK, y=ODOKUMA1))+
  geom_point(alpha=0.5, size=0.5, shape="square", color="darkblue") +
  geom_smooth(method="lm",se = FALSE)+
   theme(
    axis.title = element_text(size = 10),   # eksen başlıkları
    axis.text  = element_text(size = 8),    # eksen rakamları
    plot.title = element_text(size = 12)    # grafik başlığı
  )
  

library(ggpubr) 
g2<-ggplot(midiPISA1, aes(x =OKUMA_ZEVK, y= ODOKUMA1)) +
    geom_point(size = 0.5, color = "skyblue") +
    geom_smooth(method = "lm", color = "orange", se = FALSE) +
  # Regresyon denklemini otomatik olarak ekle (stat_regline_equation)
  # label.y ve label.x ile denklemin grafikteki konumunu ayarlıyoruz.
  stat_regline_equation()+
    theme(
    axis.title = element_text(size = 10),   # eksen başlıkları
    axis.text  = element_text(size = 8),    # eksen rakamları
    plot.title = element_text(size = 12)    # grafik başlığı
  )

library(ggpubr)
g3<-ggscatter(midiPISA1, x = "OKUMA_ZEVK", y = "ODOKUMA1",
          size= 0.1,
          add = "reg.line", 
          conf.int = TRUE, 
          cor.coef = TRUE, 
          cor.method = "pearson")+
    theme(
    axis.title = element_text(size = 10),   # eksen başlıkları
    axis.text  = element_text(size = 8),    # eksen rakamları
    plot.title = element_text(size = 12)    # grafik başlığı
  )
g1/(g2|g3)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

📦Kutu Grafikleriyle Bağlantı

Şimdi de kutu grafikleriyle çizime devam edelim. 3. okuma puanı olası değeri ile 1. okuma puanı olası değeri arasındaki ilişkiye ait kutu grafiğini çiziniz.

ggplot(midiPISA1, aes(x=ODOKUMA3, y=ODOKUMA1)) +
  geom_boxplot(fill = "purple", alpha = 0.7)+
  labs(
    x="3.okuma puani olasi degeri",
    y="1.okuma puani olasi degeri",
    title = "Kutu Grafigi:
    3.okuma puani olasi degeri ile 1.okuma puani olasi degeri"
  )+
  theme_minimal()
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?

1. okuma puanı olası değeri ile 3.okuma puanı olası değere ilişkin scatterplot grafiğini çizelim.

ggplot(midiPISA1, aes(y = ODOKUMA1, x = ODOKUMA3)) +   
  geom_point(size=1, shape=8, color="blue") +
  labs(
    x="3.okuma puani olasi degeri",
    y="1.okuma puani olasi degeri",
    title="Scatterplot:
    3.okuma puani olasi degeri ile 1.okuma puani olasi degeri"
  )

3.okuma puanı olası değerini 5 kategoriye ayıralım.

midiPISA1 <- midiPISA1 %>%    
  mutate(ODOKUMA3_cut = cut(ODOKUMA3, breaks = 5))

1. okuma puanı olası değeri ile kategorik haldeki 3.okuma puanı olası değere ilişkin kutu grafiğini çizelim.

ggplot(midiPISA1, aes(x = ODOKUMA3_cut, y = ODOKUMA1)) +  
  geom_boxplot(fill = "purple", alpha = 0.7) +
  labs(
    x="kategorik 3.okuma puani olasi degeri",
    y="1.okuma puani olasi deger,",
    title="Kutu Grafigi:
    Kategorik 3.okuma puani olasi degeri ile 
    1.okuma puani olasi degeri iliskisi"
  )

Geom_jitter’a bakalım.

ggplot(midiPISA1, aes(y = ODOKUMA1, x = ODOKUMA3_cut)) +  
  geom_boxplot(fill="purple",outlier.alpha = 0) + 
  geom_jitter(color = "sky blue", width = 0.1, size=0.3) +
  labs(
  x="kategorik 3.okuma puani olasi degeri",
    y="1.okuma puani olasi deger,",
    title="Kutu Grafigi & Geom_Jitter"
  )

📈Korelasyon Hesaplayalım

Korelasyon hesabı yapmak için cor() fonksiyonunu kullanıyoruz.

midiPISA1 |>
  summarise(N = n(), 
            r = cor(OKUMA_ZEVK, SINIF))
## # A tibble: 1 × 2
##       N      r
##   <int>  <dbl>
## 1  6655 0.0374
midiPISA1 |>
  summarise(N = n(), 
            r = cor(OKUMA_ZEVK, ODOKUMA1))
## # A tibble: 1 × 2
##       N     r
##   <int> <dbl>
## 1  6655 0.224
ggplot(midiPISA1, aes(x=OKUMA_ZEVK,y=ODOKUMA1))+
  geom_point(fill="skyblue", alpha=0.5) +
  geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

midiPISA1 |>
  summarise(N = n(), 
            r = cor(ODOKUMA1, ODOKUMA2))
## # A tibble: 1 × 2
##       N     r
##   <int> <dbl>
## 1  6655 0.923
ggplot(midiPISA1, aes(x=ODOKUMA1,y=ODOKUMA2))+
  geom_point() +
  geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(midiPISA1, aes(x=ST097Q03TA,y=ST097Q01TA))+
  geom_point() +
  geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(midiPISA1, aes(x=ST097Q01TA,y=ODOKUMA1))+
  geom_point() +
  geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

📌PerformanceAnalytics ile Korelasyon Grafiği Oluşturma

#data %>%
  #select(midiPISA1, 2,3,11,12)#
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
my_data <- midiPISA1[, c(4,5,6)]
chart.Correlation(my_data, histogram=TRUE, pch=100)

library(ggpubr) 

ggplot(data = midiPISA1, aes(x = ODOKUMA1, y = ODOKUMA2)) +
    geom_point(size = 0.2, color = "black") +
    geom_smooth(method = "lm", color = "red", se = FALSE) +
  # Regresyon denklemini otomatik olarak ekle (stat_regline_equation)
  # label.y ve label.x ile denklemin grafikteki konumunu ayarlıyoruz.
  stat_regline_equation() +
  labs(
    x = "ODOKUMA1",
    y = "ODOKUMA2"
  ) +
    theme_pubr()
## `geom_smooth()` using formula = 'y ~ x'

midiPISA1 |>
  summarize(N = n(), 
            r = cor(ST097Q01TA, ODOKUMA2))
## # A tibble: 1 × 2
##       N     r
##   <int> <dbl>
## 1  6655 0.141
library(ggpubr)
ggscatter(midiPISA1, x = "ODOKUMA1", y ="ODOKUMA2",
          add = "reg.line", 
          conf.int = TRUE, 
          cor.coef = TRUE, 
          size=0.2,
          cor.method = "pearson")

library(Hmisc)
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library(corrplot)
## corrplot 0.95 loaded
data <- my_data

# rcorr fonksiyonu hem korelasyon (r) hem de p-değerini verir
corr_res <- rcorr(as.matrix(data))

# Korelasyon matrisi
r <- corr_res$r
# p-değerleri matrisi
p <- corr_res$P

corrplot(r)

data <- my_data

# rcorr fonksiyonu hem korelasyon (r) hem de p-değerini verir
corr_res <- rcorr(as.matrix(data))

# Korelasyon matrisi
r <- corr_res$r
# p-değerleri matrisi
p <- corr_res$P

corrplot(r,
         method = "square", 
         outline = T,
         addgrid.col = "darkgray",      type = "lower",
         order="hclust")

📌ggcorrplotile Korelasyon Grafiği Oluşturma

library(ggcorrplot)
ggcorrplot(r,
           hc.order = TRUE,
           type = "lower",
           lab = TRUE)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the ggcorrplot package.
##   Please report the issue at <https://github.com/kassambara/ggcorrplot/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

📌Psych ile Korelasyon Grafiği Oluşturma

library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
corPlot(midiPISA1[, 5:7],
        stars = TRUE)

📌GGally ile Korelasyon Grafiği Oluşturma

library(GGally)
ggpairs(midiPISA1[, 5:7], title="correlogram with ggpairs()")

🧠 Öğrenme Günlüğü

Korelasyon hesaplama ve regresyon grafiğini yazdırma gibi işlemleri öğrendik. Veri seti farklılaştığı için derste öğrendiğimiz gibi tam yapabildim mi emin olamadım. Görselleştirme ve görselleştirme de ilerlemek keyifli. Sadece acaba chunklar arasında otomatik sıralama değişkliği yapabililyor muyuz, chunkların sırasını taşıyarak değiştirmenin kolay bir yolu var mı diye düşündüm. Derste size soracağım hocam. Not: Son kısımda düzenleme yapmak istiyorum fakat bazen R’ım hata veriyor. Hata vermeden şimdilik bu halini publish yapıyorum.