knitr::opts_chunk$set(warning = FALSE, message = FALSE)

Tugas Business Intelligent

Sumber data: link

Variabel Respon: Profit

Variabel Prediktor: R&D Spend, Administration, Marketing Spend

Import Dataset

library(readr)
setwd("C:/Users/cnath/OneDrive/Documents/Kuliah/SEMESTER 7/BUSINESS INTELLIGENCE")
startups = read_csv("50_Startups.csv")
startups
## # A tibble: 50 x 5
##    `R&D Spend` Administration `Marketing Spend` State       Profit
##          <dbl>          <dbl>             <dbl> <chr>        <dbl>
##  1     165349.        136898.           471784. New York   192262.
##  2     162598.        151378.           443899. California 191792.
##  3     153442.        101146.           407935. Florida    191050.
##  4     144372.        118672.           383200. New York   182902.
##  5     142107.         91392.           366168. Florida    166188.
##  6     131877.         99815.           362861. New York   156991.
##  7     134615.        147199.           127717. California 156123.
##  8     130298.        145530.           323877. Florida    155753.
##  9     120543.        148719.           311613. New York   152212.
## 10     123335.        108679.           304982. California 149760.
## # ... with 40 more rows

Identifikasi tipe data non-numerik

Fungsi str() digunakan untuk melihat tipe data masing-masing kolom. Selanjutnya, akan digunakan fungsi as.numeric() untuk mengonversi tipe data kolom yang akan digunakan menjadi data numerik.

str(startups)
## spc_tbl_ [50 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ R&D Spend      : num [1:50] 165349 162598 153442 144372 142107 ...
##  $ Administration : num [1:50] 136898 151378 101146 118672 91392 ...
##  $ Marketing Spend: num [1:50] 471784 443899 407935 383200 366168 ...
##  $ State          : chr [1:50] "New York" "California" "Florida" "New York" ...
##  $ Profit         : num [1:50] 192262 191792 191050 182902 166188 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   `R&D Spend` = col_double(),
##   ..   Administration = col_double(),
##   ..   `Marketing Spend` = col_double(),
##   ..   State = col_character(),
##   ..   Profit = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
startups$`R&D Spend` = as.numeric(startups$`R&D Spend`)
startups$Administration = as.numeric(startups$Administration)
startups$`Marketing Spend` = as.numeric(startups$`Marketing Spend`)
startups$Profit = as.numeric(startups$Profit)
startups
## # A tibble: 50 x 5
##    `R&D Spend` Administration `Marketing Spend` State       Profit
##          <dbl>          <dbl>             <dbl> <chr>        <dbl>
##  1     165349.        136898.           471784. New York   192262.
##  2     162598.        151378.           443899. California 191792.
##  3     153442.        101146.           407935. Florida    191050.
##  4     144372.        118672.           383200. New York   182902.
##  5     142107.         91392.           366168. Florida    166188.
##  6     131877.         99815.           362861. New York   156991.
##  7     134615.        147199.           127717. California 156123.
##  8     130298.        145530.           323877. Florida    155753.
##  9     120543.        148719.           311613. New York   152212.
## 10     123335.        108679.           304982. California 149760.
## # ... with 40 more rows

Statistika Deskriptif

Statistika deskriptif yang dianalisa pada data kategorik berupa frekuensi, sedangkan pada data numerik adalah mean, minimum, median dan maksimum.

library(dplyr)

frek = table(startups$State)
tabel_frekuensi = data.frame(State = names(frek), Frekuensi = as.vector(frek))
tabel_frekuensi
##        State Frekuensi
## 1 California        17
## 2    Florida        16
## 3   New York        17
startups = startups %>%
  select(-State)

statdes = data.frame(
  Mean = colMeans(startups),
  Minimum = sapply(startups, min),
  Median = sapply(startups, median),
  Maksimum = sapply(startups, max)
)
statdes
##                      Mean  Minimum    Median Maksimum
## R&D Spend        73721.62     0.00  73051.08 165349.2
## Administration  121344.64 51283.14 122699.79 182645.6
## Marketing Spend 211025.10     0.00 212716.24 471784.1
## Profit          112012.64 14681.40 107978.19 192261.8

Visualisasi Data

Histogram

Berikut merupakan visualisasi histogram dari variabel respon dan variabel prediktor yang digunakan.

par(mfrow=c(2,2))

rd = hist(startups$`R&D Spend`, 
     col = "yellow", 
     border = "black", 
     main = "Histogram Variabel R&D Spend", 
     xlab = "R&D Spend", 
     ylab = "Frequency")

admin = hist(startups$Administration, 
     col = "green", 
     border = "black", 
     main = "Histogram Variabel Administration", 
     xlab = "Administration Spend", 
     ylab = "Frequency")

mkt = hist(startups$`Marketing Spend`, 
     col = "lightblue", 
     border = "black", 
     main = "Histogram Variabel Marketing Spend", 
     xlab = "Marketing Spend", 
     ylab = "Frequency")

profit = hist(startups$Profit, 
     col = "grey", 
     border = "black", 
     main = "Histogram Variabel Profit", 
     xlab = "Profit", 
     ylab = "Frequency")

Scatter Plot

Berikut merupakan scatter plot dari masing-masing variabel prediktor dengan variabel respon untuk melihat hubungan antara kedua variabel.

par(mfrow=c(1,3))

plotrd = plot(startups$`R&D Spend`, startups$Profit, col = "orange",
     main = "Scatter Plot R&D Spend vs Profit",
     xlab = "R&D Spend", ylab = "Profit")

plotadmin = plot(startups$Administration, startups$Profit, col = "darkgreen",
     main = "Scatter Plot Administration vs Profit",
     xlab = "Administration", ylab = "Profit")

plotmkt = plot(startups$`Marketing Spend`, startups$Profit, col = "blue",
     main = "Scatter Plot Marketing Spend vs Profit",
     xlab = "Marketing Spend", ylab = "Profit")

Berdasarkan hasil scatterplot di atas, dapat dilihat secara sekilas variabel R&D Spend dan Marketing Spend cenderung membentuk pola hubungan positif linear dengan variabel Profit, sedangkan variabel Administration tidak membentuk pola apapun dengan variabel Profit. Dengan demikian, akan dilakukan analisis regresi linear untuk melihat hubungan antar variabel secara statistik.

Matriks Korelasi (Heatmap)

Berikut merupakan heatmap yang menggambarkan hubungan antar variabel dengan mengacu pada hasil matriks korelasi.

library(ggplot2)
library(reshape2)

heatmap = startups[, c("R&D Spend", "Administration", "Marketing Spend", "Profit")]

#Matriks Korelasi
cor_matrix = cor(heatmap, use = "complete.obs")

#Heatmap
cor_matrix = melt(cor_matrix)
ggplot(cor_matrix, aes(Var1, Var2, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = sprintf("%.2f", value)), vjust = 1) +  #Menambahkan nilai korelasi
  scale_fill_gradient(low = "white", high = "red") +
  labs(title = "Heatmap dari Korelasi Antar Variabel") +
  theme(plot.title = element_text(hjust = 0.5))

Analisis Regresi Linear Sederhana

Persamaan regresi linier sederhana secara matematik diekspresikan oleh : \(Y = a + bX\)

Keterangan:

Variabel Respon

Y : Profit

Variabel Prediktor

X1 : R&D Spend

X2 : Administration

X3 : Marketing Spend

Uji-t

Hipotesis:

H0: variabel prediktor tidak berpengaruh signifikan terhadap variabel respon

H1: variabel prediktor berpengaruh signifikan terhadap variabel respon

Keputusan: Tolak H0 ketika p-value < 0.05

Model 1: Profit VS R&D Spend

library(lmtest)
library(zoo)

Y = startups$Profit
X1 = startups$`R&D Spend`
X2 = startups$Administration
X3 = startups$`Marketing Spend`

lm1 = lm(Y~X1, data=startups)
summary(lm1)
## 
## Call:
## lm(formula = Y ~ X1, data = startups)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -34351  -4626   -375   6249  17188 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 4.903e+04  2.538e+03   19.32   <2e-16 ***
## X1          8.543e-01  2.931e-02   29.15   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9416 on 48 degrees of freedom
## Multiple R-squared:  0.9465, Adjusted R-squared:  0.9454 
## F-statistic: 849.8 on 1 and 48 DF,  p-value: < 2.2e-16

Hasil Regresi Linear:

  1. p-value < 0.05 sehingga diambil keputusan Tolak H0

  2. Kesimpulan: Variabel X1 berpengaruh signifikan terhadap variabel Y

  3. Persamaan regresi Model 1: \(Y = 49030 + 0.08543 X\)

  4. Model 1 menghasilkan nilai R2 yang sangat baik yaitu 0.9454 yang berarti 94.54% variabel X1 dapat menjelaskan variabel Y dan 5.56% dijelaskan oleh variabel lainnya.

Model 2: Profit VS Administration

lm2 = lm(Y~X2, data=startups)
summary(lm2)
## 
## Call:
## lm(formula = Y ~ X2, data = startups)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -96072 -23426  -3564  25438  84870 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept) 7.697e+04  2.532e+04   3.040  0.00382 **
## X2          2.887e-01  2.034e-01   1.419  0.16222   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 39900 on 48 degrees of freedom
## Multiple R-squared:  0.04029,    Adjusted R-squared:  0.02029 
## F-statistic: 2.015 on 1 and 48 DF,  p-value: 0.1622

Hasil Regresi Linear:

  1. p-value > 0.05 sehingga diambil keputusan Gagal Tolak H0

  2. Kesimpulan: Variabel X2 tidak berpengaruh signifikan terhadap variabel Y

  3. Persamaan regresi Model 2: \(Y = 76974 + 0.02887 X\)

  4. Model 2 menghasilkan nilai R2 yang buruk yaitu 0.0203 yang berarti variabel X2 hanya dapat menjelaskan variabel Y sebesar2.03%, sedangkan 97.97% sisanya dijelaskan oleh variabel lainnya.

Model 3: Profit VS Marketing Spend

lm3 = lm(Y~X3, data=startups)
summary(lm3)
## 
## Call:
## lm(formula = Y ~ X3, data = startups)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -83739 -18802   4925  15879  64642 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 6.000e+04  7.685e+03   7.808 4.29e-10 ***
## X3          2.465e-01  3.159e-02   7.803 4.38e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 27040 on 48 degrees of freedom
## Multiple R-squared:  0.5592, Adjusted R-squared:   0.55 
## F-statistic: 60.88 on 1 and 48 DF,  p-value: 4.381e-10

Hasil Regresi Linear:

  1. p-value < 0.05 sehingga diambil keputusan Tolak H0

  2. Kesimpulan: Variabel X3 berpengaruh signifikan terhadap variabel Y

  3. Persamaan regresi Model 3: \(Y = 60000 + 0.02465 X\)

  4. Model 1 menghasilkan nilai R2 yang moderat yaitu 0.55 yang berarti 55% variabel X3 dapat menjelaskan variabel Y dan 45% dijelaskan oleh variabel lainnya.

Analisis Regresi Linear Berganda

Persamaan regresi linier berganda secara matematik diekspresikan oleh : \(Y = a + β1X1 + β2X2 + ... + βnXn\)

1. Uji Simultan

Hipotesis:

H0: variabel prediktor tidak berpengaruh signifikan terhadap variabel respon secara simultan

H1: variabel prediktor berpengaruh signifikan terhadap variabel respon secara simultan

Keputusan: Tolak H0 ketika p-value < 0.05

2. Uji Parsial

Hipotesis:

H0: variabel prediktor tidak berpengaruh signifikan terhadap variabel respon secara parsial

H1: variabel prediktor berpengaruh signifikan terhadap variabel respon secara parsial Keputusan: Tolak H0 ketika p-value < 0.05

lmstartups = lm(Y~X1+X2+X3, data=startups)
summary(lmstartups)
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = startups)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -33534  -4795     63   6606  17275 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.012e+04  6.572e+03   7.626 1.06e-09 ***
## X1           8.057e-01  4.515e-02  17.846  < 2e-16 ***
## X2          -2.682e-02  5.103e-02  -0.526    0.602    
## X3           2.723e-02  1.645e-02   1.655    0.105    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9232 on 46 degrees of freedom
## Multiple R-squared:  0.9507, Adjusted R-squared:  0.9475 
## F-statistic:   296 on 3 and 46 DF,  p-value: < 2.2e-16

Hasil Regresi Linear Berganda:

  1. Uji Simultan: p-value < 0.05 yang artinya terdapat pengaruh yang signifikan antara variabel prediktor terhadap variabel respons secara simultan.

  2. Uji Parsial: Variabel X1 berpengaruh signifikan terhadap variabel Y secara parsial (p-value < 0.05), sedangkan variabel X2 dan X3 tidak berpengaruh signifikan terhadap variabel Y secara parsial (p-value > 0.05).

  3. Pendugaan Parameter Model Regresi Linear Berganda: \(Y = 50120 + 0.806X1 - 0.027X2 + 0.027X3\)

3. Pendeteksian Multikolinearitas

library(car)
vif(lmstartups)
##       X1       X2       X3 
## 2.468903 1.175091 2.326773

Hasil Pendeteksian Multikolinearitas:

Karena nilai VIF pada X1, X2 dan X3 berada di bawah 10, maka tidak terjadi multikolinieritas. Artinya, asumsi multikolinieritas telah terpenuhi.

4. Uji Normalitas

Hipotesis:

H0: Residual data menyebar normal

H1: Residual data tidak menyebar normal

Keputusan: Tolak H0 ketika p-value < 0.05

#Uji Shapiro
library(tseries)
res = residuals(lmstartups)
res
##           1           2           3           4           5           6 
##   -259.4229   2635.2918   8903.1109   9205.2900  -5951.5742  -6589.6606 
##           7           8           9          10          11          12 
##  -1991.5867  -4268.7630    470.0703  -5124.7241  10612.9336   8685.6870 
##          13          14          15          16          17          18 
##  12447.4658   6819.3583 -16945.9963 -16318.1200  10077.5246  -4822.0772 
##          19          20          21          22          23          24 
##  -4747.3268   7141.6436   1834.3608  -6006.4316  -4354.7317  -1262.6252 
##          25          26          27          28          29          30 
##  -4810.9261   5166.6149  -4867.0354  -9399.7615   1622.3540   -790.3435 
##          31          32          33          34          35          36 
##    485.2171   -204.2963  -1573.4890  -1136.0878   7673.5263   5967.9104 
##          37          38          39          40          41          42 
##  15422.0154    329.6023  11531.6294  -2723.2520   3423.9560   2996.2738 
##          43          44          45          46          47          48 
##    878.0782   9591.9400    588.9751  17275.4303  -6675.4569  -3930.8590 
##          49          50 
## -13497.9782 -33533.7341
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.93719, p-value = 0.01044
#Plot Residual
hist(res, main = "Histogram Residual", xlab = "Residual Data")

qqnorm(res)
qqline(res, col=2)

Hasil Uji Normalitas pada Residual Data:

p-value < 0.05 sehingga diambil keputusan Tolak H0 dan disimpulkan bahwa residual data tidak menyebar normal. Selain berdasarkan hasil uji secara statistik, dapat dilihat pula pada histogram data residual yang condong ke kiri (skewness negatif) dan grafik Q-Q plot yang tidak linear turut mendukung bahwa data startups belum memenuhi uji asumsi normalitas.

5. Uji Heteroskedastisitas

Hipotesis:

H0: Tidak terjadi heteroskdeastisitas

H1: Terjadi heteroskdeastisitas

Keputusan: Tolak H0 ketika p-value < 0.05

#Uji Breusch-Pagan
bptest(lmstartups)
## 
##  studentized Breusch-Pagan test
## 
## data:  lmstartups
## BP = 3.1239, df = 3, p-value = 0.3729

Hasil Uji Heteroskedastisitas:

p-value > 0.05 sehingga diambil keputusan Gagal Tolak H0 dan disimpulkan bahwa tidak terjadi heteroskedastisitas dan asumsi homogenitas ragam residual telah terpenuhi.

6. Uji Autokorelasi

Hipotesis:

H0: Tidak terjadi autokorelasi

H1: Terjadi autokorelasi

Keputusan: Tolak H0 ketika p-value < 0.05

#Uji Durbin Watson
dwtest(lmstartups)
## 
##  Durbin-Watson test
## 
## data:  lmstartups
## DW = 1.2818, p-value = 0.002265
## alternative hypothesis: true autocorrelation is greater than 0

Hasil Uji Autokorelasi:

p-value < 0.05 sehingga diambil keputusan Tolak H0 dan disimpulkan bahwa terjadi autokorelasi dan asumsi autokorelasi belum terpenuhi.

Koefisien Determinasi

r2 = summary(lmstartups)$r.squared
r2
## [1] 0.950746

Model regresi linear berganda pada data startups menghasilkan nilai koefisien determinasi sebesar 0.950746 yang artinya variabel prediktor (X1, X2 dan X3) mempengaruhi variabel respons (Y) sebesar 95.0746%, sedangkan sisanya dipengaruhi variabel lain di luar model.