Are Srishti Dads weird?

Author

Diya Bijoy

Published

November 4, 2025

R Packages Setup

library(ggformula)
Loading required package: ggplot2
Loading required package: scales
Loading required package: ggridges

New to ggformula?  Try the tutorials: 
    learnr::run_tutorial("introduction", package = "ggformula")
    learnr::run_tutorial("refining", package = "ggformula")
library(janitor)

Attaching package: 'janitor'
The following objects are masked from 'package:stats':

    chisq.test, fisher.test
library(mosaic)
Registered S3 method overwritten by 'mosaic':
  method                           from   
  fortify.SpatialPolygonsDataFrame ggplot2

The 'mosaic' package masks several functions from core packages in order to add 
additional features.  The original behavior of these functions should not be affected by this.

Attaching package: 'mosaic'
The following objects are masked from 'package:dplyr':

    count, do, tally
The following object is masked from 'package:Matrix':

    mean
The following object is masked from 'package:scales':

    rescale
The following object is masked from 'package:ggplot2':

    stat
The following objects are masked from 'package:stats':

    binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
    quantile, sd, t.test, var
The following objects are masked from 'package:base':

    max, mean, min, prod, range, sample, sum
library(naniar)
library(skimr)

Attaching package: 'skimr'
The following object is masked from 'package:naniar':

    n_complete
The following object is masked from 'package:mosaic':

    n_missing
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ lubridate 1.9.4     ✔ tibble    3.3.0
✔ purrr     1.1.0     ✔ tidyr     1.3.1
✔ readr     2.1.5     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ readr::col_factor() masks scales::col_factor()
✖ mosaic::count()     masks dplyr::count()
✖ purrr::cross()      masks mosaic::cross()
✖ purrr::discard()    masks scales::discard()
✖ mosaic::do()        masks dplyr::do()
✖ tidyr::expand()     masks Matrix::expand()
✖ dplyr::filter()     masks stats::filter()
✖ dplyr::lag()        masks stats::lag()
✖ tidyr::pack()       masks Matrix::pack()
✖ mosaic::stat()      masks ggplot2::stat()
✖ mosaic::tally()     masks dplyr::tally()
✖ tidyr::unpack()     masks Matrix::unpack()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tinytable)

Attaching package: 'tinytable'

The following object is masked from 'package:ggplot2':

    theme_void
library(visdat)
library(crosstable)

Attaching package: 'crosstable'

The following object is masked from 'package:purrr':

    compact
library(RColorBrewer)
library(naniar)
library(GGally)
library(ggplot2)
library(correlation)

Attaching package: 'correlation'

The following object is masked from 'package:mosaic':

    cor_test
library(dplyr)
library(RColorBrewer)
library(DT)
library(infer)

Attaching package: 'infer'

The following objects are masked from 'package:mosaic':

    prop_test, t_test
library(resampledata)

Attaching package: 'resampledata'

The following object is masked from 'package:datasets':

    Titanic
library(openintro)
Loading required package: airports
Loading required package: cherryblossom
Loading required package: usdata

Attaching package: 'openintro'

The following object is masked from 'package:GGally':

    tips

The following object is masked from 'package:mosaic':

    dotPlot

The following objects are masked from 'package:lattice':

    ethanol, lsegments
library(vcd)
Loading required package: grid

Attaching package: 'vcd'

The following object is masked from 'package:mosaic':

    mplot
library(visStatistics)

Reading the file

weird_dads <- read.csv("3-weird_dads.csv")
glimpse(weird_dads)
Rows: 65
Columns: 4
$ gender       <chr> "F", "F", "M", "F", "M", "M", "M", "M", "F", "M", "F", "M…
$ college      <chr> "SMI", "SMI", "SMI", "SMI", "MIT", "MIT", "MIT", "SMI", "…
$ is_dad_weird <chr> "No", "No", "No", "Yes", "No", "No", "No", "No", "Yes", "…
$ name         <chr> "Manya", "Sradha", "Arun", "Nidhi", "Shaurya", "Pratham",…

Munging

weird_dads_modified <- weird_dads %>% 
  mutate(across(where(is.character), as.factor))%>%
  dplyr::relocate("gender", "college", "is_dad_weird", .after = name)
glimpse(weird_dads_modified)
Rows: 65
Columns: 4
$ name         <fct> Manya, Sradha, Arun, Nidhi, Shaurya, Pratham, Jeevan, Dhr…
$ gender       <fct> F, F, M, F, M, M, M, M, F, M, F, M, F, F, M, M, F, M, M, …
$ college      <fct> SMI, SMI, SMI, SMI, MIT, MIT, MIT, SMI, SMI, SMI, SMI, SM…
$ is_dad_weird <fct> No, No, No, Yes, No, No, No, No, Yes, Yes, Yes, Yes, No, …

Removing NA Values

weird_dads_modified2 <- weird_dads_modified %>% drop_na()

Examining the Data

weird_dads_modified2 %>% 
  group_by(college) %>% 
  count(is_dad_weird)
# A tibble: 4 × 3
# Groups:   college [2]
  college is_dad_weird     n
  <fct>   <fct>        <int>
1 MIT     No              28
2 MIT     Yes              5
3 SMI     No              19
4 SMI     Yes             12
weird_dads_modified2 %>% 
  count(is_dad_weird)
  is_dad_weird  n
1           No 47
2          Yes 17
weird_dads_modified2 %>% 
  group_by(gender) %>% 
  count(is_dad_weird)
# A tibble: 5 × 3
# Groups:   gender [3]
  gender is_dad_weird     n
  <fct>  <fct>        <int>
1 F      No              23
2 F      Yes              9
3 M      No              24
4 M      Yes              7
5 NB     Yes              1

Visualising the Data

weird_dads_modified2 %>% 
  gf_bar(~is_dad_weird | college, fill = ~ is_dad_weird) %>% 
  gf_labs(
    title = "Count of Yes or No to whether dad is weird or not",
    subtitle = "Faceted by College",
    x = "Is your dad weird?",
    y = "Count"
  ) %>% 
  gf_refine(scale_fill_brewer(palette = "Set2")) %>% 
  gf_theme(theme_minimal)

weird_dads_modified2 %>% 
  gf_bar(~is_dad_weird, fill = ~ college, position = "fill") %>% 
  gf_labs(
    title = "Count of Yes or No to whether dad is weird or not",
    subtitle = "Filled by college",
    x = "Is your dad weird?",
    y = "Proportion"
  ) %>% 
  gf_refine(scale_fill_brewer(palette = "Set1")) %>% 
  gf_theme(theme_minimal)

weird_dads_modified2 %>% 
  gf_bar(~is_dad_weird | college, fill = ~ gender, position = "dodge") %>% 
  gf_labs(
    title = "Count of Yes or No to whether dad is weird or not",
    subtitle = "Faceted by college",
    x = "Is your dad weird?",
    y = "Count"
  ) %>% 
  gf_refine(scale_fill_brewer(palette = "Set1")) %>% 
  gf_theme(theme_minimal)

Chisq.test:

Hunch: Are Srishti Dads weird?

Test 1: Dad Weirdness & College

  • H0: Weirdness of dads does not depend on college
  • H1: Weirdness of dads depends on college
contingency_table_college <- vcd::structable(is_dad_weird~ college,
  data = weird_dads_modified2
)
contingency_table_college
        is_dad_weird No Yes
college                    
MIT                  28   5
SMI                  19  12
gss_vcd_table_college <- vcd::structable(college~is_dad_weird,
  data = weird_dads_modified2)

gss_vcd_table_college %>%
  vcd::mosaic(
    gp = shading_max, direction = "v", # Changed shading function
    main = "Dad Weirdness vs College",
    legend = TRUE,
    labeling = labeling_border(
      varnames = c("F", "F"),
      rot_labels = c(90, 0, 0, 0),
      just_labels = c("left", "left", "left", "right")
    )
  )

xq_test_object_college <- chisq.test(contingency_table_college)
xq_test_object_college

    Pearson's Chi-squared test with Yates' continuity correction

data:  contingency_table_college
X-squared = 3.4202, df = 1, p-value = 0.0644
  • P=0.06 which is >0.05, we fail to reject the Null Hypothesis.

  • Therefore, weirdness of dads do not depend on college. Srishti dads are not significantly weirder or less weird than dads from other colleges

xq_test_object_college %>%
  broom::tidy() %>%
  select(statistic) %>%
  as.numeric() -> X_squared_observed_college
X_squared_observed_college
[1] 3.420189
# Determine the Chi-Square critical value
X_squared_critical_college <- qchisq(
  p = .05,
  df = (2 - 1) * (2 - 1), # (nrows-1) * (ncols-1)
  lower.tail = FALSE
)
X_squared_critical_college
[1] 3.841459
mosaic::xqchisq(
  p = 0.95, df = 1,
  return = c("plot"), verbose = F,
  system = "gg"
) %>%
  gf_labs(
    x = "Chi-Square Value", 
    title = "Critical and Observed Chi-Square Values"
  ) %>%
  gf_vline(
    xintercept = X_squared_observed_college,
    color = "red", linewidth = 1
  ) %>%
  gf_vline(
    xintercept = X_squared_critical_college,
    color = "dodgerblue", linewidth = 1
  ) %>%
  gf_annotate(
    x = X_squared_observed_college + 0.2, y = 0.05,
    geom = "label", label = "Observed\nChi-Square",
    fill = "red", alpha = 0.3
  ) %>%
  gf_annotate(
    x = X_squared_critical_college - 0.5, y = 0.05,
    geom = "label", label = "Critical\nChi-Square",
    fill = "lightblue"
  )

Test 2: Dad Weirdness & Gender

  • H0: Perception of dad weirdness is the same for all genders
  • H1: Perception of dad weirdness differs by gender.
contingency_table_gender<- vcd::structable(is_dad_weird~ gender,
  data = weird_dads_modified2
)
contingency_table_gender
       is_dad_weird No Yes
gender                    
F                   23   9
M                   24   7
NB                   0   1
gss_vcd_table_gender <- vcd::structable(gender~is_dad_weird,
  data = weird_dads_modified2)

gss_vcd_table_gender %>%
  vcd::mosaic(
    gp = shading_max, direction = "v", # Changed shading function
    main = "Dad Weirdness vs Gender",
    legend = TRUE,
    labeling = labeling_border(
      varnames = c("F", "F"),
      rot_labels = c(90, 0, 0, 0),
      just_labels = c("left", "left", "left", "right")
    )
  )

xq_test_object_gender<- chisq.test(contingency_table_gender)
Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
incorrect
xq_test_object_gender

    Pearson's Chi-squared test

data:  contingency_table_gender
X-squared = 3.0567, df = 2, p-value = 0.2169

Inference

  • P=0.21 which is >0.05, we fail to reject the Null Hypothesis. Therefore, weirdness of dads do not depend on gender.

  • This shows that gender does not influence perceptions of dad weirdness, both males and females responded similarly when asked if their dads are weird.

xq_test_object_gender %>%
  broom::tidy() %>%
  select(statistic) %>%
  as.numeric() -> X_squared_observed_gender
X_squared_observed_gender
[1] 3.056724
# Determine the Chi-Square critical value
X_squared_critical_gender <- qchisq(
  p = .05,
  df = (2 - 1) * (2 - 1), # (nrows-1) * (ncols-1)
  lower.tail = FALSE
)
X_squared_critical_gender
[1] 3.841459
mosaic::xqchisq(
  p = 0.95, df = 1,
  return = c("plot"), verbose = F,
  system = "gg"
) %>%
  gf_labs(
    x = "Chi-Square Value", 
    title = "Critical and Observed Chi-Square Values"
  ) %>%
  gf_vline(
    xintercept = X_squared_observed_gender,
    color = "red", linewidth = 1
  ) %>%
  gf_vline(
    xintercept = X_squared_critical_gender,
    color = "dodgerblue", linewidth = 1
  ) %>%
  gf_annotate(
    x = X_squared_observed_gender + 0.2, y = 0.05,
    geom = "label", label = "Observed\nChi-Square",
    fill = "red", alpha = 0.3
  ) %>%
  gf_annotate(
    x = X_squared_critical_gender - 0.5, y = 0.05,
    geom = "label", label = "Critical\nChi-Square",
    fill = "lightblue"
  )

Conclusion:

To conclude, chi-square tests indicate that neither college nor gender significantly affect perceptions of dad weirdness. Overall, the hunch that “Srishti dads are weird” is not statistically supported - dads in MIT & SMI seem to have a similar level of weirdness.