# Import data set
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
phone_data <- read_excel(file.choose())
# Convert grouping variables to factors
phone_data$Gender <- as.factor(phone_data$Gender)
phone_data$Parental_Control <- as.factor(phone_data$Parental_Control)
# Remove missing/blank Gender values
gender_data <- phone_data[
!is.na(phone_data$Gender) &
trimws(as.character(phone_data$Gender)) != "",
]
# Create Gender groups
gender_groups <- split(
gender_data,
gender_data$Gender
)
# Gender group names
gender_levels <- names(gender_groups)
# Display Gender groups
print(gender_levels)
## [1] "Female" "Male" "Other"
# Display number of observations per Gender
print(table(gender_data$Gender))
##
## Female Male Other
## 1007 1016 977
# Assigning Continuous Variables
continuous_vars <- c( "Age", "Daily_Usage_Hours", "Sleep_Hours", "Academic_Performance", "Social_Interactions", "Exercise_Hours", "Anxiety_Level", "Depression_Level", "Self_Esteem", "Screen_Time_Before_Bed", "Phone_Checks_Per_Day", "Apps_Used_Daily", "Time_on_Social_Media", "Time_on_Gaming", "Time_on_Education", "Family_Communication", "Weekend_Usage_Hours", "Addiction_Level" )
# Five-number summary function
five_number <- function(x) {
c(
Minimum = min(x, na.rm = TRUE),
Q1 = quantile(x, 0.25, na.rm = TRUE),
Median = median(x, na.rm = TRUE),
Q3 = quantile(x, 0.75, na.rm = TRUE),
Maximum = max(x, na.rm = TRUE)
)
}
for (variable in continuous_vars) {
cat("\n====================================\n")
cat(variable, "\n")
cat("====================================\n")
for (group in names(gender_groups)) {
cat("\nGender:", group, "\n")
print(
five_number(
gender_groups[[group]][[variable]]
)
)
}
}
##
## ====================================
## Age
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 13 14 16 18 19
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 13 14 16 18 19
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 13 14 16 18 19
##
## ====================================
## Daily_Usage_Hours
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 3.8 5.0 6.4 10.6
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 3.7 5.0 6.4 11.2
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 3.7 4.9 6.2 11.5
##
## ====================================
## Sleep_Hours
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 3.0 5.5 6.5 7.5 10.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 3.0 5.5 6.5 7.6 10.0
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 3.0 5.5 6.5 7.4 10.0
##
## ====================================
## Academic_Performance
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 50 62 75 88 100
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 50 62 75 87 100
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 50 63 76 87 100
##
## ====================================
## Social_Interactions
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0 2 5 8 10
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0 3 5 8 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0 2 5 8 10
##
## ====================================
## Exercise_Hours
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.4 1.0 1.5 3.6
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.000 0.500 1.000 1.525 3.600
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.4 1.0 1.6 4.0
##
## ====================================
## Anxiety_Level
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## ====================================
## Depression_Level
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 5 8 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 5 8 10
##
## ====================================
## Self_Esteem
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## ====================================
## Screen_Time_Before_Bed
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.7 1.0 1.3 2.5
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.7 1.0 1.3 2.5
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.7 1.0 1.4 2.6
##
## ====================================
## Phone_Checks_Per_Day
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 20 50 82 116 150
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 20 49 82 115 150
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 20 53 81 115 150
##
## ====================================
## Apps_Used_Daily
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 5 9 13 17 20
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 5.0 8.0 12.5 16.0 20.0
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 5 9 13 17 20
##
## ====================================
## Time_on_Social_Media
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 1.8 2.5 3.2 5.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 1.8 2.5 3.2 5.0
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 1.8 2.5 3.1 5.0
##
## ====================================
## Time_on_Gaming
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.9 1.5 2.2 4.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.9 1.6 2.2 4.0
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.7 1.4 2.1 4.0
##
## ====================================
## Time_on_Education
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.6 1.0 1.5 3.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.6 1.0 1.5 3.0
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 0.5 0.9 1.4 3.0
##
## ====================================
## Family_Communication
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 6 8 10
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 5 8 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 1 3 5 8 10
##
## ====================================
## Weekend_Usage_Hours
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 0.1 4.7 6.1 7.5 14.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 0.3 4.6 5.9 7.3 12.6
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 0.0 4.7 6.0 7.3 12.3
##
## ====================================
## Addiction_Level
## ====================================
##
## Gender: Female
## Minimum Q1.25% Median Q3.75% Maximum
## 2.1 8.1 10.0 10.0 10.0
##
## Gender: Male
## Minimum Q1.25% Median Q3.75% Maximum
## 1 8 10 10 10
##
## Gender: Other
## Minimum Q1.25% Median Q3.75% Maximum
## 1.4 8.0 9.9 10.0 10.0
# Box plot
for (variable in continuous_vars) {
boxplot(
phone_data[[variable]] ~ phone_data$Gender,
main = paste(variable, "by Gender"),
xlab = "Gender",
ylab = variable,
na.action = na.omit
)
}
# Histogram
for (variable in continuous_vars) {
for (group in gender_levels) {
x <- phone_data[
phone_data$Gender == group,
variable
]
x <- x[!is.na(x)]
if (length(x) > 1) {
hist(
x,
main = paste(variable, "-", group),
xlab = variable,
breaks = 15
)
}
}
}
# Remove missing Parental Control values
parent_data <- phone_data[
!is.na(phone_data$Parental_Control),
]
# Also remove blank values if the column was imported as text
parent_data <- parent_data[
trimws(as.character(parent_data$Parental_Control)) != "",
]
# Convert Parental_Control to a factor
parent_data$Parental_Control <- as.factor(
parent_data$Parental_Control
)
# Split the data by Parental Control group
parent_groups <- split(
parent_data,
parent_data$Parental_Control
)
# Get the group names
parent_levels <- names(parent_groups)
# Display the groups
print(parent_levels)
## [1] "0" "1"
# Display number of observations in each group
print(table(parent_data$Parental_Control))
##
## 0 1
## 1478 1522
for (variable in continuous_vars) {
cat("\n====================================\n")
cat(variable, "\n")
cat("====================================\n")
for (group in names(parent_groups)) {
cat("\nParental Control:", group, "\n")
print(
five_number(
gender_groups[[group]][[variable]]
)
)
}
}
##
## ====================================
## Age
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in max(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Daily_Usage_Hours
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Sleep_Hours
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Academic_Performance
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Social_Interactions
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Exercise_Hours
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Anxiety_Level
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Depression_Level
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Self_Esteem
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Screen_Time_Before_Bed
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Phone_Checks_Per_Day
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Apps_Used_Daily
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Time_on_Social_Media
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Time_on_Gaming
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Time_on_Education
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Family_Communication
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Weekend_Usage_Hours
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## ====================================
## Addiction_Level
## ====================================
##
## Parental Control: 0
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
##
## Parental Control: 1
## Warning in min(x, na.rm = TRUE): no non-missing arguments to min; returning Inf
## Warning in min(x, na.rm = TRUE): no non-missing arguments to max; returning
## -Inf
## Minimum Q1.25% Q3.75% Maximum
## Inf NA NA -Inf
# Box plot
for (variable in continuous_vars) {
boxplot(
phone_data[[variable]] ~ phone_data$Parental_Control,
main = paste(variable, "by Parental Control"),
xlab = "Parental Control",
ylab = variable,
na.action = na.omit
)
}
# Histogram
for (variable in continuous_vars) {
for (group in parent_levels) {
x <- phone_data[
phone_data$Parental_Control == group,
variable
]
x <- x[!is.na(x)]
if (length(x) > 1) {
hist(
x,
main = paste(variable, "-", group),
xlab = variable,
breaks = 15
)
}
}
}
# Kernel Density and Q-Q Plot against Normal Distribution
for (variable in continuous_vars) {
for (group in gender_levels) {
# Get the variable for this gender group
x <- gender_groups[[group]][[variable]]
# Convert to numeric
x <- suppressWarnings(as.numeric(as.character(x)))
# Remove missing values
x <- x[!is.na(x)]
# Make plots only if there are enough unique observations
if (length(x) > 1 && length(unique(x)) > 1) {
# Kernel Density Plot
plot(
density(x),
main = paste(
"Kernel Density:",
variable,
"- Gender",
group
),
xlab = variable
)
# Q-Q Plot Against Normal Distribution
qqnorm(
x,
main = paste(
"Normal Q-Q Plot:",
variable,
"- Gender",
group
)
)
# Add theoretical normal reference line
qqline(x)
}
}
}
# Kernel Density and Q-Q Plot against Normal Distribution
for (variable in continuous_vars) {
for (group in parent_levels) {
# Get the variable for this gender group
x <- parent_groups[[group]][[variable]]
# Convert to numeric
x <- suppressWarnings(as.numeric(as.character(x)))
# Remove missing values
x <- x[!is.na(x)]
# Make plots only if there are enough unique observations
if (length(x) > 1 && length(unique(x)) > 1) {
# Kernel Density Plot
plot(
density(x),
main = paste(
"Kernel Density:",
variable,
"- Parental Control",
group
),
xlab = variable
)
# Q-Q Plot Against Normal Distribution
qqnorm(
x,
main = paste(
"Normal Q-Q Plot:",
variable,
"- Parental Control",
group
)
)
# Add theoretical normal reference line
qqline(x)
}
}
}
scatter_data <- phone_data[, c(
"Daily_Usage_Hours",
"Sleep_Hours",
"Academic_Performance",
"Anxiety_Level",
"Depression_Level",
"Self_Esteem",
"Phone_Checks_Per_Day",
"Time_on_Social_Media",
"Time_on_Gaming",
"Weekend_Usage_Hours",
"Addiction_Level"
)]
pairs(
scatter_data,
main = "Pairwise Scatterplots of Phone Addiction Variables",
pch = 19
)
# Covariance Matrix
covariance_matrix <- cov(
scatter_data,
use = "complete.obs"
)
round(covariance_matrix, 3)
## Daily_Usage_Hours Sleep_Hours Academic_Performance
## Daily_Usage_Hours 3.828 0.048 0.613
## Sleep_Hours 0.048 2.222 -0.006
## Academic_Performance 0.613 -0.006 215.624
## Anxiety_Level -0.041 0.042 0.145
## Depression_Level 0.054 -0.049 -1.118
## Self_Esteem 0.035 0.070 -0.229
## Phone_Checks_Per_Day 0.351 0.293 -9.480
## Time_on_Social_Media -0.024 -0.027 0.528
## Time_on_Gaming -0.019 0.008 -0.462
## Weekend_Usage_Hours 0.077 -0.011 0.422
## Addiction_Level 1.892 -0.520 0.290
## Anxiety_Level Depression_Level Self_Esteem
## Daily_Usage_Hours -0.041 0.054 0.035
## Sleep_Hours 0.042 -0.049 0.070
## Academic_Performance 0.145 -1.118 -0.229
## Anxiety_Level 8.356 0.154 0.033
## Depression_Level 0.154 8.246 -0.219
## Self_Esteem 0.033 -0.219 8.184
## Phone_Checks_Per_Day 1.963 -0.124 -0.638
## Time_on_Social_Media -0.008 0.005 -0.026
## Time_on_Gaming 0.040 -0.024 -0.020
## Weekend_Usage_Hours 0.039 -0.032 -0.234
## Addiction_Level 0.074 0.039 -0.103
## Phone_Checks_Per_Day Time_on_Social_Media Time_on_Gaming
## Daily_Usage_Hours 0.351 -0.024 -0.019
## Sleep_Hours 0.293 -0.027 0.008
## Academic_Performance -9.480 0.528 -0.462
## Anxiety_Level 1.963 -0.008 0.040
## Depression_Level -0.124 0.005 -0.024
## Self_Esteem -0.638 -0.026 -0.020
## Phone_Checks_Per_Day 1424.839 0.275 0.192
## Time_on_Social_Media 0.275 0.977 -0.016
## Time_on_Gaming 0.192 -0.016 0.870
## Weekend_Usage_Hours -1.557 -0.029 0.053
## Addiction_Level 14.967 0.488 0.410
## Weekend_Usage_Hours Addiction_Level
## Daily_Usage_Hours 0.077 1.892
## Sleep_Hours -0.011 -0.520
## Academic_Performance 0.422 0.290
## Anxiety_Level 0.039 0.074
## Depression_Level -0.032 0.039
## Self_Esteem -0.234 -0.103
## Phone_Checks_Per_Day -1.557 14.967
## Time_on_Social_Media -0.029 0.488
## Time_on_Gaming 0.053 0.410
## Weekend_Usage_Hours 4.059 -0.042
## Addiction_Level -0.042 2.591
# Correlation Matrix
correlation_matrix <- cor(
scatter_data,
use = "complete.obs"
)
round(correlation_matrix, 3)
## Daily_Usage_Hours Sleep_Hours Academic_Performance
## Daily_Usage_Hours 1.000 0.016 0.021
## Sleep_Hours 0.016 1.000 0.000
## Academic_Performance 0.021 0.000 1.000
## Anxiety_Level -0.007 0.010 0.003
## Depression_Level 0.010 -0.012 -0.027
## Self_Esteem 0.006 0.016 -0.005
## Phone_Checks_Per_Day 0.005 0.005 -0.017
## Time_on_Social_Media -0.013 -0.018 0.036
## Time_on_Gaming -0.010 0.006 -0.034
## Weekend_Usage_Hours 0.020 -0.004 0.014
## Addiction_Level 0.601 -0.217 0.012
## Anxiety_Level Depression_Level Self_Esteem
## Daily_Usage_Hours -0.007 0.010 0.006
## Sleep_Hours 0.010 -0.012 0.016
## Academic_Performance 0.003 -0.027 -0.005
## Anxiety_Level 1.000 0.019 0.004
## Depression_Level 0.019 1.000 -0.027
## Self_Esteem 0.004 -0.027 1.000
## Phone_Checks_Per_Day 0.018 -0.001 -0.006
## Time_on_Social_Media -0.003 0.002 -0.009
## Time_on_Gaming 0.015 -0.009 -0.008
## Weekend_Usage_Hours 0.007 -0.005 -0.041
## Addiction_Level 0.016 0.008 -0.022
## Phone_Checks_Per_Day Time_on_Social_Media Time_on_Gaming
## Daily_Usage_Hours 0.005 -0.013 -0.010
## Sleep_Hours 0.005 -0.018 0.006
## Academic_Performance -0.017 0.036 -0.034
## Anxiety_Level 0.018 -0.003 0.015
## Depression_Level -0.001 0.002 -0.009
## Self_Esteem -0.006 -0.009 -0.008
## Phone_Checks_Per_Day 1.000 0.007 0.005
## Time_on_Social_Media 0.007 1.000 -0.018
## Time_on_Gaming 0.005 -0.018 1.000
## Weekend_Usage_Hours -0.020 -0.014 0.028
## Addiction_Level 0.246 0.307 0.273
## Weekend_Usage_Hours Addiction_Level
## Daily_Usage_Hours 0.020 0.601
## Sleep_Hours -0.004 -0.217
## Academic_Performance 0.014 0.012
## Anxiety_Level 0.007 0.016
## Depression_Level -0.005 0.008
## Self_Esteem -0.041 -0.022
## Phone_Checks_Per_Day -0.020 0.246
## Time_on_Social_Media -0.014 0.307
## Time_on_Gaming 0.028 0.273
## Weekend_Usage_Hours 1.000 -0.013
## Addiction_Level -0.013 1.000
# Scale data
z_data <- scale(scatter_data)
# Covariance Matrix with Z-score
covariance_z <- cov(
z_data,
use = "complete.obs"
)
round(covariance_z, 3)
## Daily_Usage_Hours Sleep_Hours Academic_Performance
## Daily_Usage_Hours 1.000 0.016 0.021
## Sleep_Hours 0.016 1.000 0.000
## Academic_Performance 0.021 0.000 1.000
## Anxiety_Level -0.007 0.010 0.003
## Depression_Level 0.010 -0.012 -0.027
## Self_Esteem 0.006 0.016 -0.005
## Phone_Checks_Per_Day 0.005 0.005 -0.017
## Time_on_Social_Media -0.013 -0.018 0.036
## Time_on_Gaming -0.010 0.006 -0.034
## Weekend_Usage_Hours 0.020 -0.004 0.014
## Addiction_Level 0.601 -0.217 0.012
## Anxiety_Level Depression_Level Self_Esteem
## Daily_Usage_Hours -0.007 0.010 0.006
## Sleep_Hours 0.010 -0.012 0.016
## Academic_Performance 0.003 -0.027 -0.005
## Anxiety_Level 1.000 0.019 0.004
## Depression_Level 0.019 1.000 -0.027
## Self_Esteem 0.004 -0.027 1.000
## Phone_Checks_Per_Day 0.018 -0.001 -0.006
## Time_on_Social_Media -0.003 0.002 -0.009
## Time_on_Gaming 0.015 -0.009 -0.008
## Weekend_Usage_Hours 0.007 -0.005 -0.041
## Addiction_Level 0.016 0.008 -0.022
## Phone_Checks_Per_Day Time_on_Social_Media Time_on_Gaming
## Daily_Usage_Hours 0.005 -0.013 -0.010
## Sleep_Hours 0.005 -0.018 0.006
## Academic_Performance -0.017 0.036 -0.034
## Anxiety_Level 0.018 -0.003 0.015
## Depression_Level -0.001 0.002 -0.009
## Self_Esteem -0.006 -0.009 -0.008
## Phone_Checks_Per_Day 1.000 0.007 0.005
## Time_on_Social_Media 0.007 1.000 -0.018
## Time_on_Gaming 0.005 -0.018 1.000
## Weekend_Usage_Hours -0.020 -0.014 0.028
## Addiction_Level 0.246 0.307 0.273
## Weekend_Usage_Hours Addiction_Level
## Daily_Usage_Hours 0.020 0.601
## Sleep_Hours -0.004 -0.217
## Academic_Performance 0.014 0.012
## Anxiety_Level 0.007 0.016
## Depression_Level -0.005 0.008
## Self_Esteem -0.041 -0.022
## Phone_Checks_Per_Day -0.020 0.246
## Time_on_Social_Media -0.014 0.307
## Time_on_Gaming 0.028 0.273
## Weekend_Usage_Hours 1.000 -0.013
## Addiction_Level -0.013 1.000
# Correlation Matrix with Z-score
correlation_z <- cor(
z_data,
use = "complete.obs"
)
round(correlation_z, 3)
## Daily_Usage_Hours Sleep_Hours Academic_Performance
## Daily_Usage_Hours 1.000 0.016 0.021
## Sleep_Hours 0.016 1.000 0.000
## Academic_Performance 0.021 0.000 1.000
## Anxiety_Level -0.007 0.010 0.003
## Depression_Level 0.010 -0.012 -0.027
## Self_Esteem 0.006 0.016 -0.005
## Phone_Checks_Per_Day 0.005 0.005 -0.017
## Time_on_Social_Media -0.013 -0.018 0.036
## Time_on_Gaming -0.010 0.006 -0.034
## Weekend_Usage_Hours 0.020 -0.004 0.014
## Addiction_Level 0.601 -0.217 0.012
## Anxiety_Level Depression_Level Self_Esteem
## Daily_Usage_Hours -0.007 0.010 0.006
## Sleep_Hours 0.010 -0.012 0.016
## Academic_Performance 0.003 -0.027 -0.005
## Anxiety_Level 1.000 0.019 0.004
## Depression_Level 0.019 1.000 -0.027
## Self_Esteem 0.004 -0.027 1.000
## Phone_Checks_Per_Day 0.018 -0.001 -0.006
## Time_on_Social_Media -0.003 0.002 -0.009
## Time_on_Gaming 0.015 -0.009 -0.008
## Weekend_Usage_Hours 0.007 -0.005 -0.041
## Addiction_Level 0.016 0.008 -0.022
## Phone_Checks_Per_Day Time_on_Social_Media Time_on_Gaming
## Daily_Usage_Hours 0.005 -0.013 -0.010
## Sleep_Hours 0.005 -0.018 0.006
## Academic_Performance -0.017 0.036 -0.034
## Anxiety_Level 0.018 -0.003 0.015
## Depression_Level -0.001 0.002 -0.009
## Self_Esteem -0.006 -0.009 -0.008
## Phone_Checks_Per_Day 1.000 0.007 0.005
## Time_on_Social_Media 0.007 1.000 -0.018
## Time_on_Gaming 0.005 -0.018 1.000
## Weekend_Usage_Hours -0.020 -0.014 0.028
## Addiction_Level 0.246 0.307 0.273
## Weekend_Usage_Hours Addiction_Level
## Daily_Usage_Hours 0.020 0.601
## Sleep_Hours -0.004 -0.217
## Academic_Performance 0.014 0.012
## Anxiety_Level 0.007 0.016
## Depression_Level -0.005 0.008
## Self_Esteem -0.041 -0.022
## Phone_Checks_Per_Day -0.020 0.246
## Time_on_Social_Media -0.014 0.307
## Time_on_Gaming 0.028 0.273
## Weekend_Usage_Hours 1.000 -0.013
## Addiction_Level -0.013 1.000
shannon_evenness <- function(x) {
# Remove missing values
x <- x[!is.na(x)]
# Count categories
counts <- table(x)
# Convert to proportions
p <- counts / sum(counts)
# Shannon entropy
H <- -sum(p * log(p))
# Number of categories
S <- length(p)
# Shannon evenness
J <- H / log(S)
return(
c(
Shannon_Entropy = H,
Shannon_Homogeneity = J
)
)
}
shannon_variables <- c(
"Anxiety_Level",
"Depression_Level",
"Self_Esteem"
)
# Shannon Index by Gender
for (variable in shannon_variables) {
cat("\n====================================\n")
cat(variable, "\n")
cat("====================================\n")
for (group in gender_levels) {
x <- phone_data[
phone_data$Gender == group,
variable
]
cat("\nGender:", group, "\n")
print(
shannon_evenness(x)
)
}
}
##
## ====================================
## Anxiety_Level
## ====================================
##
## Gender: Female
## Shannon_Entropy Shannon_Homogeneity
## 2.2963114 0.9972754
##
## Gender: Male
## Shannon_Entropy Shannon_Homogeneity
## 2.3003408 0.9990253
##
## Gender: Other
## Shannon_Entropy Shannon_Homogeneity
## 2.298288 0.998134
##
## ====================================
## Depression_Level
## ====================================
##
## Gender: Female
## Shannon_Entropy Shannon_Homogeneity
## 2.2993583 0.9985986
##
## Gender: Male
## Shannon_Entropy Shannon_Homogeneity
## 2.2963062 0.9972731
##
## Gender: Other
## Shannon_Entropy Shannon_Homogeneity
## 2.2999916 0.9988736
##
## ====================================
## Self_Esteem
## ====================================
##
## Gender: Female
## Shannon_Entropy Shannon_Homogeneity
## 2.2983635 0.9981666
##
## Gender: Male
## Shannon_Entropy Shannon_Homogeneity
## 2.2945972 0.9965309
##
## Gender: Other
## Shannon_Entropy Shannon_Homogeneity
## 2.2971750 0.9976504
# Shannon Index by Parental Control
for (variable in shannon_variables) {
cat("\n====================================\n")
cat(variable, "\n")
cat("====================================\n")
for (group in parent_levels) {
x <- phone_data[
phone_data$Parental_Control == group,
variable
]
cat("\nParental Control:", group, "\n")
print(
shannon_evenness(x)
)
}
}
##
## ====================================
## Anxiety_Level
## ====================================
##
## Parental Control: 0
## Shannon_Entropy Shannon_Homogeneity
## 2.3002377 0.9989805
##
## Parental Control: 1
## Shannon_Entropy Shannon_Homogeneity
## 2.3010472 0.9993321
##
## ====================================
## Depression_Level
## ====================================
##
## Parental Control: 0
## Shannon_Entropy Shannon_Homogeneity
## 2.300476 0.999084
##
## Parental Control: 1
## Shannon_Entropy Shannon_Homogeneity
## 2.2997977 0.9987894
##
## ====================================
## Self_Esteem
## ====================================
##
## Parental Control: 0
## Shannon_Entropy Shannon_Homogeneity
## 2.2963436 0.9972894
##
## Parental Control: 1
## Shannon_Entropy Shannon_Homogeneity
## 2.3016655 0.9996006
# Calculating mean of each continuous variable
aggregate(
scatter_data,
by = list(Gender = phone_data$Gender),
FUN = mean,
na.rm = TRUE
)
## Gender Daily_Usage_Hours Sleep_Hours Academic_Performance Anxiety_Level
## 1 Female 5.052532 6.499206 74.70010 5.622642
## 2 Male 5.054626 6.502854 74.71260 5.557087
## 3 Other 4.952508 6.466428 75.44626 5.590583
## Depression_Level Self_Esteem Phone_Checks_Per_Day Time_on_Social_Media
## 1 5.566038 5.573982 83.69315 2.507746
## 2 5.398622 5.594488 82.71752 2.496457
## 3 5.415558 5.467758 82.86489 2.493347
## Time_on_Gaming Weekend_Usage_Hours Addiction_Level
## 1 1.547964 6.071500 8.950645
## 2 1.583268 5.952461 8.867323
## 3 1.441556 6.022108 8.826203
aggregate(
scatter_data,
by = list(
Parental_Control = phone_data$Parental_Control
),
FUN = mean,
na.rm = TRUE
)
## Parental_Control Daily_Usage_Hours Sleep_Hours Academic_Performance
## 1 0 5.018742 6.481191 74.89986
## 2 1 5.022536 6.498095 74.99343
## Anxiety_Level Depression_Level Self_Esteem Phone_Checks_Per_Day
## 1 5.623816 5.416779 5.627876 81.67524
## 2 5.557162 5.502628 5.467148 84.46978
## Time_on_Social_Media Time_on_Gaming Weekend_Usage_Hours Addiction_Level
## 1 2.506428 1.516306 6.010690 8.883559
## 2 2.492247 1.533968 6.019382 8.880289