library(stats) 
library(car) 
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
library(lmtest) 
## Warning: package 'lmtest' was built under R version 4.5.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(zoo) 

# Memanggil Data 
data=read.table(file.choose(),header=TRUE) 
data 
summary(data) 
##        Y               X1              X2    
##  Min.   :59.00   Min.   : 90.0   Min.   :68  
##  1st Qu.:65.00   1st Qu.:102.5   1st Qu.:77  
##  Median :70.00   Median :115.0   Median :78  
##  Mean   :70.53   Mean   :115.0   Mean   :78  
##  3rd Qu.:75.50   3rd Qu.:127.0   3rd Qu.:79  
##  Max.   :85.00   Max.   :140.0   Max.   :88
# Scatterplot per variabel 
plot(data$X1,data$Y) 
abline(lm(data$Y~data$X1),col="pink",lwd=3) 

plot(data$X2,data$Y) 
abline(lm(data$Y~data$X2),col="pink",lwd=3) 

# Model Awal 
reg=lm(formula=Y~X1+X2,data=data) 
summary(reg) 
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0542 -0.8326  0.0654  1.4173  2.8417 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.69711    9.43046   0.074    0.942    
## X1           0.42708    0.05444   7.846 4.59e-06 ***
## X2           0.26567    0.16869   1.575    0.141    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.019 on 12 degrees of freedom
## Multiple R-squared:  0.9404, Adjusted R-squared:  0.9304 
## F-statistic: 94.59 on 2 and 12 DF,  p-value: 4.504e-08
# Pendeteksian Multikolinieritas 
vif(reg) 
##       X1       X2 
## 2.290752 2.290752
# Pengujian Asumsi 
bptest(reg,varformula=~fitted.values(reg),studentize=FALSE) 
## 
##  Breusch-Pagan test
## 
## data:  reg
## BP = 0.032304, df = 1, p-value = 0.8574
dwtest(reg,alternative='two.sided') 
## 
##  Durbin-Watson test
## 
## data:  reg
## DW = 2.0697, p-value = 0.7751
## alternative hypothesis: true autocorrelation is not 0
shapiro.test(resid(reg))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(reg)
## W = 0.96508, p-value = 0.7797
#Mengubah data menjadi matriks
n<-nrow(data)
n
## [1] 15
k<-ncol(data)
k
## [1] 3
#Membuat matriks
x0<-as.matrix(rep(1,n))
x1<-as.matrix(data$X1)
x2<-as.matrix(data$X2)
X<-as.matrix(cbind(x0,x1,x2))
X
##       [,1] [,2] [,3]
##  [1,]    1   90   70
##  [2,]    1   97   77
##  [3,]    1   97   77
##  [4,]    1   99   77
##  [5,]    1  106   76
##  [6,]    1  110   68
##  [7,]    1  115   78
##  [8,]    1  115   78
##  [9,]    1  118   79
## [10,]    1  122   80
## [11,]    1  127   79
## [12,]    1  127   79
## [13,]    1  127   79
## [14,]    1  135   85
## [15,]    1  140   88
Y<-as.matrix(data$Y)
Y
##       [,1]
##  [1,]   59
##  [2,]   60
##  [3,]   62
##  [4,]   65
##  [5,]   69
##  [6,]   65
##  [7,]   69
##  [8,]   70
##  [9,]   74
## [10,]   70
## [11,]   75
## [12,]   76
## [13,]   78
## [14,]   81
## [15,]   85
#Penaksiran parameter dengan matriks
x.trans<-t(X)
a<-x.trans %*% X
a
##      [,1]   [,2]   [,3]
## [1,]   15   1725   1170
## [2,] 1725 201525 135313
## [3,] 1170 135313  91588
a.inv<-solve(a)
a.inv
##            [,1]          [,2]         [,3]
## [1,] 21.8261023  0.0483204037 -0.350208744
## [2,]  0.0483204  0.0007272227 -0.001691680
## [3,] -0.3502087 -0.0016916797  0.006983999
b<-x.trans %*% Y
b
##        [,1]
## [1,]   1058
## [2,] 123218
## [3,]  82937
b.topi<-a.inv %*% b
b.topi
##           [,1]
## [1,] 0.6971070
## [2,] 0.4270771
## [3,] 0.2656713
#Membuat nama koefisien
var_names<-c("intercept","Beta_1","Beta_2")

#Membuat tabel hasil
hasil<-data.frame(
  Estimate=as.numeric(b.topi),
  row.names = var_names
)
print(hasil)
##            Estimate
## intercept 0.6971070
## Beta_1    0.4270771
## Beta_2    0.2656713
model=lm(Y~X1+X2,data=data)
summary(model)
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0542 -0.8326  0.0654  1.4173  2.8417 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.69711    9.43046   0.074    0.942    
## X1           0.42708    0.05444   7.846 4.59e-06 ***
## X2           0.26567    0.16869   1.575    0.141    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.019 on 12 degrees of freedom
## Multiple R-squared:  0.9404, Adjusted R-squared:  0.9304 
## F-statistic: 94.59 on 2 and 12 DF,  p-value: 4.504e-08
#Koefisien regresi
Y.topi<-X %*% b.topi
Y.topi
##           [,1]
##  [1,] 57.73104
##  [2,] 62.58027
##  [3,] 62.58027
##  [4,] 63.43443
##  [5,] 66.15830
##  [6,] 65.74123
##  [7,] 70.53333
##  [8,] 70.53333
##  [9,] 72.08024
## [10,] 74.05422
## [11,] 75.92393
## [12,] 75.92393
## [13,] 75.92393
## [14,] 80.93457
## [15,] 83.86697
JKT <- sum (( Y-mean(Y)) ^2)
JKT
## [1] 819.7333
JKR <- sum (( Y.topi-mean(Y)) ^2)
JKR
## [1] 770.8376
R2<- JKR / JKT
R2
## [1] 0.9403516
#Uji F 
F_hitung <- (R2/(k-1)) / ((1-R2)/(n-k))
F_hitung
## [1] 94.58948
#f tabel
df1 <- k-1
df2 <- n-k

f_tabel <- qf(0.05, df1, df2, lower.tail=F)
f_tabel
## [1] 3.885294