R nedir?

Programlama dili

  • Bir programlama dili (interpreter)
  • İstatistik programı
  • İstatistiksel hesaplama ve görselleştirme ortamı
  • Bir “topluluk”" tarafından geliştirilen bir sistem
    • Veri, program ve yardımcı belgeler içeren “paketler” ile genişletilebilir

Tarihçe

  • S programlama diline dayalı bir dil
  • 1991’de Ross Ihaka ve Robert Gentleman tarafından geliştirildi
    • Niçin R?
  • 1993’de kamuya açıldı
  • 1995’da Açık Kaynak oldu (GNU General Public License)
  • 1997’da R Çekirdek Grubu oluşturuldu
  • 2000’de 1.0.0 versiyonu yayımlandı

Neden R?

Neden olmasın?

Veya neden Stata, veya SPSS … değil?

  • Esnek bir programlama dili
  • Açık kaynak (open source)
    • Kaynak kodu açık
  • Özgür yazılım (free software)
    • Kaynak kodu incelemekte özgürlük
    • Kaynak kodu değiştirmekte özgürlük
    • Değiştirilen kodu dağıtmakta özgürlük
  • Ücretsiz yazılım (free of charge)
  • Platform bağımsız (Linux, Mac, Windows, kişisel bilgisayar, serverlar)
  • Programı ve sonuçlarını başkaları ile paylaşmak kolay
  • Tüm bilimsel alanlar için uygun (sadece iktisat değil)
    • Yaygın, çeşitli ve büyüyen bir topluluk
    • Hızla artan “paket”" sayısı
  • Diğer (açık kaynak) programlarla kolay etkileşim (web, sunum, veri tabanı, büyük veri, vb)
  • Açık kaynak araştırma uygulama araçlarının bir parçası (veri analizinden raporlamaya kadar, web için, tez için…)

Artılar, eksiler

  • Olumlu özellikleri
    • Ücretsiz, kurulumu kolay
    • Güçlü bir topluluk desteği
    • Her zaman güncel
    • Diğer programlarla tamamlayıcılık ilişkisi
    • Kullanıcının ne yaptığını bilmesini zorunlu kılması
  • Olumsuz özellikleri
    • Dik öğrenme eğrisi
    • Çok kullanıcı dostu olmaması
    • Tüm nesnelerin bilgisayar hafızasında durması
    • Bazı dillerden daha yavaş çalışması
    • Hata yapmanın kolay, hatayı bulmanın zor olması

İstatistikler

  • Google Scholar’da akademik yayınların sayıları Articles

  • LinkedIn ve Quara’da yazılımları takip edenlerin sayısı Followers

  • Ana dağıtım sitesinde bulunan R paketlerinin sayıları Packages

Kaynak: Robert A. Muenchen, “The Popularity of Data Analysis Software”, r4stats

R kurulumu

  • Temel R ve R paketlerinin çoğunluğu için cran.r-project.org
  • R paketleri
    • Hemen her şey için bir paket
    • Pek çok şey için birden fazla paket
  • Yaygın olarak kullanılan paketler
    • data.table
    • ggplot2
    • reshape2
    • dplyr
    • plm

R kullanımı

Temel kavramlar

  • paket (package)
  • kütüphane (library)
  • çalışma alanı (workspace)
  • ortam (environment)
  • sınıf/nesne (class/object)
    • vektör
    • fonksiyon
  • R büyük/küçük harf ayrımı yapar
  • R adlandırma biçimlerinde tutarlı değildir

R Studio

RStudio

Paket yükleme

  • Paketin bilgisayara yüklenmesi
install.packages(ggplot2)
  • Bir paketin veya tüm paketlerin güncellenmesi
update.packages()
update.packages(ggplot2)
  • Kütüphanenin R’a tanımlanması
library(ggplot2)   # Hata dönüşü yapar
require(ggplot2)   # Uyarı dönüşü yapar

Oturum hakkında bilgi

  • Session information
sessionInfo()
  • Mevcut ortamdaki tüm nesneleri görmek
ls()
  • Paketteki tüm nesneleri görmek
ls("package:ggplot2")
  • Nesneleri silmek
rm(objectname)
rm(list = ls())

İlk yardım

?keyword     # Fonksiyonların yardım dosyalarını tarar
??keyword    # Tüm R belgelerini tarar
  • Internetden yardım
    • Stackoverflow
      • Google
  • Yeni paketler/uygulamalar

Hesap makinesi R

2 + 3
## [1] 5
2 * 5
## [1] 10
5 / 0
## [1] Inf
0 / 0
## [1] NaN
is.na(10 / 0)
## [1] FALSE
is.finite(10 / 0)
## [1] FALSE
2 * pi
## [1] 6.283185
sqrt(4^4)
## [1] 16
2 * 3 + 4
## [1] 10
15 %/% 4
## [1] 3
15 %% 4
## [1] 3
1 & 0
## [1] FALSE
1 | 0
## [1] TRUE
3 < 6
## [1] TRUE
3.33 <= 10 / 3
## [1] TRUE
TRUE & FALSE
## [1] FALSE
TRUE | FALSE
## [1] TRUE
FALSE | !FALSE
## [1] TRUE
TRUE && FALSE
## [1] FALSE
FALSE && TRUE
## [1] FALSE
exp(1)
## [1] 2.718282
log(exp(1))
## [1] 1
log10(10)
## [1] 1
log2(2^3)
## [1] 3
round(10/3, digits = 2)
## [1] 3.33
3*round(10/3, digits = 2)
## [1] 9.99
ceiling(10/3)
## [1] 4
floor(10/3)
## [1] 3

R nesneleri

Önemli işlemciler

  • <- Atama işlemcisi
a <- 5
  • = Aynı işlemci (fakat <- daha iyi?)
b = 3L
a * b
## [1] 15
  • : sıralama işlemcisi
c <- 1:3
c
## [1] 1 2 3
(c <- 100:103)
## [1] 100 101 102 103
  • c() nesneleri vektör olarak birleştirmek için
d <- c(1, 2, 3, 4, 5)
e <- c(1:5)
f <- c(1, 2, "a", "b", 5)
  • Tüm nesneleri göster
ls()
## [1] "a" "b" "c" "d" "e" "f"
  • Tüm nesneleri özellikleri ile birlikte göster
ls.str()
## a :  num 5
## b :  int 3
## c :  int [1:4] 100 101 102 103
## d :  num [1:5] 1 2 3 4 5
## e :  int [1:5] 1 2 3 4 5
## f :  chr [1:5] "1" "2" "a" "b" "5"
  • Nesneleri sil
rm(a)
ls()
## [1] "b" "c" "d" "e" "f"
rm(list=ls())
ls()
## character(0)
  • # Yorum işareti. Bu işaretten sonraki hiçbir şey kullanılmaz
# 2 + 3

Nesneleri

  • R’da her şey bir nesnedir
  • Veriler
a <- c(1:5)
a
## [1] 1 2 3 4 5
  • Fonksiyonlar
sum(a)
## [1] 15
sum
## function (..., na.rm = FALSE)  .Primitive("sum")
  • Grafikler de…
b <- plot(a)

b
## NULL
  • Fonksiyon sonuçları da nesnedir
a <- rnorm(100)
b <- a + rnorm(100)
model_1 <- lm(a ~ b)
model_1
## 
## Call:
## lm(formula = a ~ b)
## 
## Coefficients:
## (Intercept)            b  
##     0.03363      0.55466
  • Özetler…
summary(a)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -2.13655 -0.77407  0.06087 -0.03299  0.57079  2.79936
summary(model_1)
## 
## Call:
## lm(formula = a ~ b)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.48884 -0.41893  0.00645  0.46438  1.72100 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.03363    0.07098   0.474    0.637    
## b            0.55466    0.05751   9.645 7.15e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7064 on 98 degrees of freedom
## Multiple R-squared:  0.487,  Adjusted R-squared:  0.4817 
## F-statistic: 93.02 on 1 and 98 DF,  p-value: 7.151e-16
  • … ve şekiller
plot(a)

plot(a, b)

plot(model_1)

  • Bir fonksiyonun ne yapacağı, kullanılan nesneye bağlıdır!

Veri biçimleri

  • Sayısal
    • Tam sayı
    • Çift duyarlı sayı
  • Karakter
  • Mantıksal
a <- 5
b <- "a"
c <- TRUE
A <- c(1:5)
B <- c("a", "b", "c")
C <- c(T, F, T)
class(a)
## [1] "numeric"
class(A)
## [1] "integer"
class(b)
## [1] "character"
class(B)
## [1] "character"
class(c)
## [1] "logical"
class(C)
## [1] "logical"
is.numeric(C)
## [1] FALSE
is.logical(C)
## [1] TRUE
as.numeric(C)
## [1] 1 0 1
C + 1
## [1] 2 1 2
rm(list=ls())

Faktörler

  • Faktörler kategorik değişkenlerdir
    • Sıralı
    • Sırasız
a <- c("small", "large", "medium")
a
## [1] "small"  "large"  "medium"
b <- a[sample(3, 10, replace = TRUE)]
b
##  [1] "small"  "medium" "large"  "medium" "large"  "small"  "large"  "medium"
##  [9] "small"  "large"
bfactor <- factor(b)
bfactor
##  [1] small  medium large  medium large  small  large  medium small  large 
## Levels: large medium small
bordered <- ordered(bfactor, levels=c("small", "medium", "large"))
bordered
##  [1] small  medium large  medium large  small  large  medium small  large 
## Levels: small < medium < large
as.numeric(bfactor)
##  [1] 3 2 1 2 1 3 1 2 3 1
bfactor
##  [1] small  medium large  medium large  small  large  medium small  large 
## Levels: large medium small
as.numeric(bordered)
##  [1] 1 2 3 2 3 1 3 2 1 3
bordered
##  [1] small  medium large  medium large  small  large  medium small  large 
## Levels: small < medium < large
x <- rnorm(10)
y <- x + as.numeric(bordered) + rnorm(10)
summary(lm(y ~ x + bordered))
## 
## Call:
## lm(formula = y ~ x + bordered)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.2388 -0.8163  0.1096  0.7381  1.6573 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)   1.7798     0.5609   3.173   0.0192 *
## x             0.9135     0.5654   1.616   0.1573  
## bordered.L    1.4181     0.9609   1.476   0.1905  
## bordered.Q    1.0567     0.8990   1.175   0.2844  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.57 on 6 degrees of freedom
## Multiple R-squared:  0.6629, Adjusted R-squared:  0.4944 
## F-statistic: 3.933 on 3 and 6 DF,  p-value: 0.07236
summary(lm(y ~ x + bfactor))
## 
## Call:
## lm(formula = y ~ x + bfactor)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.2388 -0.8163  0.1096  0.7381  1.6573 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)     3.2139     1.0076   3.190   0.0188 *
## x               0.9135     0.5654   1.616   0.1573  
## bfactormedium  -2.2969     1.2982  -1.769   0.1273  
## bfactorsmall   -2.0055     1.3590  -1.476   0.1905  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.57 on 6 degrees of freedom
## Multiple R-squared:  0.6629, Adjusted R-squared:  0.4944 
## F-statistic: 3.933 on 3 and 6 DF,  p-value: 0.07236
a <- factor(c("3", "11", "2", "23", "313", "2"))
a
## [1] 3   11  2   23  313 2  
## Levels: 11 2 23 3 313
a + 1
## Warning in Ops.factor(a, 1): '+' not meaningful for factors
## [1] NA NA NA NA NA NA
afnumeric <- as.numeric(a)
afnumeric
## [1] 4 1 2 3 5 2
anumeric <- as.numeric(as.character(a))
anumeric
## [1]   3  11   2  23 313   2
rm(list=ls())

Tarihler

  • Tüm tarihler sayısal değişkenlere dönüştürülür
  • Başlangıç tarihi: 1 Ocak 1970
  • Farklı tarih formatları kullanılabilir
date1 <- as.Date("02/28/2016", format = "%m/%d/%Y")
date2 <- as.Date("28 February 10", format = "%d %B %y")
date3 <- as.Date("02/30/2016", format = "%m/%d/%Y")
date1
## [1] "2016-02-28"
date2
## [1] "2010-02-28"
date3
## [1] NA
date1 - date2
## Time difference of 2191 days
weekdays(date2)
## [1] "Sunday"
as.numeric(date2)
## [1] 14668