Komputasi Statistika

~ Simple and Multiple Regression ~


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/diasary_nm/
RPubs https://rpubs.com/diyasarya/

Simple Regression

Simple Regresi adalah model regresi yang hanya memiliki singel variabel independen.

Library

library(ggplot2)
library(dplyr)
library(broom)
library(ggpubr)

Dataset

income.data <- read.csv("income.data.csv")
income.data

Dataset pertama berisi pengamatan tentang pendapatan (dalam kisaran 15k hingga 75k) dan kebahagiaan (dinilai pada skala 1 hingga 10) dalam sampel imajiner 500 orang. Nilai pendapatan dibagi dengan 10.000 untuk membuat data pendapatan sesuai dengan skala skor kebahagiaan (jadi nilai 2 mewakili 20.000, 3 adalah 30.000, dll.).

Check the Dataset Variable

Dalam hal ini, kita inging mengetahui bagaimana pengaruh kebahagiaan terhadap besarnya pendapatan. Maka, dapat kita tentukan bahwa variabel kebahagiaan (tak bebas) dan variabel pendapatan (bebas). Langkah pertama, kita pastikan bahwa setiap variabel bersifat kuantitatif, agar kita dapat mengukur, menghitung, dan membandingkan pada skala numerik.

summary(income.data)
##        X             income        happiness    
##  Min.   :  1.0   Min.   :1.506   Min.   :0.266  
##  1st Qu.:125.2   1st Qu.:3.006   1st Qu.:2.266  
##  Median :249.5   Median :4.424   Median :3.473  
##  Mean   :249.5   Mean   :4.467   Mean   :3.393  
##  3rd Qu.:373.8   3rd Qu.:5.992   3rd Qu.:4.503  
##  Max.   :498.0   Max.   :7.482   Max.   :6.863

Pada, langkah ini kita hanya mengecek apakah data tersebut bersifat kuantitatif atau kualitatif. Jika, bersifat kuantitatif maka kita dapat menggunakan model regresi. Namun, kalau bersifat kualitatif maka gunakan metode lain seperti model kategorik.

Assumptions

Sebelum masuk pada analisis regresi, kita perlu mengetahui bahwa data yang akan diamati atau dianalisis memenuhi asumsi-asumsi regresi. Berikut beberapa asumsi-asumsi regresi.

Independent of observations

Pada single regresi, asumsi independen variabel dapat dilewati karena tujuan dari asumsi ini adalah ingin mengetahui apakah setiap data observasi bersifat independen satu sama lainnya. Sedangkan, single regresi hanya memiliki satu variabel independen dan satu dependen maka, variabel independen tidak dapat dibandingkan dengan variabel independen lainnya karena hanya memiliki satu variabel independen saja.

Normality

Asumsi normalitas bertujuan untuk melihat apakah data berdistribusi normal atau tidak, pada asumsi ini regresi mengharapkan bahwa data harus berdistribusi normal. Nah, jika data tersebut tidak berdistribusi normal, kita dapat menggunakan model lain selain regresi.

hist(income.data$happiness)

Linearity

Asumsi linearitas bertujuan untuk melihat apakah tren dari data observasi linear atau tidak, dengan persamaan Y = a + bX1 + ... + bXn + e.

plot(happiness ~ income, data = income.data)

Homoscedasticity

Kita akan melihat asumsi homoskedastisitas setelah memodelkan data dengan analisis regresi.

Analysist Regression

Dalam r, kita dapat menggunakan function lm(Y ~ X, data = data) untuk melakukan analisis regresi.

income.happiness.lm <- lm(happiness ~ income, data = income.data)

summary(income.happiness.lm)
## 
## Call:
## lm(formula = happiness ~ income, data = income.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.02479 -0.48526  0.04078  0.45898  2.37805 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.20427    0.08884   2.299   0.0219 *  
## income       0.71383    0.01854  38.505   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7181 on 496 degrees of freedom
## Multiple R-squared:  0.7493, Adjusted R-squared:  0.7488 
## F-statistic:  1483 on 1 and 496 DF,  p-value: < 2.2e-16

Berdasarkan output diatas didapat bahwa:
1. Estimasi prediksi, nilai dari y-Intercept (0,204) dan efek setiap income untuk kebahagiaan (0,713). Artinya setiap kenaikan income maka tingkat kebahagian akan meningkat sebesar 0,713.
2. Standard error atau perkiraan simpangan baku, dapat dilihat pada Std. Error untuk mengukur keakuratan distribusi pada data tersebut. Semakin kecil standard errornya maka akan semakin akurat.
3. T-Test atau T-Statistik dapat dilihat pada T-value.
4. P-value (< 2.2e-16), digunakan untuk menguji hipotesis. Kalau P-value > a (H0 diterima), sebaliknya P-value < a (H0 ditolak).
Lalu, untuk menguji apakah model regresi ini adalah yang terbaik, kita dapat melihat dari nilai R-squared. Untuk kasus sosial, R-squared harus (>70%). Kasus Sains R-Squared harus (>90%). Kasus non sosial dan non sains atau kasus biasa R-Squared harus (>80%).

Check Homoscedasticity

par(mfrow=c(2,2))
plot(income.happiness.lm)

par(mfrow=c(1,1))

Residu adalah varians yang tidak dapat dijelaskan. Mereka tidak persis sama dengan kesalahan model, tetapi mereka dihitung darinya, jadi melihat bias dalam residu juga akan menunjukkan bias dalam kesalahan.
Yang paling penting untuk dicari adalah bahwa garis merah yang mewakili rata-rata residu pada dasarnya horizontal dan berpusat di sekitar nol. Ini berarti tidak ada outlier atau bias dalam data yang akan membuat regresi linier tidak valid.
Dalam Normal Q-Qplot di kanan atas, kita dapat melihat bahwa residu nyata dari model kita membentuk garis satu-ke-satu yang hampir sempurna dengan residu teoritis dari model sempurna.
Berdasarkan residu ini, kita dapat mengatakan bahwa model kita memenuhi asumsi homoskedastisitas.

Visualize the Result

Setelah melakukan analisis model regresi, kita dapat menggunakan visualisasi agar memudahkan orang awam untuk melihat hasil prediksi atau analisis kita.

Graph of Data Points

income.graph<-ggplot(income.data, aes(x=income, y=happiness))+
                     geom_point()
income.graph

Line of Linear Regression

income.graph <- income.graph + geom_smooth(method="lm", col="black")

income.graph
## `geom_smooth()` using formula = 'y ~ x'

Equation of Regression Line

income.graph <- income.graph +
  stat_regline_equation(label.x = 3, label.y = 7)

income.graph
## `geom_smooth()` using formula = 'y ~ x'

The Result to Publication

Ini adalah hasil visualisasi keseluruhan dari analisis kita sebelumnya, pada Result visualisasi ini kita sudah dapat memberitahukan hasil analisis model regresi karena informasi yang dibutuhkan sudah termuat dalam plot dibawah ini.

income.graph +
  theme_bw() +
  labs(title = "Reported happiness as a function of income",
      x = "Income (x$10,000)",
      y = "Happiness score (0 to 10)")
## `geom_smooth()` using formula = 'y ~ x'

Conclution

Kami menemukan hubungan yang signifikan antara pendapatan dan kebahagiaan (p < 0,001, R2 = 0,73 ± 0,0193), dengan peningkatan 0,73 unit dalam kebahagiaan yang dilaporkan untuk setiap peningkatan pendapatan 10.000(USD).

Multiple Regression

Multiple regresi adalah jenis model regresi yang memiliki variabel independe lebih dari satu.

Dataset

heart.data <- read.csv("heart.data.csv")
heart.data

Dataset kedua berisi pengamatan pada persentase orang bersepeda untuk bekerja setiap hari, persentase orang merokok, dan persentase orang dengan penyakit jantung dalam sampel imajiner dari 500 kota.

Chech the Dataset Variable

Pada kasus kali ini, kita akan mengamati tentang pengaruh penyakit jantung terhadap orang yang bersepeda dan orang merokok. Maka, dapat kita tentukan bahwa variabel penyakit jantung (tak bebas) serta variabel bersepeda dan merokok (bebas).

summary(heart.data)
##        X             biking          smoking        heart.disease    
##  Min.   :  1.0   Min.   : 1.119   Min.   : 0.5259   Min.   : 0.5519  
##  1st Qu.:125.2   1st Qu.:20.205   1st Qu.: 8.2798   1st Qu.: 6.5137  
##  Median :249.5   Median :35.824   Median :15.8146   Median :10.3853  
##  Mean   :249.5   Mean   :37.788   Mean   :15.4350   Mean   :10.1745  
##  3rd Qu.:373.8   3rd Qu.:57.853   3rd Qu.:22.5689   3rd Qu.:13.7240  
##  Max.   :498.0   Max.   :74.907   Max.   :29.9467   Max.   :20.4535

Assumptions

Independent of observations

Asumsi Independen adalah asumsi yang melihat apakah antar variabel x memiliki hubungan (dependen) atau tidak (independen). Diharapkan pada asumsi ini kita mendapatkan bahwa antar variabel x independen.

cor(heart.data$biking, heart.data$smoking)
## [1] 0.01513618

Nah, pada uji korelasi ini menghasilkan nilai (0,015 atau 1,5%) artinya nilai korelasi antara variabel biking dan variabel smoking sangat kecil atau hubungannya kecil. Dapat disimpulkan bahwa variabel-variabel tersebut tidak memiliki hubungan yang khusus (Independen).

Normality

Asumsi normalitas bertujuan untuk melihat apakah data berdistribusi normal atau tidak, pada asumsi ini regresi mengharapkan bahwa data harus berdistribusi normal. Nah, jika data tersebut tidak berdistribusi normal, kita dapat menggunakan model lain selain regresi.

hist(heart.data$heart.disease)

Linearity

Asumsi linearitas bertujuan untuk melihat apakah tren dari data observasi linear atau tidak, dengan persamaan Y = a + bX1 + ... + bXn + e.

plot(heart.disease ~ biking + smoking, data = heart.data)

Homoscedasticity

Kita akan check setelah melakukan pemodelan pada data observasi.

Analysist Regression

Dalam r, kita dapat menggunakan function lm(Y ~ X, data = data) untuk melakukan analisis regresi.

heart.disease.lm<-lm(heart.disease ~ biking + smoking, data = heart.data)

summary(heart.disease.lm)
## 
## Call:
## lm(formula = heart.disease ~ biking + smoking, data = heart.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.1789 -0.4463  0.0362  0.4422  1.9331 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 14.984658   0.080137  186.99   <2e-16 ***
## biking      -0.200133   0.001366 -146.53   <2e-16 ***
## smoking      0.178334   0.003539   50.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.654 on 495 degrees of freedom
## Multiple R-squared:  0.9796, Adjusted R-squared:  0.9795 
## F-statistic: 1.19e+04 on 2 and 495 DF,  p-value: < 2.2e-16

Berdasarkan output diatas didapat bahwa:
1. Estimasi prediksi, nilai dari y-Intercept (14,984) serta efek setiap biking untuk penyakit jantung (-0,2) dan efek setiap smoking untuk penyakit jantung (0,178). Artinya setiap kenaikan biking maka tingkat orang terkena penyakit jantung akan menurun sebesar 0,2 sedangkan setiap kenaikan smoking maka tingkat orang terkena penyakit jantung akan meningkat sebesar 0,178.
2. Standard error atau perkiraan simpangan baku, dapat dilihat pada Std. Error untuk mengukur keakuratan distribusi pada data tersebut. Semakin kecil standard errornya maka akan semakin akurat.
3. T-Test atau T-Statistik dapat dilihat pada T-value.
4. P-value (< 2.2e-16), digunakan untuk menguji hipotesis. Kalau P-value > a (H0 diterima), sebaliknya P-value < a (H0 ditolak).
Lalu, untuk menguji apakah model regresi ini adalah yang terbaik, kita dapat melihat dari nilai Multiple R-squared. Untuk kasus sosial, Multiple R-squared harus (>70%). Kasus Sains Multiple R-Squared harus (>90%). Kasus non sosial dan non sains atau kasus biasa Multiple R-Squared harus (>80%).

Check Homoscedaticity

par(mfrow=c(2,2))
plot(heart.disease.lm)

par(mfrow=c(1,1))

Seperti regresi sederhana kami, residu tidak menunjukkan bias, sehingga kami dapat mengatakan model kami sesuai dengan asumsi homoskedastisitas.

Visualize the Result

plotting.data<-expand.grid(
  biking = seq(min(heart.data$biking), max(heart.data$biking), length.out=30),
    smoking=c(min(heart.data$smoking), mean(heart.data$smoking), max(heart.data$smoking)))    # Create dataframe with information needed
plotting.data$predicted.y <- predict.lm(heart.disease.lm, newdata=plotting.data)              # Predict the Value of Y
plotting.data$smoking <- round(plotting.data$smoking, digits = 2)                             # Round smoking numbers
plotting.data$smoking <- as.factor(plotting.data$smoking)                                     # Change variable into a vector

Graph of Data Points

heart.plot <- ggplot(heart.data, aes(x=biking, y=heart.disease)) +
  geom_point()

heart.plot

Line of Linear Regression

heart.plot <- heart.plot +
  geom_line(data=plotting.data, aes(x=biking, y=predicted.y, color=smoking), size=1.25)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## i Please use `linewidth` instead.
heart.plot

The Result to Publication

Ini adalah hasil visualisasi keseluruhan dari analisis kita sebelumnya, pada Result visualisasi ini kita sudah dapat memberitahukan hasil analisis model regresi karena informasi yang dibutuhkan sudah termuat dalam plot dibawah ini.

heart.plot <-
heart.plot +
  theme_bw() +
  labs(title = "Rates of heart disease (% of population) \n as a function of biking to work and smoking",
      x = "Biking to work (% of population)",
      y = "Heart disease (% of population)",
      color = "Smoking \n (% of population)")

heart.plot

Conclusion

Dalam survei kami terhadap 500 kota, kami menemukan hubungan yang signifikan antara frekuensi bersepeda ke tempat kerja dan frekuensi penyakit jantung dan frekuensi merokok dan frekuensi penyakit jantung (p < 0 dan p < 0,001, masing-masing).
Secara khusus kami menemukan penurunan 0,2% (± 0,0014) dalam frekuensi penyakit jantung untuk setiap peningkatan 1% dalam bersepeda, dan peningkatan 0,178% (± 0,0035) dalam frekuensi penyakit jantung untuk setiap peningkatan 1% dalam merokok.