knitr::opts_chunk$set(warning = FALSE, message = FALSE)
Sumber data: link
Variabel Respon: Profit
Variabel Prediktor: R&D Spend, Administration, Marketing Spend
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 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
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))
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
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:
p-value < 0.05 sehingga diambil keputusan Tolak H0
Kesimpulan: Variabel X1 berpengaruh signifikan terhadap variabel Y
Persamaan regresi Model 1: \(Y = 49030 + 0.08543 X\)
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:
p-value > 0.05 sehingga diambil keputusan Gagal Tolak H0
Kesimpulan: Variabel X2 tidak berpengaruh signifikan terhadap variabel Y
Persamaan regresi Model 2: \(Y = 76974 + 0.02887 X\)
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:
p-value < 0.05 sehingga diambil keputusan Tolak H0
Kesimpulan: Variabel X3 berpengaruh signifikan terhadap variabel Y
Persamaan regresi Model 3: \(Y = 60000 + 0.02465 X\)
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.
Persamaan regresi linier berganda secara matematik diekspresikan oleh : \(Y = a + β1X1 + β2X2 + ... + βnXn\)
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
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:
Uji Simultan: p-value < 0.05 yang artinya terdapat pengaruh yang signifikan antara variabel prediktor terhadap variabel respons secara simultan.
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).
Pendugaan Parameter Model Regresi Linear Berganda: \(Y = 50120 + 0.806X1 - 0.027X2 + 0.027X3\)
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.
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.
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.
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.
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.