Tugas 6 | Analisis Regresi dan Prediksi

Komputasi Statistika


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/saram.05/
RPubs https://rpubs.com/sausanramadhani/

Berdasarkan intruksi tugas 6 pada google classroom, diminta untuk mengerjakan tutorial pada dua link yang diberikan (link tertera pada referensi / bagian akhir) di rpubs masing-masing. Berikut ini yang saya pelajari dari kedua tutorial tersebut :

Simple Linier Regression

Dataset berisi observasi mengenai income (antara $15K-$75K) dan happiness (antara 1-10) dan imaginary sample dari 500 orang. Nilai incomedibagi dengan 10.000 untuk mencocokkan data income dengan skala skor happiness (jadi nilai $2 mewakili $20.000, $3 adalah $30.000, dst.)

Getting started in R

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(broom)
## Warning: package 'broom' was built under R version 4.1.3
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.1.3

Step 1: Load the data into R

income.data <- read.csv("income.data.csv")
income.data
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

Kedua variabel bersifat kuantitatif. Berdasarkan hasil summary, didapatkan bahwa pada variabel independen (income) :
1. Nilai minimumnya sebesar 1.506
2. Nilai mediannya sebesar 4.424
3. Nilai mean sebesar 4.467
4. Nilai maksimum sebesar 7.482

Sedangkan pada variabel dependen (happiness) :
1. Nilai minimumnya sebesar 0.266
2. Nilai mediannya sebesar 3.473
3. Nilai mean sebesar 3.393
4. Nilai maksimum sebesar 6.863

Step 2: Make sure your data meet the assumptions

Langkah kedua yaitu periksa apakah data tersebut memenuhi empat asumsi utama untuk regresi linier :

1. Independence of Observations (aka no autocorrelation)

Pada dataset income hanya memiliki satu variabel independen dan satu variabel dependen, sehingga tidak perlu menguji hubungan tersembunyi antar variabel.

Catatan : Jika memiliki autokorelasi dalam variabel maka tidak bisa melanjutkan dengan simple linier regression.

2. Normality

Untuk mengecek apakah variabel dependen merupakan distribusi normal, dengan menggunakan fungsi hist() sebagai berikut :

hist(income.data$happiness)

Observasi ditandai dengan berbentuk lonceng yang mana berarti kita bisa lanjutkan ke tahap berikutnya.

3. Linearity

Hubungan antara variabel independen dan dependen harus linear. Kita gunakan scatter plot ntuk melihat apakah distribusi titik data dengan garis lurus.

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

Berdasarkan hasil di atas, hubungannya linier. Maka bisa dilanjutkan ke tahap berikutnya.

4. Homoscedasticity (aka homogeneity of variance)

Artinya, prediction error tidak berubah secara signifikan selama range prediksi model. Uji asumsi ini bisa dilakukan setelah menyesuaikan model linear.

Step 3: Perform the linear regression analysis

Setelah memeriksa pemenuhan asumsi, maka langkah selanjutnya yaitu melihat apakah ada hubungan linear antara income dan happiness pada survei ini dari 500 orang dengan rentang incomes dari $15k sampai $75k, dimana happiness diukur pada skala 1 hingga 10.

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

Output di atas berisi tentang rangkuman :
● residu model / residuals (terdapat di awal penjelasan output)
● Koefisien / Coefficients (terdapat estimasi, standar error, statistik t, dan nilai p)
● diagnostik model (tiga baris terakhir yang menunjukkan nilai p untuk mengetahui apakah model sesuai dengan data dengan baik)

Berdasarkan output, dikatakan bahwa ada significant positive relationship antara income dan happiness (p value < 0.0001), dengan 0.713 unit mengalami peningkatan di happiness untuk setiap unit meningkat di income.

Step 4: Check for homoscedasticity

Langkah ini digunakan untuk memastikan bahwa model data sesuai dengan asumsi homoscedascity model linier.

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

par(mfrow=c(1,1))

Berdasarkan Normal Q-Q plot, didapat bahwa residual nyata dari model data membentuk garis satu ke satu yang hampir sempurna dengan residual teoritis dari model yang sempurna. Dengan demikian, dari residual ini bisa dikatakan bahwa model data memenuhi asumsi homoscedasticity.

Step 5: Visualize the results with a graph

Terdapat 4 langkah untuk memvisualisasikan hasil simple linear regression :

1. Plot the data points on a graph

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

2. Add the linear regression line to the plotted data

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

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

3. Add the equation for the regression line.

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

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

4. Make the graph ready for publication

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'

Step 6: Report your results

Berdasarkan langkah-langkah yang sudah dilakukan, ditemukan bahwa terdapat hubungan yang signifikan antara income dan happiness yaitu p<0.001 dengan peningkatan 0.73 unit happiness untuk setiap peningkatan income sebesar $10,000.

Multiple Linier Regression

Dataset berisi observasi tentang persetase orang biking ke tempat kerja setiap hari, persentase orang smoking, dan persentase heart disease dalam imaginary sample dari 500 kota.

Step 1: Load the data into R

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

Dalam dataset heart.data, variabel independennya yaitu smoking dan biking, sedangkan variabel dependennya yaitu heart disease.

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

Step 2: Make sure your data meet the assumptions

Seperti pada simple linear regression, Multiple linear regression juga perlu memeriksa apakah data sesuai dengan asumsi.

1. Independence of observations (aka no autocorrelation)

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

Berdasarkan hasil di atas, korelasi antara biking dan smoking hanya 1,5% maka kedua parameter tersebut bisa dimasukkan dalam model.

2. Normality

hist(heart.data$heart.disease)

Distribusinya berbentuk lonceng, maka kita bisa lanjut ke langkah berikutnya.

3. Linearity

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

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

Hubungan antara smoking dan heart disease linear walaupun kurang terlihat jelas.

4. Homoscedasticity

Langkah ini dilakukan setelah membuat model.

Step 3: Perform the linear regression analysis

Tingkat biking antara 1 dan 75%, tingkat smoking antara 0.5 dan 30%, dan tingkat heart disease antara 0.5% dan 20.5%. Memeriksa apakah ada hubungan linier antara variabel tersebut :

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

Step 4: Check for homoscedasticity

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

par(mfrow=c(1,1))

Residu tidak menunjukkan bias, maka model sesuai dengan asumsi homoscedasticity.

Step 5: Visualize the results with a graph

Terdapat 7 langkah :

1. Create a new dataframe with the information needed to plot the model

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)))

2. Predict the values of heart disease based on your linear model

plotting.data$predicted.y <- predict.lm(heart.disease.lm, newdata=plotting.data)

3. Round the smoking numbers to two decimals

plotting.data$smoking <- round(plotting.data$smoking, digits = 2)

4. Change the ‘smoking’ variable into a factor

plotting.data$smoking <- as.factor(plotting.data$smoking)

5. Plot the original data

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

heart.plot

6. Add the regression lines

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

7. Make the graph ready for publication

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

heart.plot + annotate(geom="text", x=30, y=1.75, label=" = 15 + (-0.2*biking) + (0.178*smoking)")

Step 6: Report your results

Terdapat 500 kota dalam survei ini, ditemukan :
● hubungan yang signifikan antara frekuensi biking dan frekuensi heart disease yang mana p<0
● hubungan yang signifikan antara frekuensi smoking dan frekuensi heart disease yang mana p<0.0001
● penurunan sebesar 0.2% pada frekuensi heart disease untuk setiap peningkatan 1% dalam biking
● peningkatan 0.178% pada frekuensi heart disease untuk setiap peningkatan 1% dalam smoking.

Referensi

https://www.scribbr.com/statistics/linear-regression-in-r/
https://www.scribbr.com/statistics/multiple-linear-regression/

Sekian pembahasan (pengerjaan) tugas 6 dalam bab Analisis Regresi dan Prediksi pada mata kuliah Statistika Komputasi - Statistika Bisnis Matana University.
Terima Kasih.