#PACKAGE
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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
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
#MEMANGGIL DATA
data=read.table(file.choose(), header=T)
data
##     Y  X1 X2
## 1  59  90 70
## 2  60  97 77
## 3  62  97 77
## 4  65  99 77
## 5  69 106 76
## 6  65 110 68
## 7  69 115 78
## 8  70 115 78
## 9  74 118 79
## 10 70 122 80
## 11 75 127 79
## 12 76 127 79
## 13 78 127 79
## 14 81 135 85
## 15 85 140 88
#SCATTER PLOT Y (Hasil belajar mahasiswa) DAN X1 (Tingkat IQ)
ggplot(data, aes(x = X1, y = Y)) +
  geom_point(color = "hotpink", size = 2) +
  geom_smooth(method = "lm", se = FALSE,
              color = "springgreen4", linewidth = 1.2) +
  ggtitle("Scatter Plot Antara Tingkat IQ dan Hasil belajar") +
  ylab("Hasil belajar mahasiswa") +
  xlab("Tingkat IQ") +
  theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula = 'y ~ x'

#SCATTER PLOT Y (Hasil belajar mahasiswa) DAN X2 (Motivasi)
ggplot(data, aes(x = X2, y = Y)) +
  geom_point(color = "hotpink", size = 2) +
  geom_smooth(method = "lm", se = FALSE,
              color = "springgreen4", linewidth = 1.2) +
  ggtitle("Scatter Plot Antara Motivasi dan Hasil belajar") +
  ylab("Hasil belajar mahasiswa") +
  xlab("Motivasi") +
  theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula = 'y ~ x'

#REGRESI LINIER BERGANDA
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
#PENDETEKSIAN MULTIKOLINIERITAS
#<10
vif(model)
##       X1       X2 
## 2.290752 2.290752
#PENGUJIAN ASUMSI
bptest(model,varformula=~fitted.values(model), studentize=FALSE)
## 
##  Breusch-Pagan test
## 
## data:  model
## BP = 0.032304, df = 1, p-value = 0.8574
dwtest(model,alternative='two.sided')
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 2.0697, p-value = 0.7751
## alternative hypothesis: true autocorrelation is not 0
shapiro.test(resid(model))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(model)
## 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 determinasi 
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 dengan matriks
F_hitung<-(R2/(k-1))/((1-R2)/(n-k))
F_hitung
## [1] 94.58948
#Nilai f tabel
df1<-k-1
df2<-n-k
f_tabel<-qf(0.05,df1,df2,lower.tail = F)
f_tabel      
## [1] 3.885294