Dosen Pengampu: Prof. Dr. Suhartono, M.Kom

Lembaga: Universitas Islam Negeri Maulana Malik Ibrahim Malang

Jurusan: Teknik Informatika

Fakultas : Sains dan Teknologi

Penjelasan

Program ini dibuat untuk menganalisa Regresi Linier pada data pasien positif covid Mei 2021 yang disandingkan dengan data mobility index di daerah DKI Jakarta.

Langkah 1

Langkah pertama adalah memasukkan tabel data yang akan digunakan kedalam sebuah variable.

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
April <- read_excel(path = "April_2021_Positif.xlsx")
## New names:
## * `` -> ...10
## * `` -> ...11
April
## # A tibble: 31 x 11
##    Nama_provinsi Tanggal Positif Retail Grocery  Park Station Workplace
##    <chr>         <chr>     <dbl>  <dbl>   <dbl> <dbl>   <dbl>     <dbl>
##  1 DKI Jakarta   44287    409546     -6      21   -19     -20       -36
##  2 DKI Jakarta   44288    410400     -7      19   -27     -22        -7
##  3 DKI Jakarta   44289    411157     -2      25    -9     -21       -24
##  4 DKI Jakarta   44290    411573     -3      26    -9     -16       -25
##  5 DKI Jakarta   44291    412418     -1      27    -7     -16       -26
##  6 DKI Jakarta   44292    413323     -2      26    -9     -31       -26
##  7 DKI Jakarta   44293    414106     -2      25   -12     -34       -23
##  8 DKI Jakarta   44294    414838     -4      25   -20     -33       -17
##  9 DKI Jakarta   44295    415647     -2      26   -23     -35        -6
## 10 DKI Jakarta   44296    416341      6      36     1     -31       -32
## # ... with 21 more rows, and 3 more variables: Residental <dbl>, ...10 <lgl>,
## #   ...11 <lgl>

Langkah 2

Perintah summary digunakan untuk menampilkan beberapa informasi terkait data yang diberikan seperti: panjang data (length), tipe data (mode), nilai minimal (Min), nilai Maksimal (Max), Quartil 1 (1st Qu), Quartil 3 (3rd Qu), nilai rata-rata (mean), dan nilai tengan (median) setiap kolomnya.

summary(April)
##  Nama_provinsi        Tanggal             Positif           Retail       
##  Length:31          Length:31          Min.   :409546   Min.   :-13.000  
##  Class :character   Class :character   1st Qu.:415243   1st Qu.: -5.000  
##  Mode  :character   Mode  :character   Median :419208   Median : -2.000  
##                                        Mean   :419589   Mean   : -2.161  
##                                        3rd Qu.:424419   3rd Qu.: -1.000  
##                                        Max.   :430059   Max.   :  8.000  
##     Grocery           Park            Station         Workplace     
##  Min.   : 8.00   Min.   :-27.000   Min.   :-45.00   Min.   :-73.00  
##  1st Qu.:18.50   1st Qu.: -8.000   1st Qu.:-31.50   1st Qu.:-35.00  
##  Median :23.00   Median :  5.000   Median :-22.00   Median :-24.00  
##  Mean   :23.87   Mean   :  3.677   Mean   :-24.32   Mean   :-28.65  
##  3rd Qu.:25.50   3rd Qu.: 14.500   3rd Qu.:-17.50   3rd Qu.:-19.50  
##  Max.   :55.00   Max.   : 34.000   Max.   :-14.00   Max.   : -4.00  
##    Residental      ...10          ...11        
##  Min.   : 2.000   Mode:logical   Mode:logical  
##  1st Qu.: 5.000   NA's:31        NA's:31       
##  Median : 6.000                                
##  Mean   : 6.129                                
##  3rd Qu.: 7.000                                
##  Max.   :12.000

Langkah 3

Langkah 3 adalah menyeleksi data yang akan digunakan, yakni kolom Tanggal dan Positif.

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
April1 <- select(April, Tanggal, Positif)
April1
## # A tibble: 31 x 2
##    Tanggal Positif
##    <chr>     <dbl>
##  1 44287    409546
##  2 44288    410400
##  3 44289    411157
##  4 44290    411573
##  5 44291    412418
##  6 44292    413323
##  7 44293    414106
##  8 44294    414838
##  9 44295    415647
## 10 44296    416341
## # ... with 21 more rows

Langkah 4

Langkah 4 digunakan untuk membuat graphical parameter

Langkah 5

Langkah 5 merupakan visualisasi dari tabel yang dibuat dimana x adalah kolom tanggal dan y adalah data pasien positf.

plot(April1$Positif ~ April1$Tanggal, data = April1, main="Data Pasien Positif Covid April 2021")
## Warning in xy.coords(x, y, xlabel, ylabel, log): NAs introduced by coercion

## Langkah 6 Langkah 6 digunakan untuk menguban kolom tanggal menjadi tipe numeric

April1$Tanggal <- as.numeric(April1$Tanggal)
## Warning: NAs introduced by coercion
April1
## # A tibble: 31 x 2
##    Tanggal Positif
##      <dbl>   <dbl>
##  1   44287  409546
##  2   44288  410400
##  3   44289  411157
##  4   44290  411573
##  5   44291  412418
##  6   44292  413323
##  7   44293  414106
##  8   44294  414838
##  9   44295  415647
## 10   44296  416341
## # ... with 21 more rows

Langkah 7

Perintah disini adalah untuk menampilkan hubungan keterkatan (korelasi) antara data tanggal dan data pasien positif covid. dimanajika mendekati +1 maka korelasi nya sangat kuat.

cor(April1$Positif, April1$Tanggal)
## [1] NA

Langkah 8

Di langkah ke 8 terdapat perintah untuk membuat regresi linier antara data tanggal dan pasien positif kemudian menampilkannya hasil koefisien dan kinerja model dengan summarry.

model <- lm(April1$Positif ~ April1$Tanggal)
summary(model)
## 
## Call:
## lm(formula = April1$Positif ~ April1$Tanggal)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1020.63  -294.20    48.37   388.78   813.18 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -2.793e+07  4.490e+05  -62.21   <2e-16 ***
## April1$Tanggal  6.400e+02  1.014e+01   63.14   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 480.5 on 28 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.993,  Adjusted R-squared:  0.9928 
## F-statistic:  3987 on 1 and 28 DF,  p-value: < 2.2e-16

Langkah 9

ANOVA adalah tes statistik untuk memperkirakan bagaimana variabel dependen kuantitatif berubah sesuai dengan tingkat satu atau lebih variabel independen kategoris.

anova(model)
## Analysis of Variance Table
## 
## Response: April1$Positif
##                Df    Sum Sq   Mean Sq F value    Pr(>F)    
## April1$Tanggal  1 920625281 920625281    3987 < 2.2e-16 ***
## Residuals      28   6465313    230904                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Langkah 10

Disini dilakukan visualisasi data dengan menampilkan abline (garis regresi) dimana semakin dekat dengan garis maka semakin bagus model.

plot(April1$Positif ~ April1$Tanggal, data = April1, col = "magenta", pch = 20, cex = 1.7, main = "Data Pasien Positif Covid April 2021")
abline(model, col="blue")

## Langkah 10 Disini dilakukan visualisasi perkiraan umum pengaruh titik data dalam regresi linier.

plot(cooks.distance(model), pch = 16, col = "magenta")

## Langkah 11 visualisasi model

plot(model)

Langkah 12

Membandingkan kesesuian beberapa model regresi

AIC(model)
## [1] 459.5592

Langkah 13

Membandingkan kesesuian beberapa model regresi namun dengan sensitifitas penalty pemasukan varible baru yang lebih tinggi.

BIC(model)
## [1] 463.7628

Langkah 15

Melakukan visualisasi dari prediksi nilai model

plot(head(predict(model), n = 11))

## Langkah 16 Menampilkan residual dari model. Dimana residual adalah selisih antara nilai sesungguhnya dengan nilai prediksi pada analisis regresi linear, baik berganda maupun sederhana

head(resid(model), n = 11)
##          1          2          3          4          5          6          7 
## -413.31828 -199.33541  -82.35254 -306.36967 -101.38680  163.59607  306.57894 
##          8          9         10         11 
##  398.56181  567.54468  621.52755  387.51042

Langkah 17

Menciptakan estimasi kepadatan kernel warna halus dari scatterplot R.

scatter.smooth(x=April1$Positif, y=April1$Tanggal, main="Data Pasien Positif Covid April 2021")

## Langkah 18 Memebagi data dalam 3 Quartil dan melakukan pengecekan seberapa baik data didistribusikan

boxplot(April1$Positf, April1$Tanggal, main="Positif", boxplot.stats(April1$Positif)$out)
## Warning: Unknown or uninitialised column: `Positf`.

## Langkah 20 Membuat visualisasi kepadatan variable dalam mengambil nilai tertentu.

plot(density(April1$Positif), main="Pasien Positif Covid April 2021", ylab="Frequency")

## Langkah 21 Memasukkan koefisien model dalam variable kemudian di visualisasikan dengan menyertakan garis lurus untuk membatu analisa regresi linieer

coefs <- coef(model)
plot(April1$Positif ~ April1$Tanggal, data = April1)
text(x = 12, y = 10, paste('expression = ', round(coefs[1], 2),  '+', round(coefs[2], 2), '*Positif'))
abline(coefs, col="blue")

## Langkah 22 Mengubah variabel tanggal ke bentuk numerik dan melakukan test korelasi (hubungan) antara variable tanggal dan variable positif

April1$Tanggal <- as.numeric(April1$Tanggal)
cor.test(April1$Tanggal, April1$Positif)
## 
##  Pearson's product-moment correlation
## 
## data:  April1$Tanggal and April1$Positif
## t = 63.143, df = 28, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9925874 0.9983557
## sample estimates:
##      cor 
## 0.996507

Referensi

https://rpubs.com/suhartono-uinmaliki/877449 https://r-coder.com/density-plot-r/ https://statisticsglobe.com/abline-function-in-r https://en.wikipedia.org/wiki/Linear_regression