1: Five-number Summary Statistics, Boxplots, and Histograms for Continuous Attributes in Gender Group

# 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
      )
    }
  }
}

2: Five-number Summary Statistics, Boxplots, and Histograms for Continuous Attributes in Parent Control Group

# 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
      )
    }
  }
}

3: Kernel Density Fitting and QQ Plot Against Normal Distribution for Continuous Attributes in Gender Group

# 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)
    }
  }
}

4: Kernel Density Fitting and QQ Plot Against Normal Distribution for Continuous Attributes in Parent Control Group

# 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)
    }
  }
}

5: Pairwise Scatterplots

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
)

6: Covariate Matrix and Correlation Coefficients Between Attributes

# 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

7: Covariate Matrix and Correlation Coefficients With Z-scores for Continuous Attributes

# 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

8: Shannon’s Homogeneity Index

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

9: Additional Analysis

# 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