1. Library
library(car)
## Warning: package 'car' was built under R version 4.6.1
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.6.1
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.6.1
## corrplot 0.95 loaded
library(readxl)
library(MASS)
## Warning: package 'MASS' was built under R version 4.6.1
# Opsi C: Langsung mendefinisikan path file lengkap
file_excel <- "C:/Users/user/Downloads/Student Productivity & Digital Distraction Dataset.xlsx"
if (!file.exists(file_excel)) {
stop("File Excel tidak ditemukan. Periksa kembali path file Anda.")
}
# Membaca sheet pertama dari file Excel
sheet_names <- excel_sheets(file_excel[1])
cat("Sheet yang tersedia:", sheet_names, "\n")
## Sheet yang tersedia: Data Produktivitas
data <- read_excel(file_excel[1], sheet = sheet_names[1])
# Konversi ke dataframe standar R
data <- as.data.frame(data)
# Informasi data
cat("File yang digunakan:", basename(file_excel[1]), "\n")
## File yang digunakan: Student Productivity & Digital Distraction Dataset.xlsx
cat("Jumlah baris:", nrow(data), "\n")
## Jumlah baris: 5000
cat("Jumlah kolom:", ncol(data), "\n")
## Jumlah kolom: 8
head(data)
## Student_ID Age Study_Hours_Per_Week Social_Media_Hours_Per_Day
## 1 1 24 17.6 3.7
## 2 2 21 18.2 2.5
## 3 3 22 17.8 3.3
## 4 4 24 15.4 3.8
## 5 5 20 14.0 2.1
## 6 6 25 14.2 2.9
## Sleep_Hours_Per_Night AI_Tool_Usage_Frequency Stress_Level GPA
## 1 5.6 2 6 2.77
## 2 5.8 1 5 3.55
## 3 6.0 1 4 3.13
## 4 7.1 2 4 3.23
## 5 7.1 3 3 3.19
## 6 8.9 2 2 2.77
str(data)
## 'data.frame': 5000 obs. of 8 variables:
## $ Student_ID : num 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : num 24 21 22 24 20 25 22 22 24 19 ...
## $ Study_Hours_Per_Week : num 17.6 18.2 17.8 15.4 14 14.2 14 20.7 18 0.3 ...
## $ Social_Media_Hours_Per_Day: num 3.7 2.5 3.3 3.8 2.1 2.9 2.9 4.2 1.4 2.9 ...
## $ Sleep_Hours_Per_Night : num 5.6 5.8 6 7.1 7.1 8.9 7.5 3.8 7.3 5.3 ...
## $ AI_Tool_Usage_Frequency : num 2 1 1 2 3 2 3 1 2 1 ...
## $ Stress_Level : num 6 5 4 4 3 2 4 5 4 1 ...
## $ GPA : num 2.77 3.55 3.13 3.23 3.19 2.77 3.51 3.04 3.83 2.08 ...
names(data)
## [1] "Student_ID" "Age"
## [3] "Study_Hours_Per_Week" "Social_Media_Hours_Per_Day"
## [5] "Sleep_Hours_Per_Night" "AI_Tool_Usage_Frequency"
## [7] "Stress_Level" "GPA"
dim(data)
## [1] 5000 8
summary(data)
## Student_ID Age Study_Hours_Per_Week Social_Media_Hours_Per_Day
## Min. : 1 Min. :18.00 Min. : 0.00 Min. :0.000
## 1st Qu.:1251 1st Qu.:19.00 1st Qu.:11.47 1st Qu.:2.000
## Median :2500 Median :21.00 Median :14.90 Median :3.000
## Mean :2500 Mean :21.47 Mean :14.86 Mean :3.012
## 3rd Qu.:3750 3rd Qu.:23.00 3rd Qu.:18.30 3rd Qu.:4.000
## Max. :5000 Max. :25.00 Max. :34.60 Max. :8.000
## Sleep_Hours_Per_Night AI_Tool_Usage_Frequency Stress_Level GPA
## Min. : 3.000 Min. :0.000 Min. :1.000 Min. :1.540
## 1st Qu.: 6.200 1st Qu.:1.000 1st Qu.:3.000 1st Qu.:2.780
## Median : 7.000 Median :2.000 Median :4.000 Median :3.080
## Mean : 7.025 Mean :1.914 Mean :3.676 Mean :3.076
## 3rd Qu.: 7.800 3rd Qu.:3.000 3rd Qu.:5.000 3rd Qu.:3.370
## Max. :10.000 Max. :3.000 Max. :8.000 Max. :4.000
colSums(is.na(data))
## Student_ID Age
## 0 0
## Study_Hours_Per_Week Social_Media_Hours_Per_Day
## 0 0
## Sleep_Hours_Per_Night AI_Tool_Usage_Frequency
## 0 0
## Stress_Level GPA
## 0 0
cat("1. STATISTIK DESKRIPTIF\n")
## 1. STATISTIK DESKRIPTIF
# Memilih variabel numerik yang digunakan dalam model regresi
data_korelasi <- data.frame(
GPA = data$GPA,
Study_Hours = data$Study_Hours_Per_Week,
Social_Media = data$Social_Media_Hours_Per_Day,
Sleep_Hours = data$Sleep_Hours_Per_Night,
AI_Usage = data$AI_Tool_Usage_Frequency,
Stress_Level = data$Stress_Level
)
# Matriks korelasi
cat("\nMatriks Korelasi:\n")
##
## Matriks Korelasi:
cor_matrix <- cor(data_korelasi)
print(round(cor_matrix, 3))
## GPA Study_Hours Social_Media Sleep_Hours AI_Usage Stress_Level
## GPA 1.000 0.575 -0.333 0.102 0.312 0.195
## Study_Hours 0.575 1.000 -0.014 -0.014 -0.011 0.416
## Social_Media -0.333 -0.014 1.000 0.017 0.006 -0.003
## Sleep_Hours 0.102 -0.014 0.017 1.000 0.006 -0.380
## AI_Usage 0.312 -0.011 0.006 0.006 1.000 0.010
## Stress_Level 0.195 0.416 -0.003 -0.380 0.010 1.000
# Visualisasi matriks korelasi
corrplot(
cor_matrix,
method = "color",
type = "upper",
col = colorRampPalette(c("blue", "white", "red"))(200),
addCoef.col = "darkblue",
tl.col = "darkblue",
tl.srt = 45,
tl.cex = 0.8,
title = "Matriks Korelasi Antar Variabel",
mar = c(0, 0, 2, 0)
)

# Scatter plot matrix
pairs(
data_korelasi,
main = "Scatter Plot Matrix",
pch = 19
)

cat("\n\n")
cat("3. ESTIMASI MODEL MULTIPLE LINEAR REGRESSION\n")
## 3. ESTIMASI MODEL MULTIPLE LINEAR REGRESSION
cat("\n")
# Fit model MLR dengan GPA sebagai variabel dependen
model <- lm(
GPA ~ Study_Hours_Per_Week + Social_Media_Hours_Per_Day +
Sleep_Hours_Per_Night + AI_Tool_Usage_Frequency + Stress_Level,
data = data
)
# Ringkasan koefisien regresi
cat("\nKoefisien Regresi:\n")
##
## Koefisien Regresi:
coef_df <- data.frame(
Variabel = names(coef(model)),
Koefisien = round(coef(model), 4),
Std_Error = round(summary(model)$coefficients[, 2], 4),
t_value = round(summary(model)$coefficients[, 3], 4),
p_value = round(summary(model)$coefficients[, 4], 4)
)
print(coef_df, row.names = FALSE)
## Variabel Koefisien Std_Error t_value p_value
## (Intercept) 2.0798 0.0353 58.8640 0.0000
## Study_Hours_Per_Week 0.0496 0.0009 54.6278 0.0000
## Social_Media_Hours_Per_Day -0.0971 0.0028 -34.6814 0.0000
## Sleep_Hours_Per_Night 0.0399 0.0037 10.6501 0.0000
## AI_Tool_Usage_Frequency 0.1468 0.0044 33.6365 0.0000
## Stress_Level -0.0027 0.0040 -0.6852 0.4932
# Interval kepercayaan 95%
cat("\nInterval Kepercayaan 95%:\n")
##
## Interval Kepercayaan 95%:
ci <- round(confint(model, level = 0.95), 4)
colnames(ci) <- c("Batas_Bawah", "Batas_Atas")
print(ci)
## Batas_Bawah Batas_Atas
## (Intercept) 2.0105 2.1490
## Study_Hours_Per_Week 0.0478 0.0514
## Social_Media_Hours_Per_Day -0.1026 -0.0916
## Sleep_Hours_Per_Night 0.0326 0.0472
## AI_Tool_Usage_Frequency 0.1382 0.1554
## Stress_Level -0.0105 0.0050
cat("4. UJI SIGNIFIKANSI SIMULTAN (UJI F)\n")
## 4. UJI SIGNIFIKANSI SIMULTAN (UJI F)
f_stat <- summary(model)$fstatistic
f_value <- f_stat[1]
df1 <- f_stat[2]
df2 <- f_stat[3]
f_pvalue <- pf(f_value, df1, df2, lower.tail = FALSE)
cat("\nHipotesis:\n")
##
## Hipotesis:
cat("H0: Seluruh koefisien beta = 0 (Model tidak signifikan)\n")
## H0: Seluruh koefisien beta = 0 (Model tidak signifikan)
cat("H1: Minimal ada satu beta j != 0 (Model signifikan)\n")
## H1: Minimal ada satu beta j != 0 (Model signifikan)
cat("\nHasil Uji F:\n")
##
## Hasil Uji F:
cat("F-statistic:", round(f_value, 4), "\n")
## F-statistic: 1225.572
cat("df1:", df1, "\n")
## df1: 5
cat("df2:", df2, "\n")
## df2: 4994
cat("p-value:", format(f_pvalue, scientific = TRUE), "\n")
## p-value: 0e+00
if (f_pvalue < 0.05) {
cat("Kesimpulan: Tolak H0 -> Model signifikan pada alpha = 5%\n")
} else {
cat("Kesimpulan: Gagal Tolak H0 -> Model tidak signifikan\n")
}
## Kesimpulan: Tolak H0 -> Model signifikan pada alpha = 5%
cat("5. UJI SIGNIFIKANSI PARSIAL (UJI t)\n")
## 5. UJI SIGNIFIKANSI PARSIAL (UJI t)
t_test <- summary(model)$coefficients
t_table <- data.frame(
Variabel = rownames(t_test),
Koefisien = round(t_test[, 1], 4),
t_value = round(t_test[, 3], 4),
p_value = round(t_test[, 4], 4)
)
print(t_table, row.names = FALSE)
## Variabel Koefisien t_value p_value
## (Intercept) 2.0798 58.8640 0.0000
## Study_Hours_Per_Week 0.0496 54.6278 0.0000
## Social_Media_Hours_Per_Day -0.0971 -34.6814 0.0000
## Sleep_Hours_Per_Night 0.0399 10.6501 0.0000
## AI_Tool_Usage_Frequency 0.1468 33.6365 0.0000
## Stress_Level -0.0027 -0.6852 0.4932
cat("\nKeputusan pada alpha = 5%:\n")
##
## Keputusan pada alpha = 5%:
for (i in 2:nrow(t_test)) {
if (t_test[i, 4] < 0.05) {
cat(rownames(t_test)[i], ": Tolak H0 -> signifikan\n")
} else {
cat(rownames(t_test)[i], ": Gagal Tolak H0 -> tidak signifikan\n")
}
}
## Study_Hours_Per_Week : Tolak H0 -> signifikan
## Social_Media_Hours_Per_Day : Tolak H0 -> signifikan
## Sleep_Hours_Per_Night : Tolak H0 -> signifikan
## AI_Tool_Usage_Frequency : Tolak H0 -> signifikan
## Stress_Level : Gagal Tolak H0 -> tidak signifikan
cat("6. KOEFISIEN DETERMINASI\n")
## 6. KOEFISIEN DETERMINASI
r_squared <- summary(model)$r.squared
adj_r_squared <- summary(model)$adj.r.squared
cat("\nR-squared:", round(r_squared, 4), "\n")
##
## R-squared: 0.551
cat("Adjusted R-squared:", round(adj_r_squared, 4), "\n")
## Adjusted R-squared: 0.5505
cat("7. UJI ASUMSI RESIDUAL\n")
## 7. UJI ASUMSI RESIDUAL
# 7.1 Normalitas (Menggunakan sampel acak jika N besar agar Shapiro-Wilk tidak error)
set.seed(123)
res_sample <- residuals(model)
if(length(res_sample) > 5000) {
res_sample <- sample(res_sample, 5000)
}
shapiro_test <- shapiro.test(res_sample)
cat("Shapiro-Wilk W =", round(shapiro_test$statistic, 4), "p-value =", format(shapiro_test$p.value, scientific = TRUE), "\n")
## Shapiro-Wilk W = 0.9994 p-value = 9.327904e-02
# 7.2 Heteroskedastisitas (Breusch-Pagan)
bp_test <- bptest(model)
cat("Breusch-Pagan BP =", round(bp_test$statistic, 4), "p-value =", format(bp_test$p.value, scientific = TRUE), "\n")
## Breusch-Pagan BP = 8.341 p-value = 1.384182e-01
# 7.3 Autokorelasi (Durbin-Watson)
dw_test <- dwtest(model)
cat("Durbin-Watson DW =", round(dw_test$statistic, 4), "p-value =", format(dw_test$p.value, scientific = TRUE), "\n")
## Durbin-Watson DW = 2.0128 p-value = 6.749756e-01
# 7.4 Multikolinearitas (VIF)
vif_value <- vif(model)
print(round(vif_value, 4))
## Study_Hours_Per_Week Social_Media_Hours_Per_Day
## 1.2463 1.0006
## Sleep_Hours_Per_Night AI_Tool_Usage_Frequency
## 1.2046 1.0006
## Stress_Level
## 1.4560
stepwise_model <- step(
model,
direction = "both",
trace = 0
)
cat("\nModel hasil Stepwise Selection:\n")
##
## Model hasil Stepwise Selection:
print(formula(stepwise_model))
## GPA ~ Study_Hours_Per_Week + Social_Media_Hours_Per_Day + Sleep_Hours_Per_Night +
## AI_Tool_Usage_Frequency
summary(stepwise_model)
##
## Call:
## lm(formula = GPA ~ Study_Hours_Per_Week + Social_Media_Hours_Per_Day +
## Sleep_Hours_Per_Night + AI_Tool_Usage_Frequency, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.06467 -0.19955 0.00269 0.19452 1.08362
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.0666664 0.0296989 69.59 <2e-16 ***
## Study_Hours_Per_Week 0.0493422 0.0008138 60.63 <2e-16 ***
## Social_Media_Hours_Per_Day -0.0971079 0.0027991 -34.69 <2e-16 ***
## Sleep_Hours_Per_Night 0.0409551 0.0034140 12.00 <2e-16 ***
## AI_Tool_Usage_Frequency 0.1467457 0.0043634 33.63 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2894 on 4995 degrees of freedom
## Multiple R-squared: 0.5509, Adjusted R-squared: 0.5506
## F-statistic: 1532 on 4 and 4995 DF, p-value: < 2.2e-16