R ile İstatistiksel Modelleme

Onur Dayıbaşı
Aug 24, 2017 · 6 min read

R Kullanımı

R

Günümüzde hem akademisyenler hem de diğer sektördeki çalışanlar tarafından en sık kullanılan istatistiksel analiz dilidir. Kullanımının çok yoğun olmasının başlıca sebebi ücretsiz bir dil olması ve birçok kişi tarafından hergün geliştirilmesi. Bu özelliklerinden dolayı da piyasadaki hem ücretli hem de ücretsiz bir çok ürünün ve dilin ötesinde bir geliştirme hızı bulunmaktadır.

R dili diğer birçok yazılım dili gibi bir tek bir amaç için kullanılmamalıdır ve de kullanılmamaktadır. R dilinin yaratılmasının temel amacı istatistiksel analizler olsa da birçok istatistiksel çalışma veriye erişim, veri temizleme, veri hakkında detaylı analiz raporlamalar ve elde edilen sonuçların başarılarını ölçmek için grafik ve raporla adımlarını barındırmaktadır. Bu sebeple de R içerisinde baştan sona veri üzerinde istenilen çalışmalar gerçekleştirilebilir.

R dili yapılan işin tanımına göre farklı paketlere ihtiyaç duyar ve işlem anında da bu paketlerin çalıştırılmış olmasını ister. Örneğin, ileri düzey grafikler elde etmek için kullanılan ggplot grafikleri ggplot2 paketi ile gelmektedir. Eğer bu grafikler kullanılacaksa öncelikle ilgili paket indirilmeli daha sonra da çalışma anında bu paket çağırılmalıdır.

R dilini ister kendi konsolu üzerinden isterseniz piyasadaki sayısız IDE üzerinden kullanabilirsiniz. Yapılan araştırmalara göre en sık kullanılan RStudio’dur. RStudio sağladığı arayüz ile paket yönetimi, dosya erişimi, grafik sonuç elde edimi, yapılan işlerin tarihçesi gibi birçok özellik sağlamaktadır.

1) Veriye Erişim:

İstatistiksel bir çalışmanın ilk aşaması veriye erişimdir. Veriye erişim iki şekilde gerçekleşir; ya bir veri kaynağına bağlanırsınız ya da verilerinizi elle girerek sisteme tanıtırsınız. Yapılan işin tanımına göre bunlar ayrı ayrı ya da birlikte değerlendirilebilir.

R dili piyasada kullanılan bütün veri kaynaklarına erişebilmektedir. Bu erişim ilgili veri kaynağı için yazılmış fonksiyonlarla sağlanmaktadır. Eğer bağlanılacak veri kaynağı özel bir firmaya ait bir ürün ise muhtemelen o ürün için yazılan paketi yüklemeniz gerekmektedir.

Eğitim kapsamında örnek olması adına internetten bulduğum “enerji talep” verilerini kullanacağım. Verileri kendi bilgisayarıma csv dosyası olarak kaydettim ve bunlara erişim sağlayacağım.

Veri erişim komutu;

veri=read.csv(/enerji/elektrik-talep.csv”, header=TRUE,sep=”;”,dec=”.”)

2) Veriyi Tanıma:

Başarılı bir şekilde veriye erişim sağladıktan sonra R üzerinden veri hakkında temel istatistiksel raporlar alabiliriz. Böylece modelleme öncesinde veri hakkında genel bir bilgi sahibi olabiliriz.

Betimsel istatistik komutu;

summary(veri)

Kolonlar hakkında betimsel istatistikler elde ettikten sonra modellemede kullanılacak kolonların dağılım grafikleri incelenerek verinin yapısı hakkında daha detaylı bir bilgi sahibi olabiliriz.

Tek kolon için grafik oluşturma komutları;

Library(ggplot2)
ggplot(veri, aes(ortalama_tuketim)) + geom_area(stat=”bin”)

İki kolon için grafik oluşturma komutları;

Library(ggplot2)
ggplot(veri, aes(ortalama_sicaklik,ortalama_tuketim)) + geom_point()

3) Korelasyon Analizi:

Korelasyon iki değişken arasındaki ilişkidir. Genel olarak sürekli değişkenler arasındaki ilişkiler için kullanılır. Korelasyonun aldığı değerin işareti ilişkinin yönünü belirtir. Pozitif yönlü ilişkilerde korelasyon değerinin işareti pozitif iken negative yönlü ilişkilerde korelasyon değerinin işareti negatiftir. Korelasyon mutlak değer 0–1 arasında bir değer alır. 1’e yakın değerler pozitif ilişki, 0’a yakın değerler negative ilişkiyi gösterir. Örneğin; iktisat kanunları gereği maaş ile harcamalar arasında pozitif yönlü ilişki vardır. Maaşınız ne kadar artarsa temel harcamalarınız da o kadar artar. Bu pozitif yönlüdür. Konutlarda tüketilen doğalgaz tüketimi ile dondurma tüketimi arasında ter yönlü bir ilişki vardır. Doğalgaz tüketimi kışın arttıkça dondurma tüketimi azalmaktadır.

Korelasyon analizi için kullanılacak komutlar;

ort_sicaklik = veri$ortalama_sicaklik
ort_tuketim = veri$ortalama_tuketim
korelasyon = cor(ort_sicaklik,ort_tuketim)
Sonuç:0.120693

İstatistiksel çalışmalar sonucunda üretilen değerler göreceli olacağından ve genelde bir kişi için yüksek olan bir rakam diğer bir kişi için yüksek olamayabileceğinden elde edilen sonuçların istatistiksel olarak anlamlılığı test edilmelidir.

Korelasyon sonuçlarının anlamlılığını test etmek için kullanılacak komut,

Cor.test(ort_sicaklik,ort_tuketim)Pearson's product-moment correlationdata:  ort_sicaklik and ort_tuketimt = 5.1926, df = 1824, p-value = 2.306e-07alternative hypothesis: true correlation is not equal to 095 percent confidence interval:0.07523735 0.16564816sample estimates:cor0.120693

Yukarıdaki sonuçlara bakarak; ho: Değişkenler arasında anlamlı bir ilişki yoktur kabul edilemez yani değişkenler arasında anlamlı bir ilişki mevcuttur. Dikkat edileceği üzere korelasyon değeri çok düşük olmasına rağmen anlamlı bir ilişki mevcuttur.

Veride yer alan değişkenler arasındaki ikili ilişkileri görsel olarak sunmak için corrplot paketi içerisindeki corrplot fonksiyonu oldukça başarılıdır.

Matris = cor(veri)
Corrplot(matris, method = “circle”)

4) Basit Regresyon Analizi:

Regresyon iki değişken arasındaki ilişkiyi inceler ve bir veya birden fazla değişkenin bir değişkeni ne kadar açıkladığını belirtir. Örneğin; bir yerleşkedeki kömür tüketimi o bölgedeki doğalgaz olan ev sayısı, hava sıcaklığı, yağış sıklığı vb birçok parameter ile açıklanabilir.

Regresyon analizi için komutlar;

lm(data=veri, ortalama_tuketim ~ ortalama_sicaklik)Call:lm(formula = ortalama_tuketim ~ ortalama_sicaklik, data = veri)Coefficients:(Intercept) ortalama_sicaklik
22559.56 41.16
model= lm(formula = ortalama_tuketim ~ ortalama_sicaklik, data = veri)model$coefficients: Model katsayıları(Intercept) ortalama_sicaklik22559.5639 41.1597model$fitted.values: Modelin tahmin ettiği değerlerÖrnek çıktı:1 2 3 4 5 622664.85 22758.98 22866.62 22799.56 22727.22 22724.02summary(model)Call:lm(formula = ortalama_tuketim ~ ortalama_sicaklik, data = veri)Residuals:Min 1Q Median 3Q Max-10323 -1818 -83 1553 6931Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22559.564 141.065 159.923 < 2e-16 ***
ortalama_sicaklik 41.160 7.927 5.193 2.31e-07 ***
— -Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2683 on 1824 degrees of freedom
Multiple R-squared: 0.01457, Adjusted R-squared: 0.01403
F-statistic: 26.96 on 1 and 1824 DF, p-value: 2.306e-07

5) Çoklu Regresyon Analizi:

Çoklu regresyon iki ve daha fazla değişkenin bir bağımlı değişkeni açıklamasıdır. Bu analiz yöntemi birden fazla değişkendeki bilgiyi kullanarak modelleme yapmaktadır. Dolayısıyla basit regresyona göre daha fazla bilgi kullanmakta ve daha büyük başarı sağlamaktadır. Çoklu regresyonda bağımsız değişkenlerin modele dahil edilme süreci farklı şekillerde ele alınabilir. Forward, backward ve stepwise bağımsız değişken ekleme ve/veya çıkartma yöntemleridir. Stepwise en sık kullanılan yöntemdir. Modelleme sonucunda sadece anlamlı bağımsız değişkenleri modelde saklar.

Stepwise çoklu regresyon komutu;

Library(MASS)model = lm(data=veri, ortalama_tuketim ~ ortalama_sicaklik + HDD)summary(model)Call:lm(formula = ortalama_tuketim ~ ortalama_sicaklik + HDD, data = veri)Residuals:Min      1Q  Median      3Q     Max-9102.5 -1402.3  -159.7  1418.7  6020.8Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept)       13585.71     450.90   30.13   <2e-16 ***ortalama_sicaklik   419.74      19.60   21.42   <2e-16 ***HDD                 639.43      30.83   20.74   <2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 2414 on 1823 degrees of freedomMultiple R-squared:  0.2027,               Adjusted R-squared:  0.2018F-statistic: 231.7 on 2 and 1823 DF,  p-value: < 2.2e-16step <- stepAIC(model, direction = "both")Start:  AIC=28448.2ortalama_tuketim ~ ortalama_sicaklik + HDDDf  Sum of Sq        RSS             AIC<none>                                                1.0621e+10 28448- HDD                         1 2506301228 1.3128e+10 28833- ortalama_sicaklik  1 2672850316 1.3294e+10 28856> step$anovaStepwise Model PathAnalysis of Deviance TableInitial Model:ortalama_tuketim ~ ortalama_sicaklik + HDDFinal Model:ortalama_tuketim ~ ortalama_sicaklik + HDDStep Df Deviance Resid. Df  Resid. Dev     AIC1                       1823 10621199072 28448.2

6 ) Zaman Serileri Analizi

Zaman serileri analizi zamana bağlı verilerin zaman içerisindeki değişimlerinin incelenmesi ile geleceğe yönelik tahminler yapmak için kullanılan bir yöntemdir. R’da en sık kullanılan paketlerden birisi olan forecast içerisinde otomatik zaman seri modellemeleri barındırmaktadır. Bu modeler Exponential ve ARIMA modelleridir.

Zaman serileri komutları;

library(forecast)enerji_tuketimi = c(25000,35000, 45000, 55000, 65000, 75000, 85000, 95000)enerji_tuketimi_zaman_serisi = ts(enerji_tuketimi, start=c(2010), end=c(2017), frequency = 1)plot(enerji_tuketimi_zaman_serisi)model <- ets(enerji_tuketimi_zaman_serisi)forecast(model, h=1, level=95)Point Forecast  Lo 95  Hi 952018         105000 105000 105000
model <- ets(enerji_tuketimi_zaman_serisi)forecast(model, h=1, level=95)Point Forecast  Lo 95  Hi 952018         105000 105000 105000model <- auto.arima(enerji_tuketimi_zaman_serisi)forecast(model, h=1, level=95)Point Forecast  Lo 95  Hi 952018         105000 104988 105012

[by Seçkin Dinç]

)

Onur Dayıbaşı

Written by

Senior Frontend Developer at Thundra

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade