Komputasi Statistika
~ Simple and Multiple Regression ~
| Kontak | : \(\downarrow\) |
| diyasaryanugroho@gmail.com | |
| 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.dataDataset 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.graphLine 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.dataDataset 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 vectorGraph of Data Points
heart.plot <- ggplot(heart.data, aes(x=biking, y=heart.disease)) +
geom_point()
heart.plotLine 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.plotThe 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.plotConclusion
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.