COK DEGISKENLI DOGRUSAL REGRESYON :

1. KUTUPHANELER :

library(caTools)
library(dplyr)
library(ggplot2)

2. VERI :

Cok degiskenli dogrusal regresyon ugulamasi icin R icerisinde hazir olarak bulunan “mtcars” verisini kullanicagim.

df <- mtcars

head(df, 5)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
str(df)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

“df” icerisinde 11 adet numeric degisken ve 32 adet gozlem bulunmaktadir.

df[ ,12] <- rownames(df) 

Arac modelleri rownames olarak yer aldigi icin satir isimlerini degisken olarak atadim.

cyl : Number of cylinders disp : Displacement (cu.in.) hp : Gross horsepower wt : Weight (1000 lbs)

Veri icerisinde yer alan “am” degiskeni vites turunu belirtmektedir. 0 “automatic”, 1 ise “manual” araclari belirtmektedir. Araclarin performansi vites turune gore degisiklik gostermektedir. Bu kategorik degisken icerisinden frekansi daha buyuk olan degiskeni sececegim. Ancak su an numeric olan degiskenimizi kategorik degisken yapmamiz gerekmektedir.

df$am <- as.factor(df$am)


ggplot(data = df, aes(x = am, fill = am)) +
  geom_bar()

Grafikte de gorulecegi uzere “0” olarak temsil edilen “automatic” arac frekansi daha fazladir bu nedenle cok degiskenli regresyon icin “automatic” araclari seciyorum.

df <- df %>% 
  filter(am == 0)

Verimizin %75 lik bolumunu egitim, %25 lik bolumunu ise test amacli kullanicagim.

veri_egitim_logical <- sample.split(1:nrow(df), SplitRatio = 0.75)

veri_egitim <- df[veri_egitim_logical, ]
veri_test <- df[!veri_egitim_logical, ]
# veri_egitim :

bagimli_degisken <- data.frame(qsec = veri_egitim$qsec)

bagimsiz_degisken <- data.frame(cyl = veri_egitim$cyl,
                                disp = veri_egitim$disp,
                                hp = veri_egitim$hp,
                                wt = veri_egitim$wt)

# veri_test :

test_bagimsiz <- data.frame(cyl = veri_test$cyl,
                            disp = veri_test$disp,
                            hp = veri_test$hp,
                            wt = veri_test$wt)
iliski <- lm(qsec ~ cyl + disp + hp + wt, data = veri_egitim)

Cok Degiskenli Regresyon Formulu : Y = a + a1.X1 + a2.X2 + … + an.Xn

iliski
## 
## Call:
## lm(formula = qsec ~ cyl + disp + hp + wt, data = veri_egitim)
## 
## Coefficients:
## (Intercept)          cyl         disp           hp           wt  
##    20.94330     -0.38283     -0.00279     -0.01893      0.96685

Coefficients (2.288e+01) degeri a degerini vermektedir.

summary(iliski)
## 
## Call:
## lm(formula = qsec ~ cyl + disp + hp + wt, data = veri_egitim)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.91331 -0.26702  0.01514  0.36191  0.84373 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 20.943296   1.364664  15.347 9.25e-08 ***
## cyl         -0.382830   0.236241  -1.621   0.1396    
## disp        -0.002790   0.004054  -0.688   0.5086    
## hp          -0.018929   0.006038  -3.135   0.0120 *  
## wt           0.966854   0.481105   2.010   0.0754 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6226 on 9 degrees of freedom
## Multiple R-squared:  0.8853, Adjusted R-squared:  0.8343 
## F-statistic: 17.36 on 4 and 9 DF,  p-value: 0.0002923

Multiple R-squared degeri bağımsız değişken(ler) in neden olduğu değişim yüzdesidir ve bu deger bizim icin guvenilir bir sonuctur.

tahmin_qsec <- predict.lm(iliski, test_bagimsiz)

“predict.lm()” fonksiyonu ile bulmus oldugumuz coklu regresyon katsayilarini test istatistiklerinde uyguladik ve “tahmin_qsec” olarak atadik.

tahmin <- as.data.frame(tahmin_qsec)
sonuc <- cbind(veri_test[c(12,7)], tahmin)

sonuc
##                    V12  qsec tahmin_qsec
## 2    Hornet Sportabout 17.02    16.88955
## 6             Merc 230 22.90    20.26644
## 7             Merc 280 18.30    19.17637
## 13 Lincoln Continental 17.82    17.77160
## 14   Chrysler Imperial 17.42    17.46709

Test verimize regresyon analizini uyguladiktan sonra sonucu daha iyi gorebilmemiz icin arac modelini, aracin qsec degerini ve kendi buldugumuz qsec degerini “sonuc” olarak atadim. Tabloya baktigimizda tahminlerimizin, orjinal degerlere oldukca yakin degerler ciktigini gormekteyiz.

Hamza TANÇ - Eylül/2019