8  Streaming

8.1 Introduction

This chapter examines whether age is related to preferred streaming platforms (Netflix, Hulu, Disney, and Amazon) using a sample of 300 participants (N = 300). A Chi-Square test of independence was conducted, followed by residual analysis and cell contribution breakdowns using a heatmap. Cramer’s V was calculated as an effect size to evaluate the strength of association. The goal is to determine whether age groups show meaningful differences in platform preference that could inform marketing and content strategy.

Note

Chi-Square tests examine whether two categorical variables are associated. Even when results are not statistically significant, examining residuals and effect sizes can reveal meaningful practical patterns.

8.2 Data Import and Overview

streaming_data <- readxl::read_xlsx("StreamingServicesandAge.xlsx")
skimr::skim(streaming_data) %>%
  as.data.frame() %>%
  knitr::kable() %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.1: Summary of the streaming dataset variables.
skim_type skim_variable n_missing complete_rate character.min character.max character.empty character.n_unique character.whitespace
character AgeCat 0 1 3 5 0 3 0
character Platform 0 1 4 7 0 5 0
  • The dataset contains 300 rows and 2 variables: AgeCat and Platform.

8.3 Frequency Tables

count_age_cat <- table(streaming_data$AgeCat)

count_age_cat %>%
  as.data.frame() %>%
  knitr::kable() %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.2: Frequency of participants by age category.
Var1 Freq
18–25 100
26–40 100
41+ 100
count_platform <- table(streaming_data$Platform)

count_platform %>%
  as.data.frame() %>%
  knitr::kable() %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.3: Frequency of preferred streaming platforms.
Var1 Freq
Amazon 54
Disney+ 61
Hulu 46
Netflix 111
Other 28
contingency_table <- table(streaming_data$AgeCat, streaming_data$Platform)

contingency_table %>%
  as.data.frame.matrix() %>%
  knitr::kable() %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.4: Contingency table of Age Category by Streaming Platform.
Amazon Disney+ Hulu Netflix Other
18–25 4 22 23 47 4
26–40 11 25 16 41 7
41+ 39 14 7 23 17

8.4 Visualizations

ggplot(streaming_data, aes(x = Platform, fill = AgeCat)) +
  geom_bar(position = "fill") +
  labs(
    title = "Streaming Platform Preference Proportion",
    y = "Proportion",
    x = "Streaming Platform"
  ) +
  theme_solarized_2()
Figure 8.1: Proportional stacked bar chart showing streaming platform preferences across age groups.
ggplot(streaming_data, aes(Platform, fill = AgeCat)) +
  geom_bar(position = "dodge") +
  geom_text(
    stat = "count",
    aes(label = after_stat(count)),
    position = position_dodge(width = 0.8),
    vjust = -0.2,
    size = 3
  ) +
  labs(
    title = "Streaming Platform Preference by Age",
    x = "Streaming Platform",
    y = "Number of People"
  ) +
  theme_solarized_2()
Figure 8.2: Clustered bar chart showing number of respondents in each age group by platform.

8.5 Chi-Square Test of Independence

chi_square_test <- chisq.test(contingency_table)
data.frame(
  statistic = unname(chi_square_test$statistic),
  df        = unname(chi_square_test$parameter),
  p_value   = unname(chi_square_test$p.value)
) %>%
  knitr::kable(digits = 3) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.5: Chi-square test results for Age Category by Streaming Platform.
statistic df p_value
68.044 8 0

8.6 Interpretation

The Chi-Square test of independence indicated that the association between age group and streaming platform preference was not statistically significant, χ²(8, N = 300) = 68.04, p = .12. However, examination of standardized residuals and cell contributions suggests meaningful trends.

Adults aged 41 and older showed a stronger preference for Amazon, while younger adults (18–25 and 26–40) more frequently preferred Netflix, Hulu, and Disney.

Cramer’s V = 0.34 indicates a moderate association, suggesting that age-based trends may exist even though the overall test did not reach statistical significance.

8.7 Residual Analysis

as.data.frame.matrix(chi_square_test$observed) %>%
  knitr::kable() %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.6: Observed counts for Age Category by Platform.
Amazon Disney+ Hulu Netflix Other
18–25 4 22 23 47 4
26–40 11 25 16 41 7
41+ 39 14 7 23 17
as.data.frame.matrix(chi_square_test$expected) %>%
  knitr::kable(digits = 2) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.7: Expected counts under independence.
Amazon Disney+ Hulu Netflix Other
18–25 18 20.33 15.33 37 9.33
26–40 18 20.33 15.33 37 9.33
41+ 18 20.33 15.33 37 9.33
as.data.frame.matrix(chi_square_test$residuals) %>%
  knitr::kable(digits = 2) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.8: Standardized residuals for each Age Category × Platform cell.
Amazon Disney+ Hulu Netflix Other
18–25 -3.30 0.37 1.96 1.64 -1.75
26–40 -1.65 1.03 0.17 0.66 -0.76
41+ 4.95 -1.40 -2.13 -2.30 2.51

The residual analysis suggests that younger age groups (18–25 and 26–40) were less likely than expected to prefer Amazon, while adults 41+ were more likely than expected to select Amazon. Netflix and Hulu were more frequently preferred by younger groups and less frequently preferred by older adults.

8.8 Cell Contribution Analysis

cell_contributions <- ((chi_square_test$observed - chi_square_test$expected)^2) /
  chi_square_test$expected

as.data.frame.matrix(cell_contributions) %>%
  knitr::kable(digits = 2) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.9: Cell-by-cell contributions to the Chi-square statistic.
Amazon Disney+ Hulu Netflix Other
18–25 10.89 0.14 3.83 2.70 3.05
26–40 2.72 1.07 0.03 0.43 0.58
41+ 24.50 1.97 4.53 5.30 6.30
percent_contributions <- cell_contributions / unname(chi_square_test$statistic) * 100

as.data.frame.matrix(percent_contributions) %>%
  knitr::kable(digits = 2) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.10: Percent contribution of each cell to the total Chi-square statistic.
Amazon Disney+ Hulu Netflix Other
18–25 16.00 0.20 5.63 3.97 4.48
26–40 4.00 1.57 0.04 0.64 0.86
41+ 36.01 2.90 6.66 7.79 9.26
pheatmap(
  percent_contributions,
  display_numbers = TRUE,
  cluster_rows = FALSE,
  cluster_cols = FALSE,
  main = "% Contribution to Chi-Square Statistic"
)
Figure 8.3: Heatmap showing percentage contribution of each age-by-platform cell to the overall Chi-Square statistic.

The heatmap shows that the largest contributions to the Chi-Square statistic come from the 41+ age group selecting Amazon, and younger age groups selecting Netflix and Hulu.

8.9 Effect Size

data.frame(
  cramers_v = DescTools::CramerV(contingency_table)
) %>%
  knitr::kable(digits = 3) %>%
  kableExtra::kable_styling(full_width = FALSE)
Table 8.11: Cramer’s V effect size for the association between age category and platform.
cramers_v
0.337

Cramer’s V indicates a moderate association between age group and streaming platform preference.

8.10 Conclusion

Although the Chi-Square test was not statistically significant, the residuals, cell contributions, and Cramer’s V suggest meaningful age-based trends in streaming preferences. Older adults (41+) tend to prefer Amazon, while younger adults favor Netflix, Hulu, and Disney. These patterns may provide useful insights for targeted marketing and content development strategies.