R Markdown Örnek Uygulama Raporu 2

Tevfik Bulut

19 Haziran 2021

R Markdown üzerinde daha önce prettydoc paketi kullanılarak html uzantılı raporlama yapmıştım. Bu çalışmada ise prettydoc paketinde leonids teması kullanılarak R Markdown üzerinde html uzantılı raporlama yapılmıştır.

1 Yüklenen Kütüphaneler

Aşağıdaki R kod bloğunun çalıştırılmasından sonra kütüphanelerin yüklenip yüklenmediğine dair aşağıdaki gibi mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin hepsini yüklenmiştir demektir. Kolaylık sağlaması açısından yukarıda kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için yukarıdaki kod bloğu içerisinden kısa bir kod yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer ilgili kütüphane yüklenmemiş olursa “Paket Kurulumu Gerekli” ifadesi satırda yazacaktır. Satırda yazan bu uyarı metnine göre paketi ya kurar yada yüklersiniz. Bir paketin kurulması ile yüklenmesinin aynı şey olmadığını burada ifade etmek gerekir konuyu yabancı olanlar için. Paket kurulumu ilk defa yapılan bir işlem iken, paketin yüklenmesi zaten kurulan bir paketin yüklenmesi yani çalışır duruma getirilmesidir. İlk defa bir paket kurulumu gerçekleştiriliyorsa install.packages() fonksiyonunu, zaten bir paket kurulumu gerçekleştirilmiş ise ilgili paketin veya kütüphanenin yüklenmesi veya okunması için library() veya require() fonksiyonlarını kullanıyoruz. Fonksiyonlardaki parantez () içerisine yüklenecek paket veya kütüphane adını yazıyoruz.

kütüphane<-c("dplyr","tibble","tidyr","ggplot2","ggthemes","readr","readxl","ggpubr","formattable", "ggstance", "pastecs","writexl", "psych", "GGally","pander", "rstatix","RColorBrewer", "htmlwidgets","kableExtra","stargazer","readr", "equatiomatic")
yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
## Warning: package 'ggpubr' was built under R version 4.0.5
## Warning: package 'equatiomatic' was built under R version 4.0.5
#Kütüphane yüklenme durumunu gösteren tablo
 
tablo=suppressWarnings(yükle, classes = "warning")
   
isim=names(tablo)
   
deger=as_tibble(tablo)
   
data.frame(sıra=1:length(isim), kütüphane=isim, yuklenme_durumu=deger$value) %>% mutate(yuklenme_durumu=if_else(yuklenme_durumu==TRUE, "Yuklendi", "Paket Kurulumu Gerekli")) %>% kbl(caption = "Kütüphane Yüklenme Bilgisi") %>% kable_classic_2(full_width = F, html_font="arial")
Kütüphane Yüklenme Bilgisi
sıra kütüphane yuklenme_durumu
1 dplyr Yuklendi
2 tibble Yuklendi
3 tidyr Yuklendi
4 ggplot2 Yuklendi
5 ggthemes Yuklendi
6 readr Yuklendi
7 readxl Yuklendi
8 ggpubr Yuklendi
9 formattable Yuklendi
10 ggstance Yuklendi
11 pastecs Yuklendi
12 writexl Yuklendi
13 psych Yuklendi
14 GGally Yuklendi
15 pander Yuklendi
16 rstatix Yuklendi
17 RColorBrewer Yuklendi
18 htmlwidgets Yuklendi
19 kableExtra Yuklendi
20 stargazer Yuklendi
21 readr Yuklendi
22 equatiomatic Yuklendi

2 Tanımlayıcı İstatistikler

2.1 mtcars Veri Seti

Çalışma kapsamında R içerisinde bulunan mtcars veri setinden yararlanarak tanımlayıcı ve çıkarımsal istatistikler ortaya konulmuştur.Veri seti 11 değişkenden ve 32 gözlemden oluşmaktadır.

  1. mpg:Mil/(ABD) galon
  2. cyl:Silindir sayısı
  3. disp:Displacement (m.in.)
  4. hp:Brüt beygir gücü
  5. drat:Arka aks oranı
  6. wt:Ağırlık (1000 lbs)
  7. qsec: 1/4 mil zaman
  8. vs:Motor (0 = V şeklinde, 1 = düz)
  9. am:Şanzıman (0 = otomatik, 1 = manuel)
  10. gear: İleri vites sayısı
veri=mtcars
veri %>% kbl() %>% kable_styling()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

2.2 Tanımlayıcı İstatistikler Tablosu

veri1 <- within(veri, {
   vs <- factor(vs, labels = c("V", "S")) #değişkenin nominal kategorik veri tipine dönüştürülmesi
   am <- factor(am, labels = c("otomatik", "manuel")) #değişkenin nominal kategorik veri tipine dönüştürülmesi
   cyl  <- ordered(cyl) # değişkenin nominal sıra ölçekli veri tipine dönüştürülmesi
   gear <- ordered(gear) # değişkenin nominal sıra ölçekli veri tipine dönüştürülmesi
   carb <- ordered(carb) # değişkenin nominal sıra ölçekli veri tipine dönüştürülmesi
})

cikarma=names(veri1) %in% c("vs", "am", "cyl","gear", "carb") # tanımlayıcı istatistiklerden çıkarılacak nominal değişkenler

summary(veri[!cikarma]) %>% kbl(caption = "Tanımlayıcı İstatistikler") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tanımlayıcı İstatistikler
mpg disp hp drat wt qsec
Min. :10.40 Min. : 71.1 Min. : 52.0 Min. :2.760 Min. :1.513 Min. :14.50
1st Qu.:15.43 1st Qu.:120.8 1st Qu.: 96.5 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89
Median :19.20 Median :196.3 Median :123.0 Median :3.695 Median :3.325 Median :17.71
Mean :20.09 Mean :230.7 Mean :146.7 Mean :3.597 Mean :3.217 Mean :17.85
3rd Qu.:22.80 3rd Qu.:326.0 3rd Qu.:180.0 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90
Max. :33.90 Max. :472.0 Max. :335.0 Max. :4.930 Max. :5.424 Max. :22.90

2.3 Tanımlayıcı İstatistikler Tablosu Alternatifi

cikarma=names(veri1) %in% c("vs", "am", "cyl","gear", "carb") # tanımlayıcı istatistiklerden çıkarılacak nominal değişkenler

stargazer(veri[!cikarma], type = "html",title="Tablo 1: Sürekli Değişkenlerde Tanımlayıcı İstatistikler Tablosu", digits=1, out="table3.html", flip=T)
Tablo 1: Sürekli Değişkenlerde Tanımlayıcı İstatistikler Tablosu
Statistic mpg disp hp drat wt qsec
N 32 32 32 32 32 32
Mean 20.1 230.7 146.7 3.6 3.2 17.8
St. Dev. 6.0 123.9 68.6 0.5 1.0 1.8
Min 10 71 52 2.8 1.5 14.5
Pctl(25) 15.4 120.8 96.5 3.1 2.6 16.9
Pctl(75) 22.8 326 180 3.9 3.6 18.9
Max 34 472 335 4.9 5.4 22.9

2.4 Vites türüne göre yakıt tüketimleri ve beygir güçleri

Veri setinde ‘mpg’ değişkeni yakıt tüketimini, ‘am’ değişkeni vites tipini ve ‘hp’ değişkeni ise beygir gücünü göstermektedir.

veri1 %>% ggplot(aes(x=mpg, y=hp, col=(am))) + geom_point()+
    facet_wrap(. ~ am, scales="free_y")+
    theme_economist()+
    theme(legend.position = "none")+
    theme(
      strip.text.x = element_text(
        size = 12, color = "black", face = "bold"
        ))
Şekil 1.1 Vites türüne göre yakıt tüketimleri

Şekil 1.1 Vites türüne göre yakıt tüketimleri

2.5 Eşitlik yazma

Eşitlik ortalanmak isteniyorsa eşitliğin soluna ve sağına çift dolar işareti ilave edilir. Eşitlik sola yaslanacaksa soluna ve sağına tek dolar işareti eklenir 11.

\[X_i\]

Büyüktür işareti

\[ x\ge y\]

Kesirli ifade yazımı

\[\frac{2}{3}\]

\[ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]

\[ E = mc^2 \]

Tabakalı örneklemede örneklem büyüklüğü formülü

İlgili değişken kesikli ise aşağıdaki eşitlik örneklem büyüklüüğünün hesaplanmasında kullanılır.

\[ n = \frac{Nt^2pq}{d^2(N-1)+t^2pq} \]

Standart sapma

\[\sigma = \sqrt{\frac{\sum\limits_{i=1}^{n} \left(x_{i} - \bar{x}\right)^{2}} {n-1}}\]

Sayı serilerini toplama

\[x_{1} + x_{2} + \cdots + x_{n}\]

\(Y = X\beta + \epsilon\),22.

3 Çıkarımsal İstatistikler

3.1 Modeli kurma ve eşitliklere dönüştürme

# Doğrusal regresyon modeli
model1 <- lm(mpg ~ am + hp, veri1)
# Teorik modeli gösterme
equatiomatic::extract_eq(model1)

\[ \operatorname{mpg} = \alpha + \beta_{1}(\operatorname{am}_{\operatorname{manuel}}) + \beta_{2}(\operatorname{hp}) + \epsilon \]

model2 <- lm(mpg ~ am + hp+drat + wt, veri1)

3.2 Model 1 katsayılarını gösterme

equatiomatic::extract_eq(model1, use_coefs = TRUE,  wrap = TRUE)

\[ \begin{aligned} \operatorname{\widehat{mpg}} &= 26.58 + 5.28(\operatorname{am}_{\operatorname{manuel}}) - 0.06(\operatorname{hp}) \end{aligned} \]

3.3 Model 2 katsayılarını gösterme

equatiomatic::extract_eq(model2, use_coefs = TRUE,  wrap = TRUE)

\[ \begin{aligned} \operatorname{\widehat{mpg}} &= 30.03 + 1.58(\operatorname{am}_{\operatorname{manuel}}) - 0.04(\operatorname{hp}) + 0.98(\operatorname{drat})\ - \\ &\quad 2.73(\operatorname{wt}) \end{aligned} \]

3.4 Model 1 ve 2 Özeti

İki model karşılaştırıldığında kurulan 2. modelin açıklayıcılığı 1. modele göre daha yüksektir. Diğer bir ifadeyle düzeltilmiş R^2 (Adjusted R2) 1. modelde % yaklaşık % 76,7 iken 2. modelde % 82’dir.

stargazer(model1,model2, type = "html", title="Model Karşılaştırmaları", column.labels = c("Model 1", "Model 2"), colnames = FALSE, model.numbers = FALSE, notes.align = "l", add.lines = list(c("AIC", round(AIC(model1), 1), round(AIC(model2), 1))))
Model Karşılaştırmaları
Dependent variable:
mpg
Model 1 Model 2
ammanuel 5.277*** 1.579
(1.080) (1.559)
hp -0.059*** -0.036***
(0.008) (0.010)
drat 0.981
(1.377)
wt -2.726***
(0.938)
Constant 26.585*** 30.027***
(1.425) (6.185)
AIC 164 157.5
Observations 32 32
R2 0.782 0.843
Adjusted R2 0.767 0.820
Residual Std. Error 2.909 (df = 29) 2.560 (df = 27)
F Statistic 52.024*** (df = 2; 29) 36.201*** (df = 4; 27)
Note: p<0.1; p<0.05; p<0.01

3.5 Regresyon Model1 Grafikleri

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

3.6 Regresyon Model2 Grafikleri

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

4 Sonuç

İki model karşılaştırıldığında kurulan 2. modelin açıklayıcılığı 1. modele göre daha yüksektir. Diğer bir ifadeyle düzeltilmiş R^2 (Adjusted R2) 1. modelde % yaklaşık % 76,7 iken 2. modelde % 82’dir. Benzer şekilde kurulan 2. model AIC (Akaike Information Criterion) değeri 1. modele göre daha düşük olduğu için 2. model tercih edilir. Model2’ten hareketle kullanılacak regresyon denklemimiz aşağıdaki gibi olacaktır.

equatiomatic::extract_eq(model2, use_coefs = TRUE,  wrap = TRUE, terms_per_line = 2)

\[ \begin{aligned} \operatorname{\widehat{mpg}} &= 30.03 + 1.58(\operatorname{am}_{\operatorname{manuel}})\ - \\ &\quad 0.04(\operatorname{hp}) + 0.98(\operatorname{drat})\ - \\ &\quad 2.73(\operatorname{wt}) \end{aligned} \]

Yapılan bu R Markdown çalışmasının özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla…

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.


  1. Buradaki adresten yararlanılabilir: https://rmd4sci.njtierney.com/math↩︎

  2. Doğrusal regresyon modellerinde regresyon eşitliğini göstermektedir.↩︎