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.
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.
Ö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))))
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'
Ş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 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şturmalibrary(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şturmalibrary(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şturmalibrary(GGally)
ggpairs(midiPISA1[, 5:7], title="correlogram with ggpairs()")
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.