Home > Mobile >  How to use McNemar's test in gt_summary table?
How to use McNemar's test in gt_summary table?

Time:01-04

I have a longitudinal data frame which has some patient symptoms recorded before and after doing vaccination. I am using gt_summary for creating summary table and doing McNemar's test. The test result of McNemar is coming incorrect as the gt_summary doesn't give crosstabs (2X2) for before and after vaccination. This is the code I am using

trial_paired %>%
  
  filter(complete.cases(.)) %>%

  group_by(id) %>%
  filter(n() == 2) %>%
  ungroup() %>%

  tbl_summary(type = list(c(Pain, Redness, Swelling, Tiredness, Headache, Muscle, Chills, Fever, Nausea, JointPain, `Allergic reaction`) ~ "categorical"),by = visit, include = -id) %>%
  add_p(test = list( c(Pain, Redness, Swelling, Tiredness, Headache, Muscle, Chills, Fever, Nausea, JointPain, `Allergic reaction`) ~ "mcnemar.test"), 
        group = id)

This is the output I am getting which is not right. enter image description here

Can someone please help

Following is the sample data

structure(list(visit = c("1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", 
"1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", 
"2"), Pain = c("No", "No", "Yes", "Yes", "No", "No", "Yes", "Yes", 
"Yes", "No", "No", "Yes", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "Yes", "No", "No", "Yes", "No", 
"No", "No", "No", "No", "No", "Yes", "No", "No", "Yes", "No", 
"No", "No", "No", "Yes", "No", "No", "No", "No", "No", "No", 
"Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", 
"No", "No", "No", "No", "No", "No", "Yes", "No", "No", "No", 
"No", "No", "No", "Yes", "No", "Yes", "Yes", "No", "No", "Yes", 
"No", "Yes", "Yes", "Yes", "No", "No", "No", "No", "No", "Yes", 
"No", "Yes", "Yes", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", 
"Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", 
"No", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", 
"No", "No", "Yes", "Yes", "Yes", "Yes", "No", "No", "No", "No", 
"Yes", "No", "No", "No", "No", "No", "No", "No", "Yes", "Yes", 
"Yes", "Yes", "Yes", "Yes", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "Yes", "Yes", "No", "Yes", "No", "No", 
"Yes", "Yes", "No", "No", "Yes", "Yes", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "Yes", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "Yes", "Yes", "No", "Yes"), Redness = c("No", "No", 
"No", "Yes", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"Yes", "No", "No", "No", "No", "Yes", "Yes", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "Yes", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "Yes", "Yes", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No"), Swelling = c("No", 
"No", "No", "No", "No", "No", "No", "No", "Yes", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "Yes", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "Yes", "Yes", "No", "No", 
"No", "No", "No", "No", "No", "No", "Yes", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "Yes", "Yes", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No"), 
    Chills = c("No", "No", "Yes", "Yes", "No", "No", "No", "No", 
    "No", "Yes", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "Yes", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "Yes", 
    "No", "No", "No", "No", "No", "No", "No", "Yes", "No", "No", 
    "No", "No", "No", "No", "No", "Yes", "No", "No", "No", "No", 
    "No", "No", "Yes", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "Yes", "Yes", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "Yes", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
    "No", "No", "No", "No", "No", "No", "No", "Yes", "No", "No", 
    "Yes", "No", "No", "No", "No", "No")), row.names = c(NA, 
-204L), class = c("tbl_df", "tbl", "data.frame"))

CodePudding user response:

The {gtsummary} packages expects paired data to be in a long format (2 observations per ID) and you should be using gtsummary v1.5.0 (the expected data structure was updated in that release).

library(gtsummary)
#> #Uighur
library(tidyverse)
packageVersion("gtsummary")
#> [1] '1.5.0'

# adding a patient ID to the data
df <- 
  df %>% 
  select(visit, Pain, Chills) %>%
  filter(complete.cases(.)) %>%
  group_by(visit) %>%
  mutate(id = row_number(), .before = 1) %>%
  group_by(id) %>%
  filter(n() == 2) %>%
  ungroup()

# creating summary table with McNemars test
tbl <-
  df %>% 
  tbl_summary(
    type = all_dichotomous() ~ "categorical",
    by = visit,
    include = -id
  ) %>%
  add_p(test = everything() ~ "mcnemar.test", group = id)

enter image description here Created on 2022-01-03 by the reprex package (v2.0.1)

  •  Tags:  
  • Related