Regresi Linier Starups Analysis

Berikut adalah analisis mengenai data behaviour 50 Startups yang ada pada negara Amerika. Data hasil survey ini merupakan pengaruh dari masing-masing variabel bagi profit Starups.
Menggunakan analisis linier regresi, akan dibuat suatu model untuk memprediksi faktor-faktor yang menunjukkan pengaruh bagi profit Starups.

Memasukkan Data

starups <- read.csv("datainput/starups.csv", stringsAsFactors = T)
head(starups)
#>   R.D.Spend Administration Marketing.Spend      State   Profit
#> 1  165349.2      136897.80        471784.1   New York 192261.8
#> 2  162597.7      151377.59        443898.5 California 191792.1
#> 3  153441.5      101145.55        407934.5    Florida 191050.4
#> 4  144372.4      118671.85        383199.6   New York 182902.0
#> 5  142107.3       91391.77        366168.4    Florida 166187.9
#> 6  131876.9       99814.71        362861.4   New York 156991.1

Eksplor Data Analisis

str(starups)
#> 'data.frame':    50 obs. of  5 variables:
#>  $ R.D.Spend      : num  165349 162598 153442 144372 142107 ...
#>  $ Administration : num  136898 151378 101146 118672 91392 ...
#>  $ Marketing.Spend: num  471784 443899 407935 383200 366168 ...
#>  $ State          : Factor w/ 3 levels "California","Florida",..: 3 1 2 3 2 3 1 2 3 1 ...
#>  $ Profit         : num  192262 191792 191050 182902 166188 ...

🔎 Deskripsi dari setiap kolom

R.D.Spend : biaya yang dibelanjakan setiap startup untuk penelitian dan pengembangan

Administration : biaya yang dibelanjakan untuk administrasi

Marketing.Spend : biaya yang dibelanjakan untuk Pemasaran

State : negara bagian yang menunjukkan di negara bagian mana starup tersebut berada

Profit : keuntungan yang didapat oleh startup

summary(starups)
#>    R.D.Spend      Administration   Marketing.Spend         State   
#>  Min.   :     0   Min.   : 51283   Min.   :     0   California:17  
#>  1st Qu.: 39936   1st Qu.:103731   1st Qu.:129300   Florida   :16  
#>  Median : 73051   Median :122700   Median :212716   New York  :17  
#>  Mean   : 73722   Mean   :121345   Mean   :211025                  
#>  3rd Qu.:101603   3rd Qu.:144842   3rd Qu.:299469                  
#>  Max.   :165349   Max.   :182646   Max.   :471784                  
#>      Profit      
#>  Min.   : 14681  
#>  1st Qu.: 90139  
#>  Median :107978  
#>  Mean   :112013  
#>  3rd Qu.:139766  
#>  Max.   :192262

Pada data pastikan tanpa ada missing value

anyNA(starups)
#> [1] FALSE

Permasalahan Bisnis

🔻 Tentukan masalah bisnis:
1. Memprediksi Profit Starups

🔻 Tentukan variabel:
1. Target : Profit
2. Prediktor : R.D.Spend, Administration, Marketing.Spend, State

1️⃣ Cek persebaran data

Eksplorasi data cek korelasi antar data

library(GGally)
ggcorr(starups, label = T)

Pada grafik korelasi, terlihat bahwa semua variabel memiliki pengaruh positif terhadap Profit dimana faktor R.D.Spend memiliki korelasi positif yang paling tinggi dibandingkan faktor-faktor lain.

Berikut adalah distribusi nilai dari masing-masing variabel

boxplot(starups)

Berdasarkan visualisasi boxplot, tidak ditemukan outlier pada masing-masing kolom variabel dan data berdistribusi normal, sehingga data tersebut sudah dapat dianalisis lebih lanjut.

Pembuatan Model Regresi Linear

Selanjutnya dapat dibuat model regresi linear dengan variabel prediktor R.D.Spend karena variabel tersebut memiliki korelasi positif tertinggi terhadap variabel target Profit.

set.seed(100) 

index_starups <- sample(x = nrow(starups) , size = nrow(starups)*0.80) 
starups_train <- starups[index_starups, ]
starups_test <- starups[-index_starups, ]
# membuat model Profit ~ R.D.Spend
model_starups <- lm(formula = Profit ~ R.D.Spend, data = starups_train)

# summary model
summary(model_starups)
#> 
#> Call:
#> lm(formula = Profit ~ R.D.Spend, data = starups_train)
#> 
#> Residuals:
#>    Min     1Q Median     3Q    Max 
#> -17981  -4123   -799   4678  16351 
#> 
#> Coefficients:
#>                Estimate  Std. Error t value            Pr(>|t|)    
#> (Intercept) 50420.37927  2484.33952   20.30 <0.0000000000000002 ***
#> R.D.Spend       0.83509     0.02819   29.63 <0.0000000000000002 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 7739 on 38 degrees of freedom
#> Multiple R-squared:  0.9585, Adjusted R-squared:  0.9574 
#> F-statistic: 877.8 on 1 and 38 DF,  p-value: < 0.00000000000000022

**2️⃣ Cek korelasi antar variabel prediktor dengan target*

plot(starups_train$R.D.Spend, starups_train$Profit)
abline(model_starups, col = "red")

cor(starups_train$Profit, starups_train$R.D.Spend)
#> [1] 0.979034

📉 Kesimpulan hasil eksplorasi

  1. Dapat dilihat bahwa adjusted R-squared memiliki nilai 0.9574
  2. Korelasi yang kuat (karena cor = mendekati 1), Variabel R.D.Spend dan Profit memiliki hubungan yang linear.

Selanjutnya akan dicoba pemilihan variabel prediktor secara automatis menggunakan step-wise regression dengan metode backward elimination.

# membuat model Profit terhadap seluruh prediktor
model_allstarups <- lm(formula = Profit ~ ., data = starups_train)
model_back <- step(model_allstarups, direction = "backward")
#> Start:  AIC=720.41
#> Profit ~ R.D.Spend + Administration + Marketing.Spend + State
#> 
#>                   Df   Sum of Sq         RSS    AIC
#> - State            2    61705200  2027273426 717.64
#> - Administration   1       43697  1965611923 718.41
#> <none>                            1965568226 720.41
#> - Marketing.Spend  1   227043444  2192611670 722.78
#> - R.D.Spend        1 19726650478 21692218704 814.45
#> 
#> Step:  AIC=717.64
#> Profit ~ R.D.Spend + Administration + Marketing.Spend
#> 
#>                   Df   Sum of Sq         RSS    AIC
#> - Administration   1         442  2027273868 715.64
#> <none>                            2027273426 717.64
#> - Marketing.Spend  1   236943302  2264216728 720.06
#> - R.D.Spend        1 20910105767 22937379193 812.69
#> 
#> Step:  AIC=715.64
#> Profit ~ R.D.Spend + Marketing.Spend
#> 
#>                   Df   Sum of Sq         RSS    AIC
#> <none>                            2027273868 715.64
#> - Marketing.Spend  1   248790186  2276064054 718.27
#> - R.D.Spend        1 25073912551 27101186419 817.36
summary(model_back)
#> 
#> Call:
#> lm(formula = Profit ~ R.D.Spend + Marketing.Spend, data = starups_train)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -17008.0  -4495.0    208.2   4923.5  14163.2 
#> 
#> Coefficients:
#>                    Estimate  Std. Error t value            Pr(>|t|)    
#> (Intercept)     48135.71758  2606.80137  18.465 <0.0000000000000002 ***
#> R.D.Spend           0.78241     0.03657  21.392 <0.0000000000000002 ***
#> Marketing.Spend     0.02974     0.01396   2.131              0.0398 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 7402 on 37 degrees of freedom
#> Multiple R-squared:  0.963,  Adjusted R-squared:  0.961 
#> F-statistic: 482.1 on 2 and 37 DF,  p-value: < 0.00000000000000022

Metode regresi bertahap ini akan menghasilkan rumus optimum berdasarkan nilai AIC terendah, dimana semakin rendah nilai AIC maka semakin rendah nilai observasi yang tidak tertangkap.

📉 Kesimpulan
Jika dibandingkan dengan model awal yang hanya menggunakan variabel R.D.Spend, maka model regresi yang menggunakan seluruh variabel prediktor mempunyai nilai Adjusted R-squared sebesar 0.961, lebih tinggi dibandingkan model sebelumnya sebesar 0.9574.

Prediksi Model

pred_back <- predict(model_back, newdata = starups_test)
library(MLmetrics)
MAPE(y_pred = pred_back , y_true = starups_test$Profit)
#> [1] 0.3055806

Evaluasi Model

1️⃣ Linearitas

Untuk menguji apakah variabel target dan prediktor memiliki hubungan linear. Dapat menggunakan uji statistik fungsi cor.test()

cor.test(x = starups_train$R.D.Spend, y = starups_train$Profit)
#> 
#>  Pearson's product-moment correlation
#> 
#> data:  starups_train$R.D.Spend and starups_train$Profit
#> t = 29.628, df = 38, p-value < 0.00000000000000022
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#>  0.9604370 0.9889386
#> sample estimates:
#>      cor 
#> 0.979034
  • H0: korelasi tidak signifikan
  • H1: korelasi signifikan

📉 Signifikansi Prediktor pada model
Karena nilai p-value < 0.00000000000000022 / < 0.05, maka tolak H0 dan keputusannya hubungan antara R.D.Spend dgn Profit berkorelasi signifikan.

2️⃣ Normalitas

  1. Visualisasi histogram residual, dengan menggunakan fungsi hist()
hist(model_back$residuals, breaks = 10)

plot(density(model_back$residuals))

  1. Uji statistik menggunakan shapiro.test()
shapiro.test(model_back$residuals)
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  model_back$residuals
#> W = 0.97898, p-value = 0.6518

📉 Karna nilai p-value = 0.6518 > alpha (0.05), maka gagal tolak H0 dan model berdistribusi normal.

3️⃣ Homoskedasitas

  1. Visualisasi dengan scatterplot antara nilai prediksi (fitted values) dengan nilai error
plot(model_back$fitted.values, model_back$residuals)
abline(h = 0, col = "red")

  1. Uji statistika dengan Breusch-Pagan dari package lmtest
library(lmtest)
bptest(model_back)
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  model_back
#> BP = 0.075196, df = 2, p-value = 0.9631

📉 Karna nilai p-value = 0.9631 > alpha (0.05), maka gagal tolak H0 dan residualnya sudah homogen atau dengan kata lain model tidak mengalami heterocedasticity.

4️⃣ Multikolinearitas

Ketika nilai VIF lebih dari 10 artinya terjadi multikolinearitas, dan harapannya mendapatkan VIF < 10.

library(car)
vif(model_back)
#>       R.D.Spend Marketing.Spend 
#>        1.840768        1.840768

📉 Hasil nilai VIF < 10 artinya tidak terjadi multikolinearitas.

Simpulan dan Saran

Setelah dilakukan pengujian analisis, model mempunyai kriteria cukup baik. Setelah dilakukan pengujian analisis, model mempunyai kriteria cukup baik.
Berdasarkan model ini, nilai keuntungan starups berkorelasi positif dengan nilai penelitian dan pengembangan. Menghitung MAPE (Mean Absolute Percentage Error) sebesar 0.305 atau 30.5% yang cukup tinggi berarti model sudah cukup baik tidak melebihi 50%, karena MAPE melihat model kita menyimpang dari nilai sebenarnya sebesar nilai rata-rata MAPE.
Dalam kata lain, menganggap besarnya nilai R&D akan meningkatkan keuntungan bagi starups, juga cenderung menganggap nilai keuntungan yang tinggi akan meningkatkan penelitian dan pengembangan.