How do users’ Instagram behaviors—such as screen time, engagement actions, and content interaction—relate to their overall well‑being, lifestyle characteristics, and user engagement score?

Author

Geoffrey Kirnon & Aamiri Duckworth

Introduction

Social media platforms play a major role in shaping how individuals interact, communicate, and experience daily life. As usage continues to grow, understanding how online behavior relates to well being has become increasingly important. This study focuses on Instagram user activity and explores how engagement, screen time, and lifestyle factors relate to perceived stress and self reported happiness.

The dataset used in this analysis includes over one million observations from users across multiple countries. For this project, the data was filtered to include only users from the United States, resulting in a more focused dataset of over 260,000 observations. This allowed for a more consistent analysis of behavior and well being within a single population.

Goal:

  • Examine relationships between social media usage and mental health indicators
  • Identify distinct groups of users based on these characteristics
  • Use data visualization and clustering techniques to analyze patterns
  • Investigate how Instagram usage and lifestyle factors relate to stress levels
  • Explore how these factors are associated with differences in happiness levels
library(readxl)
library(DT)
library(tidyverse)
library(readr)

insta_data <- read_csv("instagram_usage_lifestyle.csv")

us_only_insta_data <- insta_data %>%
  drop_na() %>%
  filter( country == "United States")

Data

The data for this project was obtained from a Kaggle Social Media User Activity dataset. The original dataset contained 1,048,546 observations from users across multiple countries. For the purpose of this analysis, the data was filtered to include only users from the United States, resulting in a reduced dataset of 262,213 observations. This step allowed for a more focused analysis within a consistent geographic and cultural context.

In addition to filtering by country, the dataset was cleaned by removing observations with missing values. This was done to ensure that all analyses were conducted using complete data, reducing the risk of bias or errors caused by incomplete records. By working with complete cases, the results of the analysis are more reliable and easier to interpret.

The dataset was further refined by selecting only variables relevant to the goals of this study. These variables were grouped into categories such as demographics, well-being, engagement, and lifestyle factors.

Finally, variables were reviewed to ensure they were in the correct format for analysis, such as distinguishing between numerical and categorical data.

Table of Variables

Category Variable Name
Demographics age
Demographics gender
Demographics user_id
Well-being perceived_stress_score
Well-being self_reported_happiness
Well-being sleep_hours_per_night
Well-being time_on_feed_per_day
Well-being time_on_reels_per_day
Well-being daily_active_minutes_instagram
Engagement following_count
Engagement user_engagement_score
Engagement time_on_messages_per_day
Lifestyle income_level
Lifestyle education_level
Lifestyle employment_status
Lifestyle hobbies_count
Lifestyle social_events_per_month
Lifestyle travel_frequency_per_year
Lifestyle time_on_explore_per_day

Originally, the goal was to create an interactive table that displayed the full raw dataset. However, due to the large size of the data, this approach proved to be inefficient and difficult to navigate. As a result, the decision was made to instead use the cleaned dataset for the interactive table. This allowed for a more manageable and responsive interface while still preserving all relevant variables needed for analysis.

clean_insta_data <- insta_data %>%
  filter(country == "United States") %>%
  
  # Select ONLY the columns needed for ANY of your analyses
  select(
    # Demographics
    user_id, age, gender,  
    # Well-being variables
    perceived_stress_score, self_reported_happiness, sleep_hours_per_night,
    time_on_feed_per_day, time_on_reels_per_day, daily_active_minutes_instagram,
    
    # Engagement variables
    following_count, user_engagement_score, time_on_messages_per_day,
    
    # Lifestyle variables
    income_level, education_level, employment_status, hobbies_count,
    social_events_per_month, travel_frequency_per_year,
    time_on_explore_per_day
  )

clean_insta_data <- clean_insta_data[sample(nrow(clean_insta_data),10000),replace = TRUE]

datatable(clean_insta_data, rownames = FALSE, options = list(scrollX = TRUE))

The clean dataset was divided into several different dataframes to help with analysis. They were put into well-being, engagement drivers and lifestyle. This will help with the data visualization process as well. The different categories of the variables are listed in the table of variables above.

library(knitr)

# WELL-BEING DATA FRAME
well_being_data_frame <- clean_insta_data %>%
  select(
    perceived_stress_score, self_reported_happiness, sleep_hours_per_night,
    time_on_feed_per_day, time_on_reels_per_day,
    daily_active_minutes_instagram, age, gender
  )


# ENGAGEMENT DRIVERS DATA FRAME
engagement_drivers_data_frame <- clean_insta_data %>%
  select(
    perceived_stress_score, self_reported_happiness, sleep_hours_per_night,
    time_on_feed_per_day, time_on_reels_per_day, daily_active_minutes_instagram,
    following_count, user_engagement_score, time_on_messages_per_day,
    age, gender
  )

# LIFESTYLE DATA FRAME
lifestyle_data_frame <- clean_insta_data %>%
  select(
    income_level, education_level, employment_status, hobbies_count,
    social_events_per_month, travel_frequency_per_year,
    daily_active_minutes_instagram, time_on_explore_per_day,
    time_on_reels_per_day, time_on_feed_per_day,
    age, gender
  )
clean_insta_kable <- clean_insta_data %>%
  summarize(
    'Stress Score'= mean(perceived_stress_score, na.rm = TRUE),
    'Self Reported Happiness' = mean(self_reported_happiness, na.rm = TRUE),
    'Sleep Hours' = mean(sleep_hours_per_night, na.rm = TRUE),
    'Daily Active Minutes' = mean(daily_active_minutes_instagram, na.rm = TRUE),
    'Following Count' = mean(following_count, na.rm = TRUE),
    'User Engagement' = mean(user_engagement_score, na.rm = TRUE)
  )
kable(clean_insta_kable, caption = "Average values of selected variables for U.S. users")
Average values of selected variables for U.S. users
Stress Score Self Reported Happiness Sleep Hours Daily Active Minutes Following Count User Engagement
20.0513 5.5074 6.98675 188.6176 2575.108 1.645684

Results

The scatterplots show a clear positive relationship between Instagram usage and perceived stress levels. As time spent on the platform increases, whether measured by time on feed, time on reels, or total daily active minutes, stress scores also tend to increase. This pattern is consistent across all three usage variables and suggests that higher engagement with Instagram is associated with higher levels of stress.

While these results do not prove cause and effect, they highlight an important relationship between increased social media use and higher reported stress levels.

library(ggplot2)
library(patchwork)

# Create simple two-column datasets for each predictor

stress_happiness <- well_being_data_frame %>%
  select(perceived_stress_score, self_reported_happiness)

stress_sleep <- well_being_data_frame %>%
  select(perceived_stress_score, sleep_hours_per_night)

stress_feed <- well_being_data_frame %>%
  select(perceived_stress_score, time_on_feed_per_day)

stress_reels <- well_being_data_frame %>%
  select(perceived_stress_score, time_on_reels_per_day)

stress_daily <- well_being_data_frame %>%
  select(perceived_stress_score, daily_active_minutes_instagram)

stress_age <- well_being_data_frame %>%
  select(perceived_stress_score, age)






stress_vs_feed <- ggplot(stress_feed, aes(x = time_on_feed_per_day, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Feed Time",
       y = "Perceived Stress Score",
       x = "Time on Feed Per Day"
       ) +
  theme_minimal()

stress_vs_reels_time <- ggplot(stress_reels, aes(x = time_on_reels_per_day, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Reels Time",
       y = "Perceived Stress Score",
       x = "Time on Reels Per Day"
       ) +
  theme_minimal()

stress_vs_active_mins <- ggplot(stress_daily, aes(x = daily_active_minutes_instagram, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Daily Active Minutes",
       y = "Perceived Stress Score",
       x = "Daily Active Minutes on Instagram"
       ) +
  theme_minimal()



(stress_vs_active_mins / stress_vs_feed / stress_vs_reels_time) 

In contrast, the relationship between self reported happiness and stress appears weak. The plot comparing these two variables shows little to no clear pattern, indicating that happiness does not strongly predict stress levels in this dataset. This suggests that while Instagram usage is closely related to stress, overall happiness may be influenced by other factors not included in this analysis.

#Stres vs Happiness 
stress_vs_happiness <- ggplot(stress_happiness, aes(x = self_reported_happiness, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Happiness",
       x = "Self Happiness Score",
       y = "Perceived Stress Score"
  ) +
  theme_minimal()

#Stress vs Age
stres_vs_age <- ggplot(stress_age, aes(x = age, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Age",
       y = "Perceived Stress Score",
       x = "User Age"
  ) +
  theme_minimal()



#Stress Vs Sleep hours
stress_vs_sleep <- ggplot(stress_sleep, aes(x = sleep_hours_per_night, y = perceived_stress_score)) +
  geom_point(alpha = 0.05, color = "steelblue") +
  geom_smooth(method = "lm", color = "darkred", linewidth = 1) +
  labs(title = "Stress vs Sleep Hours",
       y = "Perceived Stress Score",
       x = "Sleep Hours per Night"
  ) +
  theme_minimal()

#putting graphs where it has a weak collation to stress together 
(stress_vs_happiness | stress_vs_sleep | stres_vs_age)

Because the dataset contained over 260,000 observations, running clustering methods on the full dataset required a very large amount of memory and computational power. When attempting to determine the optimal number of clusters using the NbClust function, the process resulted in memory allocation errors due to the size of the data. To address this issue, a random sample of 5,000 observations was selected from the dataset.

This sample size was large enough to preserve the overall structure and patterns within the data while significantly reducing the computational burden. By using a representative subset, it was possible to efficiently estimate the optimal number of clusters without compromising the integrity of the analysis. Once the optimal number of clusters was identified, the clustering algorithm was then applied to the full dataset using this value.

library(NbClust)
cluster_data <- clean_insta_data %>%
  select(-user_engagement_score)

# Keep only numeric variables
# Keep only numeric variables
numeric_cluster_data <- clean_insta_data %>%
  select(where(is.numeric)) 

# Scale numeric data
scaled_data <- scale(numeric_cluster_data)

# Reduce dimensionality with PCA (keep 90% variance)
pca <- prcomp(scaled_data, scale. = TRUE)

# Keep only first ~5–10 PCs (automatically reduces memory)
pca_data <- pca$x[, 1:10]

# 4. Determine Optimal Number of Clusters (NbClust)

set.seed(123) 




pca_sample <- pca_data[sample(nrow(pca_data), 5000), ]

number_cluster_estimate <- NbClust(
  pca_sample,
  distance = "euclidean",
  min.nc = 2,
  max.nc = 10,
  method = "kmeans"
)

*** : The Hubert index is a graphical method of determining the number of clusters.
                In the plot of Hubert index, we seek a significant knee that corresponds to a 
                significant increase of the value of the measure i.e the significant peak in Hubert
                index second differences plot. 
 

*** : The D index is a graphical method of determining the number of clusters. 
                In the plot of D index, we seek a significant knee (the significant peak in Dindex
                second differences plot) that corresponds to a significant increase of the value of
                the measure. 
 
******************************************************************* 
* Among all indices:                                                
* 7 proposed 2 as the best number of clusters 
* 9 proposed 3 as the best number of clusters 
* 3 proposed 4 as the best number of clusters 
* 3 proposed 8 as the best number of clusters 
* 1 proposed 10 as the best number of clusters 

                   ***** Conclusion *****                            
 
* According to the majority rule, the best number of clusters is  3 
 
 
******************************************************************* 
number_cluster_estimate
$All.index
        KL        CH Hartigan     CCC     Scott      Marriot   TrCovW   TraceW
2   6.6070 1804.5428 578.2125 -8.7778  6201.385 4.321501e+37 30240143 52604.88
3   1.6869 1295.5011 387.8268 -4.6276 15720.928 1.448639e+37 24642923 47150.14
4   9.6594 1059.7618 237.4207  0.5380 20364.983 1.017326e+37 21112078 43754.28
5   0.2341  891.7696 145.9704  1.3478 23365.809 8.722314e+36 19437164 41769.31
6   4.2853  763.3053 165.5510 -1.3355 25365.270 8.420216e+36 18660529 40583.33
7   0.1186  684.6287 213.4736 -1.7097 26401.252 9.316065e+36 17055066 39281.16
8  10.6136  642.2816 126.3569  1.8830 28714.831 7.660577e+36 15811586 37670.58
9   2.7132  591.8976 108.9959  1.0642 29632.816 8.069217e+36 15073112 36740.60
10  2.7216  549.6217  95.0389  0.1093 30572.096 8.255845e+36 14605842 35955.39
   Friedman  Rubin Cindex     DB Silhouette   Duda   Pseudot2   Beale Ratkowsky
2    2.2616 1.3611 0.3660 1.6642     0.2223 0.9591   109.3262  0.2869    0.0917
3    7.5466 1.5186 0.3470 1.6238     0.1976 1.1470  -361.6320 -0.8617    0.1439
4   12.9936 1.6364 0.3957 2.0704     0.1311 1.8523 -1005.8333 -3.0916    0.1343
5   14.0078 1.7142 0.3847 2.2401     0.1206 1.5485  -642.9099 -2.3800    0.1614
6   14.8144 1.7643 0.3782 2.5571     0.1036 1.3948  -384.4152 -1.9017    0.1628
7   15.7251 1.8228 0.3707 2.3594     0.1019 1.4047  -321.5029 -1.9349    0.1706
8   15.3090 1.9007 0.3572 2.3207     0.1021 1.6050  -439.9113 -2.5313    0.1760
9   15.7927 1.9488 0.3555 2.2210     0.1015 1.6536  -452.1731 -2.6539    0.1741
10  16.1150 1.9914 0.3510 2.2594     0.0993 1.4272  -293.0323 -2.0096    0.1714
        Ball Ptbiserial    Frey McClain   Dunn Hubert SDindex Dindex   SDbw
2  26302.439     0.4420 -0.0405  0.7625 0.0694  0e+00  1.2231 3.1442 1.3011
3  15716.712     0.5074  1.4319  0.9339 0.0556  1e-04  1.2454 2.9974 0.4899
4  10938.570     0.4514  1.3247  1.6421 0.0767  1e-04  1.5027 2.8856 0.4585
5   8353.863     0.3998  1.1079  2.5085 0.0619  1e-04  1.6700 2.8154 0.4404
6   6763.889     0.3672  0.5281  3.2786 0.0657  1e-04  1.8781 2.7742 0.4298
7   5611.595     0.3512  0.2379  3.9572 0.0623  1e-04  1.7648 2.7285 0.4166
8   4708.822     0.3460  0.4331  4.5894 0.0485  1e-04  1.7862 2.6717 0.4049
9   4082.289     0.3345  0.4526  5.2051 0.0619  1e-04  1.7349 2.6393 0.3941
10  3595.539     0.3224  0.4144  5.8869 0.0619  1e-04  1.7848 2.6105 0.3848

$All.CriticalValues
   CritValue_Duda CritValue_PseudoT2 Fvalue_Beale
2          0.9093           255.4279       0.9843
3          0.9072           288.6956       1.0000
4          0.8955           255.0189       1.0000
5          0.8953           212.1495       1.0000
6          0.8916           165.1166       1.0000
7          0.8871           141.9993       1.0000
8          0.8838           153.4819       1.0000
9          0.8816           153.5841       1.0000
10         0.8805           132.9041       1.0000

$Best.nc
                     KL       CH Hartigan   CCC    Scott      Marriot  TrCovW
Number_clusters  8.0000    2.000   3.0000 8.000    3.000 3.000000e+00       3
Value_Index     10.6136 1804.543 190.3857 1.883 9519.543 2.441549e+37 5597221
                  TraceW Friedman   Rubin Cindex     DB Silhouette   Duda
Number_clusters    3.000    4.000  4.0000  3.000 3.0000     2.0000 2.0000
Value_Index     2058.887    5.447 -0.0401  0.347 1.6238     0.2223 0.9591
                PseudoT2  Beale Ratkowsky     Ball PtBiserial Frey McClain
Number_clusters   2.0000 2.0000     8.000     3.00     3.0000    1  2.0000
Value_Index     109.3262 0.2869     0.176 10585.73     0.5074   NA  0.7625
                  Dunn Hubert SDindex Dindex    SDbw
Number_clusters 4.0000      0  2.0000      0 10.0000
Value_Index     0.0767      0  1.2231      0  0.3848

$Best.partition
   [1] 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 1 2 2 2 2 1 2 1 1 2 2 3 1 2 2
  [38] 1 1 1 1 2 2 2 1 2 2 2 2 1 2 3 2 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 2 1 3 2 1 2
  [75] 2 3 3 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 1 1 2 2 1 2 1 1 1 2 1 2 2 1 3 2 2 2
 [112] 1 1 2 1 2 1 1 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 3
 [149] 1 1 2 2 1 2 1 2 1 2 1 1 1 1 3 2 1 1 2 1 2 2 2 2 3 1 2 2 2 2 3 1 1 3 2 1 2
 [186] 2 1 2 2 1 1 1 2 2 2 3 2 1 1 2 2 3 1 2 1 2 3 1 1 2 2 1 2 2 1 1 1 1 2 2 1 2
 [223] 1 2 1 2 2 1 2 3 1 1 1 2 1 1 2 2 2 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 2 1 2 1
 [260] 1 2 3 2 2 1 2 2 2 2 2 1 2 3 1 2 3 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 1 2
 [297] 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 3 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 1 2 1 1
 [334] 2 2 1 2 2 3 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 3 1 1 1 2 2 1 1 1 2 1 1 1 2 1 1
 [371] 1 2 2 1 1 3 1 2 2 2 1 1 2 3 1 2 1 1 2 2 2 3 3 2 3 1 1 2 2 2 1 2 1 2 1 1 2
 [408] 2 3 1 1 2 1 2 1 2 1 1 1 1 2 2 3 1 1 3 2 3 1 2 1 1 3 2 2 1 2 1 1 2 2 2 1 1
 [445] 2 2 2 1 2 2 1 1 2 3 2 1 2 2 3 1 2 1 2 2 1 1 1 2 2 1 2 2 2 2 1 1 1 2 1 2 2
 [482] 2 1 2 2 2 2 3 2 3 2 2 1 1 2 1 2 1 2 1 3 2 2 2 2 3 1 2 2 2 1 1 2 1 2 1 1 1
 [519] 1 1 2 3 1 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 2 1 2 2 2 1 1 2 2 2 2 2 3 2 1 1
 [556] 3 2 2 2 1 2 3 1 1 2 2 1 1 2 1 1 2 2 2 1 2 2 2 1 2 2 2 2 2 1 1 2 2 1 1 3 1
 [593] 1 2 2 2 2 1 2 1 2 3 1 2 2 2 2 1 2 2 2 2 1 2 1 2 2 2 1 1 1 2 2 2 1 1 2 2 2
 [630] 2 2 1 1 3 2 2 2 1 2 1 2 1 1 1 3 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 2 2
 [667] 3 1 1 2 2 1 2 1 2 2 3 1 1 3 1 1 2 1 3 2 1 1 2 1 2 1 1 2 2 1 2 1 2 2 2 2 2
 [704] 1 1 1 1 2 2 3 1 2 2 1 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 3 3 2 2 2 1 1 2 1 3 2
 [741] 2 1 2 2 2 3 1 2 2 2 1 2 1 1 1 1 2 1 2 1 1 2 3 2 1 2 2 1 1 2 2 2 1 1 1 2 1
 [778] 2 3 1 1 1 1 1 3 2 2 2 1 3 2 2 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 1 1 2 2 2 2
 [815] 2 2 1 1 1 2 2 1 1 2 3 1 2 2 1 1 1 1 2 2 1 2 1 2 1 1 2 2 2 1 2 1 1 2 2 1 2
 [852] 2 1 1 2 1 2 3 1 1 2 1 1 2 2 1 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 1 1 3 1 2
 [889] 1 3 2 1 3 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 3 2 2 2 3 2 1 1 1 1 3 1 2
 [926] 2 2 1 2 2 1 2 2 3 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 3 1 1 1 2 2 1 3 2 2 2 2 1
 [963] 2 1 2 3 3 1 1 2 2 1 2 1 1 1 2 2 2 3 2 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 2 1 3
[1000] 1 2 1 1 2 1 1 2 2 2 3 1 1 2 1 2 1 1 3 1 2 1 1 1 1 2 1 2 1 2 2 1 1 2 1 3 1
[1037] 3 2 1 1 2 2 3 2 1 1 2 2 2 3 1 1 1 1 3 1 2 1 2 1 1 2 1 1 1 1 2 2 2 1 1 2 1
[1074] 3 1 2 2 2 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 2 3 2 2 2 1 1 1 2 2 1 2 1 1 1
[1111] 1 1 1 1 1 1 2 1 2 2 2 1 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 2 1 2 2 3 1 1 1 2 2
[1148] 2 2 2 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 3 3 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 1 2
[1185] 1 3 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 2 1 2 3 1 2 1 2 1 2 3 1 1 2 1 2 1 2 1 1
[1222] 2 2 2 3 3 3 2 1 2 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 1 1 2 3 2 1 1
[1259] 2 1 1 1 2 2 2 3 2 1 2 1 2 2 2 1 1 1 2 2 2 2 3 2 2 2 2 2 3 2 1 1 1 1 1 2 1
[1296] 1 2 2 1 2 1 2 3 3 1 1 2 1 1 2 3 2 1 2 2 2 1 3 2 2 3 1 2 2 1 1 2 2 2 2 2 1
[1333] 1 2 2 1 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 2 2 1 1 2 2 2 3 1 1 2 3 2 1 1 1 2 2
[1370] 1 1 1 2 2 1 2 2 2 2 1 1 2 1 2 2 3 1 2 3 2 1 2 2 2 1 1 3 1 1 2 3 2 1 1 2 2
[1407] 2 3 2 1 1 2 3 2 2 1 3 2 1 2 2 2 1 1 1 2 2 1 1 3 1 2 1 1 1 1 2 1 1 1 1 3 2
[1444] 2 2 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 3 3 1 1 2
[1481] 1 1 1 3 2 2 3 2 2 2 1 2 2 1 1 2 2 2 2 3 2 1 2 2 2 2 2 1 3 1 2 1 2 2 1 3 2
[1518] 1 2 2 2 2 2 1 3 2 2 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 2 2 2 1 2 1
[1555] 2 1 1 3 1 1 2 2 2 1 1 2 1 2 2 2 3 1 2 1 1 2 1 1 2 3 1 1 2 1 2 2 1 2 2 1 1
[1592] 2 1 2 1 2 2 2 3 3 2 1 2 2 1 2 3 2 1 1 2 2 2 3 2 2 1 1 2 2 2 1 1 2 2 3 1 2
[1629] 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 3 1 1 2 2 2 1 2 2 1 1
[1666] 1 2 2 2 1 1 3 2 2 1 1 1 1 1 1 2 2 1 3 1 2 1 2 1 2 2 2 2 2 2 1 1 2 2 3 2 1
[1703] 2 1 1 2 2 2 2 1 1 1 2 3 2 1 2 2 2 2 2 2 2 2 1 2 1 1 1 1 1 1 1 2 3 1 1 2 2
[1740] 3 1 1 1 1 2 1 1 2 2 3 2 3 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 1 2 1 1 2 1 1
[1777] 2 1 2 2 2 2 2 2 2 1 2 1 1 1 1 1 1 2 2 2 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 1 1
[1814] 1 1 1 2 1 2 1 2 2 1 2 1 1 1 2 1 3 2 2 1 2 1 2 2 1 2 3 3 1 2 2 1 2 2 1 2 2
[1851] 2 1 1 2 2 1 3 2 2 1 1 2 2 2 2 1 1 1 2 1 1 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 1
[1888] 1 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2
[1925] 1 2 2 2 2 1 1 2 2 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 1 1 2 1 2 2 1 1 1 1 1 3 2
[1962] 2 1 1 1 2 2 1 1 2 2 1 3 1 2 2 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 2 3 1
[1999] 1 1 2 2 1 1 1 2 1 3 3 2 1 2 1 1 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 2
[2036] 3 2 1 2 1 3 1 2 1 2 1 1 3 2 1 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 2 2 2 1 1 1 1
[2073] 3 2 3 1 1 2 2 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 1 2 1 1 2 1 3 1 1 2 1 2 2 1 2
[2110] 2 1 2 2 2 2 1 2 1 3 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 1 1 1 2 1 1 1 2 1 1
[2147] 2 1 1 1 2 2 2 2 1 1 1 2 1 1 1 2 1 1 3 2 2 2 2 2 2 2 1 1 1 2 2 2 3 2 2 2 1
[2184] 2 2 1 2 2 2 1 2 2 2 2 1 1 1 2 1 1 1 3 1 2 2 2 1 2 3 2 2 1 3 2 1 2 1 2 2 3
[2221] 2 3 2 1 2 1 1 2 3 1 2 2 1 2 2 2 2 3 2 1 1 2 1 3 1 2 2 1 2 2 2 1 2 2 1 2 1
[2258] 1 2 2 1 3 1 3 2 3 2 2 1 2 2 1 2 3 1 1 2 2 2 2 1 2 1 2 2 2 2 1 2 2 2 2 2 1
[2295] 1 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 3 1 3 2 2 1 1 1 3 2 1 2 2 1
[2332] 1 2 1 2 2 3 1 1 2 2 1 2 1 1 2 1 2 3 1 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 2 2
[2369] 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 3 1 1 1 2 2 3 1 2 1 1 2
[2406] 1 2 1 2 2 3 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 3 1 2 1 1 1 1 1 1 2 3 1 2 1 1 1
[2443] 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 2 2 1 3 1 1 2 1 2 1 2 3 1 2 2
[2480] 2 3 1 1 3 2 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 2 3 2 1 3 1 2 2 1 2 1
[2517] 2 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 3 1 2 2 2 2 2 1 3 1 3 2 1 1 1 1 1 1 1 2 1
[2554] 2 1 3 1 2 2 2 2 2 1 1 2 3 2 1 2 2 2 2 1 1 1 1 1 2 3 2 2 2 3 1 2 3 2 1 2 2
[2591] 3 1 2 1 1 2 2 1 1 2 2 2 1 2 1 3 1 1 1 1 2 1 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2
[2628] 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 2 3 1 2 2 2 2 3 1 2 1 3 2 1 2 1 2 2 2 2 1 2
[2665] 2 2 2 2 3 1 3 1 1 3 2 1 2 3 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 1
[2702] 1 2 2 1 2 2 2 2 1 3 1 2 2 2 3 1 2 1 3 2 1 1 1 1 3 2 2 2 2 1 2 2 1 1 1 2 2
[2739] 1 1 2 2 1 1 1 2 2 2 2 2 2 1 2 1 1 2 2 2 1 2 1 1 2 2 1 1 2 1 1 2 2 1 1 2 1
[2776] 2 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 2 3 2
[2813] 1 1 2 2 2 1 1 3 1 2 1 1 1 1 2 1 2 1 3 1 1 3 1 1 1 2 1 1 1 1 1 2 1 2 2 2 1
[2850] 1 2 1 1 2 1 2 2 1 1 1 3 2 2 1 2 2 1 1 2 2 2 2 3 2 1 1 2 2 1 1 1 2 1 3 1 1
[2887] 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 2 1 1 1 1
[2924] 2 2 1 1 2 3 1 3 2 1 2 2 2 2 1 2 1 1 3 2 3 2 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2
[2961] 3 1 1 2 2 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 2 2
[2998] 2 1 1 2 1 2 2 2 2 2 1 3 1 2 1 1 1 2 1 2 2 1 1 1 2 2 1 2 2 2 1 2 2 2 2 3 2
[3035] 1 1 2 1 2 1 3 2 1 2 1 2 1 1 1 3 2 1 2 1 2 2 1 1 1 2 2 1 2 2 3 2 2 1 1 1 2
[3072] 2 1 2 2 2 3 2 2 2 3 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 1 2 1 1 3 3 2 1 2
[3109] 2 1 2 1 1 1 2 1 2 2 2 2 2 1 3 1 2 1 1 1 1 1 2 1 2 2 2 1 2 2 3 1 2 1 2 2 1
[3146] 1 2 2 1 1 1 1 1 2 2 2 2 2 2 2 3 2 1 3 2 2 3 1 3 1 1 1 2 2 2 2 2 2 2 1 1 1
[3183] 1 2 2 1 2 2 1 1 2 2 3 1 1 2 1 2 2 2 1 1 2 2 2 2 3 1 2 1 1 1 1 1 3 2 2 1 1
[3220] 1 2 2 2 1 2 3 1 2 1 2 1 2 3 2 2 1 1 2 2 2 2 1 1 1 3 2 2 1 1 2 1 2 1 2 2 2
[3257] 2 1 2 3 3 2 2 1 2 2 1 2 2 2 3 1 2 1 1 2 1 1 1 2 2 1 2 2 2 2 1 1 1 2 1 1 1
[3294] 1 2 1 3 1 1 2 3 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 1 1 3 2 1 1 2 1 2 2 1 1 2
[3331] 1 2 2 2 2 1 1 2 2 1 1 2 1 1 1 1 2 2 1 3 1 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2
[3368] 2 2 2 1 1 3 2 1 1 2 2 1 2 2 1 1 2 2 1 1 1 2 2 2 2 1 1 3 2 1 2 1 1 2 1 1 2
[3405] 2 1 1 2 2 3 2 2 2 1 1 1 1 1 2 2 1 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 2 1 2 2
[3442] 2 1 2 2 3 2 1 1 1 2 2 1 2 1 2 2 1 1 3 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 1 3
[3479] 1 3 2 1 2 3 2 2 3 1 1 1 1 3 1 2 1 1 1 1 2 2 3 1 1 2 1 1 1 1 2 2 3 1 3 1 1
[3516] 2 2 1 2 2 2 2 2 3 2 2 1 2 1 1 1 3 2 1 2 1 1 2 2 2 1 1 2 1 1 3 2 2 2 1 2 3
[3553] 2 3 1 1 2 2 2 1 3 1 2 2 2 3 1 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1
[3590] 2 2 1 1 1 2 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 2 1
[3627] 1 1 2 2 1 2 1 1 2 2 1 1 3 2 1 2 3 1 1 1 2 2 2 2 1 1 2 2 2 2 2 1 2 1 1 2 3
[3664] 2 3 2 2 1 2 1 1 1 1 2 2 1 2 1 2 1 2 2 1 3 2 2 1 1 1 3 1 2 1 2 2 1 1 1 1 2
[3701] 2 1 2 3 1 2 2 2 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 3 2 1 1 2 2 1 1 2 2 2 1 1
[3738] 2 1 2 2 1 1 1 3 2 2 2 1 2 2 2 1 2 2 2 1 1 3 1 1 2 1 1 1 1 1 2 2 1 2 2 2 1
[3775] 3 1 3 3 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 2 3 1 1 2 1 2 2 1 1 2 1 2 3 2 1 2 2
[3812] 2 2 2 1 1 2 2 2 2 1 2 2 2 1 1 2 3 1 1 2 2 1 1 3 2 1 1 2 1 1 1 2 2 2 1 2 1
[3849] 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1
[3886] 2 1 1 2 2 1 2 2 2 1 1 1 1 2 1 2 2 2 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 2 3
[3923] 1 1 1 1 2 1 2 1 2 2 2 3 1 1 1 1 1 1 1 3 1 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2
[3960] 1 2 2 2 2 2 1 1 1 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 2 1 1 1 2 1 1 2 1
[3997] 2 2 1 1 1 2 1 1 2 2 2 2 1 1 1 2 2 1 1 1 1 1 1 2 2 3 2 1 2 1 2 1 1 2 2 2 2
[4034] 2 1 2 1 2 1 3 1 1 2 2 3 2 2 2 2 1 1 2 1 3 1 2 2 2 3 2 2 2 2 1 2 2 2 1 2 1
[4071] 2 2 1 2 1 1 1 1 1 1 2 1 1 2 1 1 1 2 2 2 1 2 1 2 1 2 2 2 2 1 1 1 1 1 2 2 2
[4108] 2 2 1 2 2 3 2 2 2 2 1 2 2 2 2 3 1 3 2 2 2 2 1 2 1 1 1 2 2 2 2 1 2 2 2 2 1
[4145] 1 3 2 1 1 1 1 2 1 2 1 2 1 2 1 3 1 2 1 3 2 1 1 3 2 2 1 1 1 3 2 2 1 3 1 2 1
[4182] 1 2 1 2 2 2 2 1 3 1 2 3 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 1 1 2 1 1 2 2 1 1 2
[4219] 2 1 1 1 1 1 1 1 1 2 3 2 2 3 1 1 2 1 2 2 3 2 1 2 1 2 3 2 1 1 2 2 2 2 1 2 1
[4256] 2 2 1 1 1 2 3 2 1 3 1 2 2 2 2 1 2 2 2 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 2 2 2
[4293] 2 1 1 2 1 2 2 2 1 2 1 1 2 3 2 1 1 2 1 2 1 1 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2
[4330] 1 1 2 1 2 3 2 2 1 2 3 2 2 2 2 2 2 1 1 3 1 1 2 1 1 1 2 2 2 2 1 1 2 2 2 3 2
[4367] 2 3 2 2 2 1 1 2 2 1 3 3 1 2 3 3 2 2 3 2 1 1 3 2 2 2 1 1 1 2 1 2 2 1 2 1 2
[4404] 2 2 3 1 2 2 2 1 1 1 3 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 1 1 1 1 2 1 1
[4441] 2 1 1 1 1 1 2 3 1 2 1 1 2 2 2 1 1 2 2 2 2 2 1 3 1 1 1 1 1 2 1 2 1 2 1 1 2
[4478] 1 2 2 2 1 2 1 2 2 2 1 3 1 2 1 2 1 2 1 2 1 2 1 1 3 3 1 1 2 2 2 2 2 2 1 2 1
[4515] 1 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 3 2 2 1 1 1 1 2 1 2 1 2 2 2 1 1 1 3 2 1
[4552] 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 2 3 2 2 2 3 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 3
[4589] 2 1 2 1 1 2 2 1 1 2 2 2 2 1 3 2 2 2 1 2 2 1 1 2 2 2 2 1 1 1 1 1 3 3 1 2 1
[4626] 1 1 2 2 1 2 2 2 2 2 2 2 1 1 1 1 1 2 2 2 3 2 1 2 1 1 2 1 2 1 2 1 2 3 2 1 1
[4663] 1 1 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1
[4700] 1 1 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 2 2 2 1 2 2 1 2 3 1 2 1 1 2 2 2 1 1 1 2
[4737] 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 1
[4774] 1 2 3 2 2 1 3 1 1 1 2 1 2 1 2 2 2 2 1 1 1 2 2 2 3 1 3 2 2 2 2 2 2 2 2 1 1
[4811] 1 1 1 2 2 2 2 2 2 3 1 2 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 3 2 2 3 1
[4848] 1 2 2 1 2 1 1 3 3 1 1 1 1 2 1 2 1 2 1 2 1 1 2 3 2 1 1 1 1 2 3 2 1 1 3 2 2
[4885] 2 1 1 2 1 1 1 2 2 2 2 1 2 2 1 2 3 2 1 2 2 2 1 2 1 2 1 2 2 3 2 2 1 1 1 1 1
[4922] 1 2 2 1 3 2 2 2 1 1 2 1 1 1 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 1 1 1 2 1 2 1 1
[4959] 2 3 1 3 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 2 2 2 3 2 1 2 2 1 1 1 2 2 2 1 2 1 2
[4996] 2 2 1 2 2

Clustering Analysis

The results from the NbClust analysis provide a detailed comparison of multiple clustering indices used to determine the optimal number of clusters. As shown above, different indices suggest varying numbers of clusters (ranging from 2 to 10), reflecting the fact that each method evaluates clustering structure using different criteria. However, the majority rule indicates that 2 clusters is the most appropriate choice, as it is the most frequently recommended solution among the indices. The table of individual index results further supports this conclusion, with several key metrics (such as CH, DB, and Silhouette) also favoring a 2-cluster solution. Therefore, based on both the summary and the detailed index outputs, we proceed with k = 2 for the clustering analysis.

 number_cluster_estimate$Best.nc
                     KL       CH Hartigan   CCC    Scott      Marriot  TrCovW
Number_clusters  8.0000    2.000   3.0000 8.000    3.000 3.000000e+00       3
Value_Index     10.6136 1804.543 190.3857 1.883 9519.543 2.441549e+37 5597221
                  TraceW Friedman   Rubin Cindex     DB Silhouette   Duda
Number_clusters    3.000    4.000  4.0000  3.000 3.0000     2.0000 2.0000
Value_Index     2058.887    5.447 -0.0401  0.347 1.6238     0.2223 0.9591
                PseudoT2  Beale Ratkowsky     Ball PtBiserial Frey McClain
Number_clusters   2.0000 2.0000     8.000     3.00     3.0000    1  2.0000
Value_Index     109.3262 0.2869     0.176 10585.73     0.5074   NA  0.7625
                  Dunn Hubert SDindex Dindex    SDbw
Number_clusters 4.0000      0  2.0000      0 10.0000
Value_Index     0.0767      0  1.2231      0  0.3848

K-means Clustering

K-means clustering was performed using the scaled dataset with k = 2, as determined by the NbClust analysis. Each observation was assigned to one of the two clusters, and these cluster labels were added back to the dataset for further analysis. This allowed for comparison of behavioral and well-being characteristics across the identified groups.

set.seed(123)

kmeans_model <- kmeans(
  scaled_data,
  centers = 3,
  nstart = 25
)

cluster_assignments <- kmeans_model$cluster

clustered_df <- numeric_cluster_data %>%
  mutate(cluster = factor(cluster_assignments))
clustered_df_with_income <- clean_insta_data %>%
  select(income_level) %>%
  bind_cols(clustered_df)

income_summary <- clustered_df_with_income %>%
  group_by(cluster, income_level) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(cluster) %>%
  mutate(percent = round(n / sum(n) * 100, 1)) %>%
  arrange(cluster, desc(percent))



income_summary %>%
  kable(
    caption = "Income Level Distribution by Cluster",
    digits = 1
  )
Income Level Distribution by Cluster
cluster income_level n percent
1 Middle 213 30.0
1 Lower-middle 169 23.8
1 Low 134 18.9
1 Upper-middle 115 16.2
1 High 79 11.1
2 Middle 1444 29.7
2 Lower-middle 1242 25.6
2 Low 978 20.1
2 Upper-middle 732 15.1
2 High 461 9.5
3 Middle 1320 29.8
3 Lower-middle 1138 25.7
3 Low 883 19.9
3 Upper-middle 654 14.8
3 High 438 9.9
ggplot(clustered_df,
       aes(x = cluster,
           y = perceived_stress_score,
           fill = cluster)) +
  geom_boxplot(alpha = 0.7) +
  labs(
    title = "Stress by Cluster",
    x = "Cluster",
    y = "Perceived Stress Score"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

The relationship between age and perceived stress was analyzed across both clusters. In each cluster, stress levels show a slight upward trend as age increases, indicating a modest positive relationship between age and stress. However, the magnitude of this relationship is relatively small, suggesting that age alone does not strongly influence stress levels.

A more notable pattern is the clear separation between the two clusters. Cluster 2 consistently exhibits higher stress scores across all age groups compared to Cluster 1. This indicates that cluster membership is a stronger determinant of stress than age. Overall, the results suggest that while age has a minor effect on stress, the primary distinction between users lies in their overall stress levels rather than their age.

ggplot(clustered_df,
       aes(x = age,
           y = perceived_stress_score,
           color = cluster)) +
  geom_point(alpha = 0.05, size = 0.5) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(
    title = "Stress vs Age by Cluster",
    x = "Age",
    y = "Perceived Stress Score",
    color = "Cluster"
  ) +
  theme_minimal()

ggplot(clustered_df,
       aes(x = daily_active_minutes_instagram,
           y = perceived_stress_score,
           color = factor(cluster))) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm") +
  labs(title = "Time on Instagram vs Stress by Cluster",
       x = "Daily Active Minutes on Instagram",
       y = "Perceived Stress Score")
`geom_smooth()` using formula = 'y ~ x'

This visualization shows the relationship between time spent on Instagram and perceived stress across two clusters. We observe a clear separation, where Cluster 1 consists of lower-usage individuals, while Cluster 2 represents higher-usage users. Across both clusters, there is a positive relationship between time spent and stress levels. Notably, Cluster 2 exhibits both higher variability and higher stress levels overall, suggesting that heavy Instagram usage may be associated with increased stress.

library(plotly)

cluster_profile <- clustered_df %>%
  group_by(cluster) %>%
  summarise(
    stress = mean(perceived_stress_score, na.rm = TRUE),
    happiness = mean(self_reported_happiness, na.rm = TRUE),
    sleep = mean(sleep_hours_per_night, na.rm = TRUE),
    daily_minutes = mean(daily_active_minutes_instagram, na.rm = TRUE),
    feed_time = mean(time_on_feed_per_day, na.rm = TRUE),
    reels_time = mean(time_on_reels_per_day, na.rm = TRUE)
  ) %>%
  pivot_longer(
    cols = -cluster,
    names_to = "variable",
    values_to = "average"
  )

p_cluster_profile <- ggplot(
  cluster_profile,
  aes(
    x = variable,
    y = average,
    fill = as.factor(cluster),
    text = paste(
      "Cluster:", cluster,
      "<br>Variable:", variable,
      "<br>Average:", round(average, 2)
    )
  )
) +
  geom_col(position = "dodge") +
  labs(
    title = "Average Variable Values by Cluster",
    x = "Variable",
    y = "Average Value",
    fill = "Cluster"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 35, hjust = 1))

ggplotly(p_cluster_profile, tooltip = "text")

Conclusions

In conclusion the final analysis shows us that there is a relatively consistent positive relationship between Instagram usage and perceived stress, indicating that individuals who spend more time on the platform tend to report higher stress levels. This is consistent with previous articles reporting that more frequent use of social media can lead to more perceived stress as well as depression. We also see that both age and sleep hours per night are not good reasonings as to why someone may be more or less stressed with the relationship being nearly obsolete.

Future Studies

A future study into this niche would require a more in depth look into multiple social media platforms such as youtube, tiktok,facebook,etc. This would give us a more broad scope and a more accurate depiction on the effects of social media on one’s overall life. This study limits us strictly to instagram so we can’t necessarily generalize this analysis for all social media users.

The findings presented in this project are exclusive to this course and were not in this or previous semesters and will not be presented in any other courses during this semester.

Contact

Geoffrey Kirnon II: gkirnon@students.kennesaw.edu

Aamiri Ducksworth: aducksw2@students.kennesaw.edu