Analisis Regresi Linear Sederhana
Body Weight vs Metabolic Rate
Dataset yang kita gunakan untuk analisis regresi sederhana kali ini adalah dataset rmr. Dataset rmr adalah data yang berisi kolom berat badan (body weight) dan kolom tingkat metabolisme (metabolic rate). Kita akan menganalisis apakah ada hubungan linear antara berat badan (X) dengan tingkat metabolisme (Y)
Kalian dapat mendownload dataset nya di sini:
## body.weight metabolic.rate
## 1 49.9 1079
## 2 50.8 1146
## 3 51.8 1115
## 4 52.6 1161
## 5 57.6 1325
## 6 61.4 1351
Pada dataset terdapat dua variabel, yaitu Body Weight dan Metabolic Rate, di mana;
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Semua baris TRUE, yang berarti semua baris lengkap alias tidak ada baris yang berisi data hilang (NA)
plot(rmr$body.weight,
rmr$metabolic.rate,
xlab="Body Weight",
ylab="Metabolic Rate",
pch=21,
main = "Body Weight vs Metabolic Rate",
panel.first = rect(par("usr")[1], #sumbu x kiri
par("usr")[3], #sumbu y bawah
par("usr")[2], #sumbu x kanan
par("usr")[4], #sumbu y atas
col = "lightpink"),
bg = "lightblue",
col = "red2",
col.main = "lightpink3",
col.lab = "lightblue3",
col.axis = "red2")rmr$xdif <- rmr$body.weight-mean(rmr$body.weight) #Xi - X mean
rmr$ydif <- rmr$metabolic.rate-mean(rmr$metabolic.rate) #Yi - Y mean
rmr$crp <- rmr$xdif * rmr$ydif #(Xi - X mean)(Yi - Y mean)
rmr$xsq <- rmr$xdif^2 #(Xi - X mean)^2
head(rmr)## body.weight metabolic.rate xdif ydif crp xsq
## 1 49.9 1079 -24.97955 -260.84091 6515.6873 623.9777
## 2 50.8 1146 -24.07955 -193.84091 4667.6010 579.8245
## 3 51.8 1115 -23.07955 -224.84091 5189.2260 532.6654
## 4 52.6 1161 -22.27955 -178.84091 3984.4942 496.3781
## 5 57.6 1325 -17.27955 -14.84091 256.4442 298.5827
## 6 61.4 1351 -13.47955 11.15909 -150.4195 181.6981
## [1] 7.059528
## [1] 811.2267
persamaan_regresi_dugaan <- cat("persamaan regresi dugaan dari data tersebut adalah :", "\n","y =", b0,"+", b1,"x")## persamaan regresi dugaan dari data tersebut adalah :
## y = 811.2267 + 7.059528 x
##
## Call:
## lm(formula = metabolic.rate ~ body.weight, data = rmr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -245.74 -113.99 -32.05 104.96 484.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 811.2267 76.9755 10.539 2.29e-13 ***
## body.weight 7.0595 0.9776 7.221 7.03e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 157.9 on 42 degrees of freedom
## Multiple R-squared: 0.5539, Adjusted R-squared: 0.5433
## F-statistic: 52.15 on 1 and 42 DF, p-value: 7.025e-09
Estimasi parameter regresi nya :
##
## Call:
## lm(formula = metabolic.rate ~ body.weight, data = rmr)
##
## Coefficients:
## (Intercept) body.weight
## 811.23 7.06
persamaan_regresi_dugaan <- cat("persamaan regresi dugaan dari data tersebut adalah :", "\n","y =", regresi_rmr$coefficients[1],"+", regresi_rmr$coefficients[2],"x")## persamaan regresi dugaan dari data tersebut adalah :
## y = 811.2267 + 7.059528 x
rmr$ytopi <- regresi_rmr$fitted.values #Metabolic Rate dugaan dari persamaan regresi dugaan yang didapat
rmr$Galat <- regresi_rmr$residuals #selisih antara nilai aktual (data pengamatan) dan nilai prediksi yang dihasilkan oleh model regresi
head(rmr)## body.weight metabolic.rate xdif ydif crp xsq ytopi
## 1 49.9 1079 -24.97955 -260.84091 6515.6873 623.9777 1163.497
## 2 50.8 1146 -24.07955 -193.84091 4667.6010 579.8245 1169.851
## 3 51.8 1115 -23.07955 -224.84091 5189.2260 532.6654 1176.910
## 4 52.6 1161 -22.27955 -178.84091 3984.4942 496.3781 1182.558
## 5 57.6 1325 -17.27955 -14.84091 256.4442 298.5827 1217.855
## 6 61.4 1351 -13.47955 11.15909 -150.4195 181.6981 1244.682
## Galat
## 1 -84.49711
## 2 -23.85069
## 3 -61.91022
## 4 -21.55784
## 5 107.14452
## 6 106.31832
## [1] 1300241
## [1] 1047231
JKT <- JKG + JKR #Jumlah Kuadrat Total
n <- nrow(rmr)
df_regesi <- 1 #Derajat bebas regresi
df_galat <- n - 2 #Derajat bebas galat
KTR <- JKR / df_regesi #Kuadrat Tengah Regresi
KTR## [1] 1300241
## [1] 24934.06
## [1] 52.14718
## Analysis of Variance Table
##
## Response: metabolic.rate
## Df Sum Sq Mean Sq F value Pr(>F)
## body.weight 1 1300241 1300241 52.147 7.025e-09 ***
## Residuals 42 1047231 24934
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Loading required package: car
## Loading required package: carData
## Analysis of Variance Table
##
## Response: metabolic.rate
## Df Sum Sq Mean Sq F value Pr(>F)
## body.weight 1 1300241 1300241 45.7825 0.002489 **
## Residuals 42 1047231 24934
## Lack of fit 38 933629 24569 0.8651 0.654551
## Pure Error 4 113601 28400
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] 0.8651009
## [1] 44
## [1] 40
## [1] 13.76001
if (Fhitung > Ftabel) {
print("H0 di tolak, model regresi linear tidak cocok digunakan.")
} else{
print("H0 diterima, model regresi linear cocok digunakan.")
}## [1] "H0 diterima, model regresi linear cocok digunakan."
Pada taraf signifikan 0.01 tidak terdapat bukti yang cukup untuk menyatakan ada ketidakpasan model regresi linear dengan data sehingga modle regresi linear cocok untuk digunakan
plot(regresi_rmr$fitted.values,
regresi_rmr$residuals,
xlab="Fiitted Value",
ylab="Residuals",
pch=21,
main = "Plot Uji Asumsi Rata-rata Galat bernilai nol",
panel.first = rect(par("usr")[1], #sumbu x kiri
par("usr")[3], #sumbu y bawah
par("usr")[2], #sumbu x kanan
par("usr")[4], #sumbu y atas
col = "lightpink"),
bg = "lightblue",
col = "red2",
col.main = "lightpink3",
col.lab = "lightblue3",
col.axis = "red2")
abline(h = 0,lty = 2, col="red2")Berdasarkan plot antara fitted value vs residual, terlihat bahwa titik-titik residual menyebar secara acak di sekitar garis nol dan tidak membentuk pola tertentu. Sehingga asumsi rata-rata galat bernilai nol telah terpenuhi.
## body.weight metabolic.rate xdif ydif crp xsq ytopi
## 1 49.9 1079 -24.97955 -260.84091 6515.6873 623.9777 1163.497
## 2 50.8 1146 -24.07955 -193.84091 4667.6010 579.8245 1169.851
## 3 51.8 1115 -23.07955 -224.84091 5189.2260 532.6654 1176.910
## 4 52.6 1161 -22.27955 -178.84091 3984.4942 496.3781 1182.558
## 5 57.6 1325 -17.27955 -14.84091 256.4442 298.5827 1217.855
## 6 61.4 1351 -13.47955 11.15909 -150.4195 181.6981 1244.682
## Galat Run
## 1 -84.49711 1
## 2 -23.85069 2
## 3 -61.91022 3
## 4 -21.55784 4
## 5 107.14452 5
## 6 106.31832 6
plot(rmr$Run,
regresi_rmr$residuals,
xlab="Run",
ylab="Residuals",
type = "l",
main = "Plot Uji Asumsi Galat Saling Bebas",
panel.first = rect(par("usr")[1], #sumbu x kiri
par("usr")[3], #sumbu y bawah
par("usr")[2], #sumbu x kanan
par("usr")[4], #sumbu y atas
col = "lightpink"),
col = "red2",
col.main = "lightpink3",
col.lab = "lightblue3",
col.axis = "red2")Berdasarkan plot antara urutan pengamatan vs residual, terlihat bahwa residual berfluktuasi secara acak tanpa membentuk pola tertentu seperti tren atau siklus. Sehingga asumsi galat saling bebas terpenuhi.
##
## Shapiro-Wilk normality test
##
## data: regresi_rmr$residuals
## W = 0.95657, p-value = 0.09681
Berdasarkan Normal Q-Q plot, terlihat bahwa titik-titik residual cenderung mengikuti garis diagonal. Selain itu, hasil uji Shapiro-Wilk diperoleh p-value sebesar 0.09681 (> 0.05), sehingga asumsi normalitas galat terpenuhi.
plot(regresi_rmr$fitted.values,
regresi_rmr$residuals,
xlab="Nilai Dugaan",
ylab="Residual",
main = "Plot Uji Ragam Galat Konstan",
panel.first = rect(par("usr")[1], #sumbu x kiri
par("usr")[3], #sumbu y bawah
par("usr")[2], #sumbu x kanan
par("usr")[4], #sumbu y atas
col = "lightpink"),
col = "red2",
col.main = "lightpink3",
col.lab = "lightblue3",
col.axis = "red2")
abline(h=0,lty=2,col="red2")Berdasarkan plot antara nilai dugaan (fitted values) vs residual, terlihat bahwa titik-titik residual menyebar secara acak di atas dan di bawah garis nol serta tidak membentuk pola tertentu seperti pola menyempit atau melebar. Sehingga asumsi ragam galat konstan terpenuhi.
##
## Call:
## lm(formula = metabolic.rate ~ body.weight, data = rmr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -245.74 -113.99 -32.05 104.96 484.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 811.2267 76.9755 10.539 2.29e-13 ***
## body.weight 7.0595 0.9776 7.221 7.03e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 157.9 on 42 degrees of freedom
## Multiple R-squared: 0.5539, Adjusted R-squared: 0.5433
## F-statistic: 52.15 on 1 and 42 DF, p-value: 7.025e-09
## [1] 0.55389
Koefisien determinasi, \(R^2\) = 0.5539 berarti 55.39% keragaman dari metabolic rate dapat dijelaskan oleh keragaman body weight.