library(readr)
library(vctrs)
library(ggplot2)
library(stats)
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(olsrr)
##
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
##
## rivers
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
library(carData)
library(nortest)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dataa = read.csv("C:/Users/LAILI/Downloads/Cellphone.csv", header=TRUE)
head(dataa)
## Product_id Price Sale weight resoloution ppi cpu.core cpu.freq internal.mem
## 1 203 2357 10 135.0 5.2 424 8 1.35 16
## 2 880 1749 10 125.0 4.0 233 2 1.30 4
## 3 40 1916 10 110.0 4.7 312 4 1.20 8
## 4 99 1315 11 118.5 4.0 233 2 1.30 4
## 5 880 1749 11 125.0 4.0 233 2 1.30 4
## 6 947 2137 12 150.0 5.5 401 4 2.30 16
## ram RearCam Front_Cam battery thickness
## 1 3.000 13.00 8 2610 7.4
## 2 1.000 3.15 0 1700 9.9
## 3 1.500 13.00 5 2000 7.6
## 4 0.512 3.15 0 1400 11.0
## 5 1.000 3.15 0 1700 9.9
## 6 2.000 16.00 8 2500 9.5
attach(dataa)
summary(dataa)
## Product_id Price Sale weight
## Min. : 10.0 Min. : 614 Min. : 10.0 Min. : 66.0
## 1st Qu.: 237.0 1st Qu.:1734 1st Qu.: 37.0 1st Qu.:134.1
## Median : 774.0 Median :2258 Median : 106.0 Median :153.0
## Mean : 675.6 Mean :2216 Mean : 621.5 Mean :170.4
## 3rd Qu.:1026.0 3rd Qu.:2744 3rd Qu.: 382.0 3rd Qu.:170.0
## Max. :1339.0 Max. :4361 Max. :9807.0 Max. :753.0
## resoloution ppi cpu.core cpu.freq
## Min. : 1.40 Min. :121.0 Min. :0.000 Min. :0.000
## 1st Qu.: 4.80 1st Qu.:233.0 1st Qu.:4.000 1st Qu.:1.200
## Median : 5.15 Median :294.0 Median :4.000 Median :1.400
## Mean : 5.21 Mean :335.1 Mean :4.857 Mean :1.503
## 3rd Qu.: 5.50 3rd Qu.:428.0 3rd Qu.:8.000 3rd Qu.:1.875
## Max. :12.20 Max. :806.0 Max. :8.000 Max. :2.700
## internal.mem ram RearCam Front_Cam
## Min. : 0.0 Min. :0.000 Min. : 0.00 Min. : 0.000
## 1st Qu.: 8.0 1st Qu.:1.000 1st Qu.: 5.00 1st Qu.: 0.000
## Median : 16.0 Median :2.000 Median :12.00 Median : 5.000
## Mean : 24.5 Mean :2.205 Mean :10.38 Mean : 4.503
## 3rd Qu.: 32.0 3rd Qu.:3.000 3rd Qu.:16.00 3rd Qu.: 8.000
## Max. :128.0 Max. :6.000 Max. :23.00 Max. :20.000
## battery thickness
## Min. : 800 Min. : 5.100
## 1st Qu.:2040 1st Qu.: 7.600
## Median :2800 Median : 8.400
## Mean :2842 Mean : 8.922
## 3rd Qu.:3240 3rd Qu.: 9.800
## Max. :9500 Max. :18.500
lm1= lm(Price~Sale+ppi+cpu.core+cpu.freq+internal.mem+ram+Front_Cam+battery+thickness, data=dataa)
summary(lm1)
##
## Call:
## lm(formula = Price ~ Sale + ppi + cpu.core + cpu.freq + internal.mem +
## ram + Front_Cam + battery + thickness, data = dataa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -355.02 -114.94 -9.21 110.25 489.46
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1360.44222 141.27642 9.630 < 2e-16 ***
## Sale -0.02712 0.01150 -2.359 0.0196 *
## ppi 1.28488 0.19681 6.529 9.52e-10 ***
## cpu.core 59.08206 10.01879 5.897 2.33e-08 ***
## cpu.freq 90.37346 41.46806 2.179 0.0309 *
## internal.mem 6.88009 1.20814 5.695 6.26e-08 ***
## ram 113.09347 26.20975 4.315 2.87e-05 ***
## Front_Cam 10.75465 5.31424 2.024 0.0448 *
## battery 0.02514 0.01443 1.743 0.0835 .
## thickness -58.18385 10.35013 -5.622 8.89e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 180.4 on 151 degrees of freedom
## Multiple R-squared: 0.948, Adjusted R-squared: 0.9449
## F-statistic: 305.7 on 9 and 151 DF, p-value: < 2.2e-16
AIC=c(AIC(lm1))
BIC=c(BIC(lm1))
AdjustedRsquared=c(summary(lm1)[[9]])
ResidualStandardError=c(summary(lm1)[[6]])
Model=c("LM1")
Kriteria=data.frame(Model,AdjustedRsquared,
ResidualStandardError,AIC,BIC)
Kriteria
## Model AdjustedRsquared ResidualStandardError AIC BIC
## 1 LM1 0.944875 180.3604 2141.35 2175.246
reg <- lm(Price ~ Sale+ppi+cpu.core+cpu.freq+internal.mem+ram+Front_Cam+battery+thickness, data=dataa)
sumreg <- summary(reg)
n <- dim(dataa)[1]
x <- matrix(c(rep(1,n),Sale,ppi,cpu.core,cpu.freq,internal.mem,ram,Front_Cam,battery,thickness), nrow = n)
y <- Price
k <- dim(x)[2]
estimate <- solve(t(x)%*%x)%*%(t(x)%*%y)
y_hat <- x%*%estimate
sumreg
##
## Call:
## lm(formula = Price ~ Sale + ppi + cpu.core + cpu.freq + internal.mem +
## ram + Front_Cam + battery + thickness, data = dataa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -355.02 -114.94 -9.21 110.25 489.46
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1360.44222 141.27642 9.630 < 2e-16 ***
## Sale -0.02712 0.01150 -2.359 0.0196 *
## ppi 1.28488 0.19681 6.529 9.52e-10 ***
## cpu.core 59.08206 10.01879 5.897 2.33e-08 ***
## cpu.freq 90.37346 41.46806 2.179 0.0309 *
## internal.mem 6.88009 1.20814 5.695 6.26e-08 ***
## ram 113.09347 26.20975 4.315 2.87e-05 ***
## Front_Cam 10.75465 5.31424 2.024 0.0448 *
## battery 0.02514 0.01443 1.743 0.0835 .
## thickness -58.18385 10.35013 -5.622 8.89e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 180.4 on 151 degrees of freedom
## Multiple R-squared: 0.948, Adjusted R-squared: 0.9449
## F-statistic: 305.7 on 9 and 151 DF, p-value: < 2.2e-16
n
## [1] 161
k
## [1] 10
b0 <- sumreg$coefficients[1, 1]
b1 <- abs(sumreg$coefficients[2, 1])
b2 <- sumreg$coefficients[3, 1]
b3 <- sumreg$coefficients[4, 1]
b4 <- sumreg$coefficients[5, 1]
b5 <- sumreg$coefficients[6, 1]
b6 <- sumreg$coefficients[7, 1]
b7 <- sumreg$coefficients[8, 1]
b8 <- sumreg$coefficients[9, 1]
b9 <- abs(sumreg$coefficients[10, 1])
sprintf('Persamaan regresi dari data tersebut adalah : y = %f - %fx + %fx2 + %fx3 + %fx4 + %fx5 + %fx6 + %fx7 + %fx8 - %fx9', b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
## [1] "Persamaan regresi dari data tersebut adalah : y = 1360.442216 - 0.027116x + 1.284878x2 + 59.082059x3 + 90.373461x4 + 6.880094x5 + 113.093465x6 + 10.754651x7 + 0.025137x8 - 58.183847x9"
H0 = Variabel bebas tidak ada pengaruh signifikan terhadap variabel terikat
H1 = Variabel bebas ada pengaruh signifikan terhadap variabel terikat
ybar <- rep(mean(y),n)
JKreg <-t(y_hat-ybar)%*%(y_hat-ybar)
JKg <- t(y-y_hat)%*%(y-y_hat)
JKt <- t(y-ybar)%*%(y-ybar)
Sum_of_Square <- c(JKreg, JKg, JKt)
dbreg <- k-1
dbtotal <- n-1
dbgalat <- dbtotal-dbreg
df <- c(dbreg, dbgalat, dbtotal)
Mean_Square <- Sum_of_Square/df
model <- c("regresi", "galat", "total")
anreg <- data.frame(model, Sum_of_Square, df, Mean_Square)
names(anreg) <- c("Model", "Sum Of Square", "df", "Mean Square")
F_hit <- anreg$`Mean Square`[1]/anreg$`Mean Square`[2]
pf <- pf(F_hit, anreg$df[1], anreg$df[2], lower.tail = FALSE)
anreg
## Model Sum Of Square df Mean Square
## 1 regresi 89505833 9 9945092.54
## 2 galat 4912012 151 32529.88
## 3 total 94417845 160 590111.53
F_hit
## [1] 305.7218
pf
## [1] 3.508106e-92
print("Karena nilai F hitung adalah 305,7218 > 1,88 dimana Fhitung > F tabel maka Tolak H0, karena P-Value = 3.289071e-91 < alpha (0,05) maka Tolak H0 sehingga dapat disimpulkan variabel terikat (Y) terdapat hubungan dengan variabel bebas (X) ")
## [1] "Karena nilai F hitung adalah 305,7218 > 1,88 dimana Fhitung > F tabel maka Tolak H0, karena P-Value = 3.289071e-91 < alpha (0,05) maka Tolak H0 sehingga dapat disimpulkan variabel terikat (Y) terdapat hubungan dengan variabel bebas (X) "
H0 = Variabel X (tertentu) tidak mempengaruhi variabel Y
H1 = Variabel X (tertentu) mempengaruhi variabel Y
alpha = 0,05
var_cov <-anreg$`Mean Square`[2]*solve(t(x)%*%x)
sd <-rep(0,k)
for(i in 1:k){sd[i]<-sqrt(var_cov[i,i])}
t <- estimate/sd
p <- 2*pt(abs(t),anreg$df[2], lower.tail=FALSE)
t_tabel = qt(0.05/2, 151, lower.tail =FALSE)
t
## [,1]
## [1,] 9.629648
## [2,] -2.358725
## [3,] 6.528598
## [4,] 5.897125
## [5,] 2.179351
## [6,] 5.694796
## [7,] 4.314939
## [8,] 2.023742
## [9,] 1.742521
## [10,] -5.621558
t_tabel
## [1] 1.975799
# Sale
print("Untuk variabel Sale diperoleh nilai Thitung < Ttabel = -2,359 < 1,97580 maka Gagal Tolak H0, sehingga dapat disimpulkan bahwa secara parsial tidak terdapat hubungan antara Sale dengan Price." )
## [1] "Untuk variabel Sale diperoleh nilai Thitung < Ttabel = -2,359 < 1,97580 maka Gagal Tolak H0, sehingga dapat disimpulkan bahwa secara parsial tidak terdapat hubungan antara Sale dengan Price."
# ppi
print("Untuk variabel ppi diperoleh nilai Thitung > Ttabel = 6,529 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara ppi dengan Price." )
## [1] "Untuk variabel ppi diperoleh nilai Thitung > Ttabel = 6,529 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara ppi dengan Price."
# cpu.core
print("Untuk variabel cpu.core diperoleh nilai Thitung > Ttabel = 5,897 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara cpu.core dengan Price" )
## [1] "Untuk variabel cpu.core diperoleh nilai Thitung > Ttabel = 5,897 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara cpu.core dengan Price"
# cpu.freq
print("Untuk variabel cpu.freq diperoleh nilai Thitung > Ttabel = 2,179 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara cpu.freq dengan Price." )
## [1] "Untuk variabel cpu.freq diperoleh nilai Thitung > Ttabel = 2,179 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara cpu.freq dengan Price."
# internal.mem
print("Untuk variabel internal.mem diperoleh nilai Thitung > Ttabel = 5,695 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara internal.mem dengan Price" )
## [1] "Untuk variabel internal.mem diperoleh nilai Thitung > Ttabel = 5,695 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara internal.mem dengan Price"
# ram
print("Untuk variabel ram diperoleh nilai Thitung > Ttabel = 4, 315 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara ram dengan Price" )
## [1] "Untuk variabel ram diperoleh nilai Thitung > Ttabel = 4, 315 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara ram dengan Price"
# Front Cam
print("Untuk variabel Front.cam diperoleh nilai Thitung > Ttabel = 2,024 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara Front.cam dengan Price")
## [1] "Untuk variabel Front.cam diperoleh nilai Thitung > Ttabel = 2,024 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara Front.cam dengan Price"
# battery
print("Untuk variabel battery diperoleh nilai Thitung > Ttabel = 1,743 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara battery dengan Price" )
## [1] "Untuk variabel battery diperoleh nilai Thitung > Ttabel = 1,743 > 1,97580 maka Tolak H0, sehingga dapat disimpulkan bahwa secara parsial terdapat hubungan antara battery dengan Price"
# thickness
print("Untuk variabel thickness diperoleh nilai Thitung < Ttabel = -5,622 < 1,97580 maka Gagal Tolak H0, sehingga dapat disimpulkan bahwa secara parsial tidak terdapat hubungan antara thickness dengan Price" )
## [1] "Untuk variabel thickness diperoleh nilai Thitung < Ttabel = -5,622 < 1,97580 maka Gagal Tolak H0, sehingga dapat disimpulkan bahwa secara parsial tidak terdapat hubungan antara thickness dengan Price"
#pendeteksian multikolinieritas
library(car)
VIF <- vif(reg)
VIF
## Sale ppi cpu.core cpu.freq internal.mem ram
## 1.554903 3.463162 2.949009 3.042657 5.956606 8.756370
## Front_Cam battery thickness
## 2.618849 1.912607 2.532990
print("dari semua variabel (X) memliki nilai multikolinearitas dibawah 10 yang berarti tidak ada multikolinieritas")
## [1] "dari semua variabel (X) memliki nilai multikolinearitas dibawah 10 yang berarti tidak ada multikolinieritas"
#uji normalitas
H0 = galat menyebar normal H1 = galat tidak menyebar normal
sisa <- reg$residuals
shapiro <- shapiro.test(sisa)
shapiro
##
## Shapiro-Wilk normality test
##
## data: sisa
## W = 0.98787, p-value = 0.178
print("Nilai P-Value 0,178 > alpha(0,05) maka Gagal Tolak H0 berarti galat menyebar normal, sehingga asumsi normalitas galat masih terpenuhi")
## [1] "Nilai P-Value 0,178 > alpha(0,05) maka Gagal Tolak H0 berarti galat menyebar normal, sehingga asumsi normalitas galat masih terpenuhi"
#Visualisasi regresi
par(mfrow=c(2,2))
plot(reg)
residual = reg$residuals
residual
## 1 2 3 4 5 6
## -313.065039 246.476835 -76.359474 -60.763225 246.503951 -114.940601
## 7 8 9 10 11 12
## -174.674799 -114.913485 -60.681877 245.764386 -297.241034 104.217668
## 13 14 15 16 17 18
## 232.309962 38.659625 245.791502 -177.538418 53.447022 135.437133
## 19 20 21 22 23 24
## -177.484186 -174.484986 -297.105454 -285.758862 -146.803100 38.849438
## 25 26 27 28 29 30
## -286.324211 -355.015771 104.434596 135.599830 -354.988655 128.636824
## 31 32 33 34 35 36
## 53.691067 -146.694636 489.051266 -47.832022 8.097839 -47.777790
## 37 38 39 40 41 42
## -286.053050 -53.832623 228.321797 -285.379236 -53.778391 -236.610820
## 43 44 45 46 47 48
## 228.975186 -236.529472 -142.646956 -48.609096 8.341884 489.458007
## 49 50 51 52 53 54
## 229.056534 -59.099304 209.602961 -93.191500 -142.565607 202.026080
## 55 56 57 58 59 60
## 90.775008 228.565842 202.215893 91.100401 -48.148122 209.982586
## 61 62 63 64 65 66
## 264.781839 -82.057063 -92.540714 -87.978393 -58.285821 265.188580
## 67 68 69 70 71 72
## -81.813018 -311.292002 24.042958 -87.544535 24.097191 -61.967244
## 73 74 75 76 77 78
## -310.993725 -85.815304 331.634670 -61.777432 331.743134 -223.310908
## 79 80 81 82 83 84
## 95.281630 -9.212701 95.417211 -52.452729 -9.050005 85.125729
## 85 86 87 88 89 90
## -73.102492 -222.958399 -52.235800 85.342657 -172.810053 -172.294847
## 91 92 93 94 95 96
## -72.343242 -34.045086 -33.692577 26.284685 -97.382745 26.338917
## 97 98 99 100 101 102
## 35.921356 35.948472 109.793696 -96.460798 60.273708 -13.264969
## 103 104 105 106 107 108
## 110.254669 60.490636 213.524727 -12.939576 213.687424 -193.622928
## 109 110 111 112 113 114
## -193.297535 75.815087 -113.275390 5.764618 5.900198 -113.031345
## 115 116 117 118 119 120
## -121.295557 76.465873 294.686766 295.310436 -255.877918 208.020308
## 121 122 123 124 125 126
## 208.128772 -255.552525 135.927260 136.089957 -118.339903 72.108969
## 127 128 129 130 131 132
## 72.217433 -146.002879 -145.975763 -175.337563 18.565020 19.676780
## 133 134 135 136 137 138
## -173.493669 9.494210 9.928067 150.493120 152.174318 -61.356595
## 139 140 141 142 143 144
## 46.549427 47.471374 172.567656 173.923460 55.791824 57.256092
## 145 146 147 148 149 150
## 165.067205 167.263608 -115.382962 -114.921989 -19.123566 -53.817225
## 151 152 153 154 155 156
## -53.491832 -17.306788 387.388245 388.554237 -6.636731 -132.057519
## 157 158 159 160 161
## -125.820820 -304.082339 164.156754 -278.864379 161.157609
qqPlot(residual, distribution="norm",main= "Normal QQ Plot")
## [1] 48 33
#uji homogenitas
H0 = tidak terjadi heteroskesdastisitas H1 = terjadi heteroskesdastisitas
library(skedastic) # Uji Glejser dan Breuspagan
library(tidyselect) # Uji Glejser
glejser(reg)
## # A tibble: 1 × 4
## statistic p.value parameter alternative
## <dbl> <dbl> <dbl> <chr>
## 1 13.0 0.164 9 greater
print("Dari Uji Glejser didapatan nilai Pvalue = 0.1639055 > alpha(0,05) maka Gagal Tolak H0. Dapat disimpulkan bahwa tidak terdapat heteroskesdastisitas" )
## [1] "Dari Uji Glejser didapatan nilai Pvalue = 0.1639055 > alpha(0,05) maka Gagal Tolak H0. Dapat disimpulkan bahwa tidak terdapat heteroskesdastisitas"
#uji Non Autokorelasi
H0 = tidak terjadi kasus autokorelasi H1 = terjadi kasus autokorelasi
library(lmtest)
lmtest::dwtest(reg, alternative = 'two.sided')
##
## Durbin-Watson test
##
## data: reg
## DW = 1.9948, p-value = 0.8359
## alternative hypothesis: true autocorrelation is not 0
print("Nilai Pvalue = 0.8359 > alpha(0,05) maka Gagal Tolak H0, dapat disimpulkan bahwa tidak terjadi kasus autokorelasi")
## [1] "Nilai Pvalue = 0.8359 > alpha(0,05) maka Gagal Tolak H0, dapat disimpulkan bahwa tidak terjadi kasus autokorelasi"
R2 <- anreg$`Sum Of Square`[1]/anreg$`Sum Of Square`[3]
R2
## [1] 0.9479758
Tabel=data.frame(AIC,R2)
Tabel
## AIC R2
## 1 2141.35 0.9479758
print("Sehingga pada hasil output AIC dan R2 untuk ukuran kebaikan model, menunjukkan AIC sebesar 2141.350 dan R2 sebesar 0.9479758 berarti kemampuan variabel (X) menjelaskan variabel respon (Y) sebesar 94,79758 % serta sisanya sebesar 5,20242% (100%- 94,79758 %) dipengaruhi variabel lain yang tidak digunakan dalam penelitian ini.")
## [1] "Sehingga pada hasil output AIC dan R2 untuk ukuran kebaikan model, menunjukkan AIC sebesar 2141.350 dan R2 sebesar 0.9479758 berarti kemampuan variabel (X) menjelaskan variabel respon (Y) sebesar 94,79758 % serta sisanya sebesar 5,20242% (100%- 94,79758 %) dipengaruhi variabel lain yang tidak digunakan dalam penelitian ini."