# Alana Survey Data
library(Hmisc)
library(foreign)
library(faux)
library(lme4)
library(nlme)
library(tableone)
library(Epi)

# Set working directory
## setwd('C:/Users/25105517/OneDrive - NSW Health Department/Data/')
## setwd('~/OneDrive - NSW Health Department/Data/')
setwd('~/OneDrive - University of Wollongong/Data/')
## setwd("C:/Users/25105517/OneDrive - University of Wollongong/Data/")

# Load CSV file from working directory
dta <- read.csv('alanaFSurverySept2023.csv', header = T, sep = ',')

# Calculate age from date of survey and DOB
dta$age <- (dta$formdate - dta$DOB)/(365.25*24*60*60)
min(dta$age)
## [1] 5.045859
max(dta$age)
## [1] 12.11773
# Create id
dta$id <- 1:length(dta[,1])
# Subset data for analysis
names(dta)
##   [1] "X"            "Q1"           "Q10"          "Q14"          "Q15"         
##   [6] "Q19"          "Q1A"          "Q1B"          "Q1C"          "Q2"          
##  [11] "Q2_3_TEXT"    "Q2_3_0"       "Q2_3_1"       "Q2_3_2"       "Q2_3_3"      
##  [16] "Q2_3_4"       "Q2_3_5"       "Q2_3_6"       "Q3"           "Q30"         
##  [21] "Q31"          "Q32"          "Q33"          "Q34"          "Q35"         
##  [26] "Q36"          "Q4"           "Q40"          "Q41"          "Q42"         
##  [31] "Q43"          "Q44"          "Q45"          "Q46"          "Q5"          
##  [36] "Q50"          "Q51"          "Q52"          "Q53"          "Q54"         
##  [41] "Q55"          "Q56"          "Q6"           "Q60"          "Q61"         
##  [46] "Q62"          "Q63"          "Q64"          "Q65"          "Q66"         
##  [51] "Q7"           "Q8"           "Q8_3_TEXT"    "Q8_3_0"       "Q8_3_1"      
##  [56] "Q8_3_2"       "Q8_3_3"       "Q8_3_4"       "Q8_3_5"       "Q8_3_6"      
##  [61] "DOB"          "Q11"          "Q12"          "Q12_1_TEXT"   "Q12_10"      
##  [66] "Q12_11"       "Q12_12"       "Q12_13"       "Q12_14"       "Q12_15"      
##  [71] "Q12_16"       "Q13"          "Q130"         "Q131"         "Q132"        
##  [76] "Q133"         "Q134"         "Q135"         "Q136"         "Q14_1"       
##  [81] "Q14_2"        "Q14_3"        "Q14_4"        "Q14_5"        "Q14_6"       
##  [86] "Q14_7"        "Q14_8"        "Q14_8_TEXT"   "Q14_80"       "Q14_81"      
##  [91] "Q14_82"       "Q14_83"       "Q14_84"       "Q14_85"       "Q14_86"      
##  [96] "Q15_1"        "Q15_2"        "Q15_3"        "Q15_4"        "Q15_5"       
## [101] "Q15_6"        "Q16"          "Q160"         "Q161"         "Q162"        
## [106] "Q163"         "Q164"         "Q165"         "Q166"         "Q17"         
## [111] "Q18"          "Q180"         "Q181"         "Q182"         "Q183"        
## [116] "Q184"         "Q185"         "Q186"         "Q10_1"        "Q10_2"       
## [121] "Q10_3"        "Q10_4"        "Q10_5"        "Q10_6"        "Q10_6_TEXT"  
## [126] "Q10_60"       "Q10_61"       "Q10_62"       "Q10_63"       "Q10_64"      
## [131] "Q10_65"       "Q10_66"       "Group"        "Child.Tray.1" "Child.Tray.2"
## [136] "Child.Tray.3" "Adult.Tray.1" "Adult.Tray.2" "Adult.Tray.3" "formdate"    
## [141] "age"          "id"
describe(dta[,c(141,133,134:139)])
## dta[, c(141, 133, 134:139)] 
## 
##  8  Variables      49  Observations
## --------------------------------------------------------------------------------
## age 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       49        0       48        1     8.42    2.276    5.288    5.560 
##      .25      .50      .75      .90      .95 
##    6.658    8.739   10.034   10.737   11.114 
## 
## lowest :  5.045859  5.221081  5.259411  5.330595  5.492129
## highest: 10.951403 11.025325 11.173169 11.603012 12.117728
## --------------------------------------------------------------------------------
## Group 
##        n  missing distinct     Info     Mean      Gmd 
##       49        0        3    0.889     1.98   0.9116 
##                             
## Value          1     2     3
## Frequency     17    16    16
## Proportion 0.347 0.327 0.327
## --------------------------------------------------------------------------------
## Child.Tray.1 
##        n  missing distinct 
##       49        0        4 
##                                                       
## Value         cookies      fruit muesli bar    yoghurt
## Frequency          21         10          9          9
## Proportion      0.429      0.204      0.184      0.184
## --------------------------------------------------------------------------------
## Child.Tray.2 
##        n  missing distinct 
##       49        0        5 
## 
## lowest :                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
## highest:                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
##                                                                  
## Value                    cookies      fruit muesli bar    yoghurt
## Frequency          17          8         16          7          1
## Proportion      0.347      0.163      0.327      0.143      0.020
## --------------------------------------------------------------------------------
## Child.Tray.3 
##        n  missing distinct 
##       49        0        4 
##                                                       
## Value                    cookies      fruit muesli bar
## Frequency          17         22          3          7
## Proportion      0.347      0.449      0.061      0.143
## --------------------------------------------------------------------------------
## Adult.Tray.1 
##        n  missing distinct 
##       49        0        3 
##                                            
## Value           fruit muesli bar    yoghurt
## Frequency          33          1         15
## Proportion      0.673      0.020      0.306
## --------------------------------------------------------------------------------
## Adult.Tray.2 
##        n  missing distinct 
##       49        0        5 
## 
## lowest :                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
## highest:                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
##                                                                  
## Value                    cookies      fruit muesli bar    yoghurt
## Frequency          17          3          9          2         18
## Proportion      0.347      0.061      0.184      0.041      0.367
## --------------------------------------------------------------------------------
## Adult.Tray.3 
##        n  missing distinct 
##       49        0        5 
## 
## lowest :                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
## highest:                                                                                                                                                                                                                                                                 cookies                                                                                                                                                                                                                                                         fruit                                                                                                                                                                                                                                                           muesli bar                                                                                                                                                                                                                                                      yoghurt                                                                                                                                                                                                                                                        
##                                                                  
## Value                    cookies      fruit muesli bar    yoghurt
## Frequency          17         13          4          2         13
## Proportion      0.347      0.265      0.082      0.041      0.265
## --------------------------------------------------------------------------------

Child outcomes

d <- subset(dta, select = c(id,Group,age,Q2,Q1,Q5,Q16,
                            Child.Tray.1:Child.Tray.3))

names(d) <- c('id','Group','age','sex','relation',
              'suburb','whoBuys.food',
              'child.1','child.2','child.3')

# Labels
describe(d$relation)
## d$relation 
##        n  missing distinct 
##       49        0        3 
##                             
## Value      Aunty   Dad   Mum
## Frequency      2    22    25
## Proportion 0.041 0.449 0.510
table(d$relation)
## 
## Aunty                                                                                                                                                                                                                                                           
##                                                                                                                                                                                                                                                               2 
## Dad                                                                                                                                                                                                                                                             
##                                                                                                                                                                                                                                                              22 
## Mum                                                                                                                                                                                                                                                             
##                                                                                                                                                                                                                                                              25
d$relation <- factor(substr(d$relation,1,1), level = c("A","D","M"),
                                             labels = c('Aunty','Dad','Mum')) 
d$Group <- factor(as.numeric(d$Group), levels = 1:3,
                           labels = c('Control','healthy','unhealthy'))
table(d$Group)
## 
##   Control   healthy unhealthy 
##        17        16        16
# classify healthy choices
d$c1 <- ifelse(d$child.1 %in% c('fruit','yogurt'), 1,0)
d$c2 <- ifelse(d$child.2 %in% c('fruit','yogurt'), 1,0)
d$c3 <- ifelse(d$child.3 %in% c('fruit','yogurt'), 1,0)

table(d$c1, d$child.1)
##    
##     cookies fruit muesli bar yoghurt
##   0      21     0          9       9
##   1       0    10          0       0
table(d$c2, d$child.2)
##    
##                                                                                                                                                                                                                                                                    
##   0                                                                                                                                                                                                                                                              17
##   1                                                                                                                                                                                                                                                               0
##    
##     cookies fruit muesli bar yoghurt
##   0       8     0          7       1
##   1       0    16          0       0
table(d$c3, d$child.3)
##    
##                                                                                                                                                                                                                                                                    
##   0                                                                                                                                                                                                                                                              17
##   1                                                                                                                                                                                                                                                               0
##    
##     cookies fruit muesli bar
##   0      22     0          7
##   1       0     3          0
head(d)
##   id     Group       age    sex relation
## 1  1 unhealthy  6.362765 Female      Mum
## 2  2 unhealthy 10.261465   Male      Dad
## 3  3 unhealthy 10.042437 Female      Mum
## 4  4 unhealthy  7.863107   Male      Dad
## 5  5 unhealthy  9.738535 Female      Mum
## 6  6   healthy 10.951403 Female      Mum
##                                                                                                                                                                                                                                                            suburb
## 1 Narellan                                                                                                                                                                                                                                                       
## 2 Mount Annan                                                                                                                                                                                                                                                    
## 3 Spring Farm                                                                                                                                                                                                                                                    
## 4 Harrington park                                                                                                                                                                                                                                                
## 5 Narellan                                                                                                                                                                                                                                                       
## 6 Rosemeadow                                                                                                                                                                                                                                                     
##                                                                                                                                                                                                                                                      whoBuys.food
## 1 Mum                                                                                                                                                                                                                                                            
## 2 Mum and dad                                                                                                                                                                                                                                                    
## 3 Myself                                                                                                                                                                                                                                                         
## 4 Mum and dad                                                                                                                                                                                                                                                    
## 5 Mum                                                                                                                                                                                                                                                            
## 6 Mum                                                                                                                                                                                                                                                            
##      child.1    child.2 child.3 c1 c2 c3
## 1    cookies muesli bar cookies  0  0  0
## 2    cookies      fruit cookies  0  1  0
## 3    cookies    cookies   fruit  0  0  1
## 4    cookies    cookies cookies  0  0  0
## 5 muesli bar    cookies cookies  0  0  0
## 6      fruit      fruit   fruit  1  1  1
kableone(CreateTableOne(data = d,
                        vars = c("age","sex","relation", 
                                 "whoBuys.food"),
                        factorVars = c("sex","relation",
                                       "whoBuys.food"),
                        strata = "Group",
                        addOverall = T))
Overall Control healthy unhealthy p test
n 49 17 16 16
age (mean (SD)) 8.42 (1.97) 8.44 (1.88) 8.38 (1.99) 8.44 (2.16) 0.995
sex = Male (%) 23 (46.9) 9 (52.9) 8 (50.0) 6 (37.5) 0.645
relation (%) 0.349
Aunty 2 ( 4.1) 0 ( 0.0) 0 ( 0.0) 2 (12.5)
Dad 22 (44.9) 8 (47.1) 8 (50.0) 6 (37.5)
Mum 25 (51.0) 9 (52.9) 8 (50.0) 8 (50.0)
whoBuys.food (%) 0.150
Aunty 1 ( 2.0) 0 ( 0.0) 0 ( 0.0) 1 ( 6.2)
Dad 4 ( 8.2) 1 ( 5.9) 2 (12.5) 1 ( 6.2)
Mum 21 (42.9) 6 (35.3) 7 (43.8) 8 (50.0)
Mum and dad 15 (30.6) 9 (52.9) 2 (12.5) 4 (25.0)
Myself 1 ( 2.0) 0 ( 0.0) 0 ( 0.0) 1 ( 6.2)
Parents 7 (14.3) 1 ( 5.9) 5 (31.2) 1 ( 6.2)
# long file for repeat measure of group 2 and group 3
names(d)
##  [1] "id"           "Group"        "age"          "sex"          "relation"    
##  [6] "suburb"       "whoBuys.food" "child.1"      "child.2"      "child.3"     
## [11] "c1"           "c2"           "c3"
d.long <- reshape(d, idvar = 'id',
                     varying = list(11:13),
                     direction = 'long',
                     v.names = 'yC')
d.long <- d.long[order(d.long$id, d.long$time),]
d.long$n <- 1
head(d.long)
##     id     Group       age    sex relation
## 1.1  1 unhealthy  6.362765 Female      Mum
## 1.2  1 unhealthy  6.362765 Female      Mum
## 1.3  1 unhealthy  6.362765 Female      Mum
## 2.1  2 unhealthy 10.261465   Male      Dad
## 2.2  2 unhealthy 10.261465   Male      Dad
## 2.3  2 unhealthy 10.261465   Male      Dad
##                                                                                                                                                                                                                                                              suburb
## 1.1 Narellan                                                                                                                                                                                                                                                       
## 1.2 Narellan                                                                                                                                                                                                                                                       
## 1.3 Narellan                                                                                                                                                                                                                                                       
## 2.1 Mount Annan                                                                                                                                                                                                                                                    
## 2.2 Mount Annan                                                                                                                                                                                                                                                    
## 2.3 Mount Annan                                                                                                                                                                                                                                                    
##                                                                                                                                                                                                                                                        whoBuys.food
## 1.1 Mum                                                                                                                                                                                                                                                            
## 1.2 Mum                                                                                                                                                                                                                                                            
## 1.3 Mum                                                                                                                                                                                                                                                            
## 2.1 Mum and dad                                                                                                                                                                                                                                                    
## 2.2 Mum and dad                                                                                                                                                                                                                                                    
## 2.3 Mum and dad                                                                                                                                                                                                                                                    
##     child.1    child.2 child.3 time yC n
## 1.1 cookies muesli bar cookies    1  0 1
## 1.2 cookies muesli bar cookies    2  0 1
## 1.3 cookies muesli bar cookies    3  0 1
## 2.1 cookies      fruit cookies    1  0 1
## 2.2 cookies      fruit cookies    2  1 1
## 2.3 cookies      fruit cookies    3  0 1
# Tables of outcome
# Children
stat.table(Group, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yC),
                                  'Healthy (%)' = ratio(yC,n, 100)),
                                  data = d.long,
                                  margin = T)
##  ------------------------------------ 
##  Group             N Healthy Healthy  
##                          (n)     (%)  
##  ------------------------------------ 
##  Control       51.00    2.00    3.92  
##  healthy       48.00   21.00   43.75  
##  unhealthy     48.00    6.00   12.50  
##                                       
##  Total        147.00   29.00   19.73  
##  ------------------------------------
stat.table(sex, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yC),
                                  'Healthy (%)' = ratio(yC,n, 100)),
                                  data = d.long,
                                  margin = T)
##  --------------------------------- 
##  sex            N Healthy Healthy  
##                       (n)     (%)  
##  --------------------------------- 
##  Female     78.00   16.00   20.51  
##  Male       69.00   13.00   18.84  
##                                    
##  Total     147.00   29.00   19.73  
##  ---------------------------------
stat.table(relation, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yC),
                                  'Healthy (%)' = ratio(yC,n, 100)),
                                   data = d.long,
                                   margin = T)
##  ----------------------------------- 
##  relation         N Healthy Healthy  
##                         (n)     (%)  
##  ----------------------------------- 
##  Aunty         6.00    1.00   16.67  
##  Dad          66.00   13.00   19.70  
##  Mum          75.00   15.00   20.00  
##                                      
##  Total       147.00   29.00   19.73  
##  -----------------------------------
kableone(CreateTableOne(data = d.long,
                        vars = "yC",
                        factorVars = "yC",
                        strata = "Group",
                        addOverall = T))
Overall Control healthy unhealthy p test
n 147 51 48 48
yC = 1 (%) 29 (19.7) 2 (3.9) 21 (43.8) 6 (12.5) <0.001
# Just Group
binGLME.adj <- glmer(cbind(yC,n) ~ Group + (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yC, n) ~ Group + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    107.3    119.3    -49.7     99.3      143 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.6614 -0.3536 -0.1980 -0.1980  3.4307 
## 
## Random effects:
##  Groups Name        Variance Std.Dev.
##  id     (Intercept) 0        0       
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     -3.2387     0.7208  -4.493 7.03e-06 ***
## Grouphealthy     2.4120     0.7669   3.145  0.00166 ** 
## Groupunhealthy   1.1592     0.8409   1.379  0.16803    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt
## Grouphelthy -0.940       
## Groupnhlthy -0.857  0.806
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:3,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:3,1] - (1.96 * tab$coef[2:3,2])),2),',',
                         round(exp(tab$coef[2:3,1] + (1.96 * tab$coef[2:3,2])),2), sep = ''))
##                Rate Ratio = (95% CI)    
## Grouphealthy   "11.16"      "2.48,50.15"
## Groupunhealthy "3.19"       "0.61,16.57"
# Group adjusted for age and sex
binGLME.adj <- glmer(cbind(yC,n) ~ Group +
                                   age + 
                                   sex + 
                                   (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yC, n) ~ Group + age + sex + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    111.1    129.0    -49.6     99.1      141 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.7210 -0.3767 -0.2162 -0.1850  3.1330 
## 
## Random effects:
##  Groups Name        Variance  Std.Dev. 
##  id     (Intercept) 3.781e-16 1.944e-08
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                Estimate Std. Error z value Pr(>|z|)   
## (Intercept)    -2.86870    1.17215  -2.447  0.01439 * 
## Grouphealthy    2.41800    0.76756   3.150  0.00163 **
## Groupunhealthy  1.14800    0.84267   1.362  0.17309   
## age            -0.03645    0.10849  -0.336  0.73688   
## sexMale        -0.14321    0.43456  -0.330  0.74174   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt Grpnhl age   
## Grouphelthy -0.550                     
## Groupnhlthy -0.525  0.804              
## age         -0.770 -0.033 -0.015       
## sexMale     -0.238 -0.014  0.055  0.088
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:5,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:5,1] - (1.96 * tab$coef[2:5,2])),2),',',
                         round(exp(tab$coef[2:5,1] + (1.96 * tab$coef[2:5,2])),2), sep = ''))
##                Rate Ratio = (95% CI)    
## Grouphealthy   "11.22"      "2.49,50.52"
## Groupunhealthy "3.15"       "0.6,16.44" 
## age            "0.96"       "0.78,1.19" 
## sexMale        "0.87"       "0.37,2.03"
# Group, age, sex and parent
binGLME.adj <- glmer(cbind(yC,n) ~ Group +
                       age + 
                       sex + 
                       relation +
                       (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yC, n) ~ Group + age + sex + relation + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    114.8    138.8    -49.4     98.8      139 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.7131 -0.3744 -0.2202 -0.1915  3.0697 
## 
## Random effects:
##  Groups Name        Variance  Std.Dev. 
##  id     (Intercept) 1.375e-16 1.172e-08
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                Estimate Std. Error z value Pr(>|z|)   
## (Intercept)     -2.6360     1.5407  -1.711  0.08709 . 
## Grouphealthy     2.3590     0.7684   3.070  0.00214 **
## Groupunhealthy   1.0598     0.8644   1.226  0.22021   
## age             -0.0328     0.1106  -0.297  0.76677   
## sexMale        -15.4563   512.0000  -0.030  0.97592   
## relationDad     15.1213   512.0012   0.030  0.97644   
## relationMum     -0.2159     1.2191  -0.177  0.85941   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt Grpnhl age    sexMal rltnDd
## Grouphelthy -0.427                                   
## Groupnhlthy -0.536  0.786                            
## age         -0.441 -0.030 -0.052                     
## sexMale      0.000  0.000  0.000  0.000              
## relationDad -0.001  0.000  0.000 -0.001 -1.000       
## relationMum -0.649  0.010  0.221 -0.204  0.000  0.002
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:7,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:7,1] - (1.96 * tab$coef[2:7,2])),2),',',
                         round(exp(tab$coef[2:7,1] + (1.96 * tab$coef[2:7,2])),2), sep = ''))
##                Rate Ratio = (95% CI)    
## Grouphealthy   "10.58"      "2.35,47.71"
## Groupunhealthy "2.89"       "0.53,15.71"
## age            "0.97"       "0.78,1.2"  
## sexMale        "0"          "0,Inf"     
## relationDad    "3690499.01" "0,Inf"     
## relationMum    "0.81"       "0.07,8.79"

Adult outcomes

d <- subset(dta, select = c(id,Group,age,Q2,Q1,Q5,Q16,
                            Adult.Tray.1:Adult.Tray.3))

names(d) <- c('id','Group','age','sex','relation',
              'suburb','whoBuys.food',
              'Adult.1','Adult.2','Adult.3')

# Labels
d$relation <- factor(substr(d$relation,1,1), level = c("A","D","M"),
                                             labels = c('Aunty','Dad','Mum')) 
d$Group <- factor(as.numeric(d$Group), levels = 1:3,
                           labels = c('Control','healthy','unhealthy'))
table(d$Group)
## 
##   Control   healthy unhealthy 
##        17        16        16
# classify healthy choices
d$a1 <- ifelse(d$Adult.1 %in% c('fruit','yogurt'), 1,0)
d$a2 <- ifelse(d$Adult.2 %in% c('fruit','yogurt'), 1,0)
d$a3 <- ifelse(d$Adult.3 %in% c('fruit','yogurt'), 1,0)

table(d$a1, d$Adult.1)
##    
##     fruit muesli bar yoghurt
##   0     0          1      15
##   1    33          0       0
table(d$a2, d$Adult.2)
##    
##                                                                                                                                                                                                                                                                    
##   0                                                                                                                                                                                                                                                              17
##   1                                                                                                                                                                                                                                                               0
##    
##     cookies fruit muesli bar yoghurt
##   0       3     0          2      18
##   1       0     9          0       0
table(d$a3, d$Adult.3)
##    
##                                                                                                                                                                                                                                                                    
##   0                                                                                                                                                                                                                                                              17
##   1                                                                                                                                                                                                                                                               0
##    
##     cookies fruit muesli bar yoghurt
##   0      13     0          2      13
##   1       0     4          0       0
head(d)
##   id     Group       age    sex relation
## 1  1 unhealthy  6.362765 Female      Mum
## 2  2 unhealthy 10.261465   Male      Dad
## 3  3 unhealthy 10.042437 Female      Mum
## 4  4 unhealthy  7.863107   Male      Dad
## 5  5 unhealthy  9.738535 Female      Mum
## 6  6   healthy 10.951403 Female      Mum
##                                                                                                                                                                                                                                                            suburb
## 1 Narellan                                                                                                                                                                                                                                                       
## 2 Mount Annan                                                                                                                                                                                                                                                    
## 3 Spring Farm                                                                                                                                                                                                                                                    
## 4 Harrington park                                                                                                                                                                                                                                                
## 5 Narellan                                                                                                                                                                                                                                                       
## 6 Rosemeadow                                                                                                                                                                                                                                                     
##                                                                                                                                                                                                                                                      whoBuys.food
## 1 Mum                                                                                                                                                                                                                                                            
## 2 Mum and dad                                                                                                                                                                                                                                                    
## 3 Myself                                                                                                                                                                                                                                                         
## 4 Mum and dad                                                                                                                                                                                                                                                    
## 5 Mum                                                                                                                                                                                                                                                            
## 6 Mum                                                                                                                                                                                                                                                            
##   Adult.1    Adult.2    Adult.3 a1 a2 a3
## 1 yoghurt    yoghurt    cookies  0  0  0
## 2   fruit    yoghurt    cookies  1  0  0
## 3   fruit muesli bar    cookies  1  0  0
## 4   fruit      fruit muesli bar  1  1  0
## 5 yoghurt      fruit    cookies  0  1  0
## 6 yoghurt    yoghurt    yoghurt  0  0  0
# long file for repeat measure of group 2 and group 3
names(d)
##  [1] "id"           "Group"        "age"          "sex"          "relation"    
##  [6] "suburb"       "whoBuys.food" "Adult.1"      "Adult.2"      "Adult.3"     
## [11] "a1"           "a2"           "a3"
d.long <- reshape(d, idvar = 'id',
                     varying = list(11:13),
                     direction = 'long',
                     v.names = 'yA')
d.long <- d.long[order(d.long$id, d.long$time),]
d.long$n <- 1
describe(d$id)
## d$id 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       49        0       49        1       25    16.67      3.4      5.8 
##      .25      .50      .75      .90      .95 
##     13.0     25.0     37.0     44.2     46.6 
## 
## lowest :  1  2  3  4  5, highest: 45 46 47 48 49
describe(d.long$id)
## d.long$id 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      147        0       49        1       25    16.44      3.0      5.6 
##      .25      .50      .75      .90      .95 
##     13.0     25.0     37.0     44.4     47.0 
## 
## lowest :  1  2  3  4  5, highest: 45 46 47 48 49
head(d.long)
##     id     Group       age    sex relation
## 1.1  1 unhealthy  6.362765 Female      Mum
## 1.2  1 unhealthy  6.362765 Female      Mum
## 1.3  1 unhealthy  6.362765 Female      Mum
## 2.1  2 unhealthy 10.261465   Male      Dad
## 2.2  2 unhealthy 10.261465   Male      Dad
## 2.3  2 unhealthy 10.261465   Male      Dad
##                                                                                                                                                                                                                                                              suburb
## 1.1 Narellan                                                                                                                                                                                                                                                       
## 1.2 Narellan                                                                                                                                                                                                                                                       
## 1.3 Narellan                                                                                                                                                                                                                                                       
## 2.1 Mount Annan                                                                                                                                                                                                                                                    
## 2.2 Mount Annan                                                                                                                                                                                                                                                    
## 2.3 Mount Annan                                                                                                                                                                                                                                                    
##                                                                                                                                                                                                                                                        whoBuys.food
## 1.1 Mum                                                                                                                                                                                                                                                            
## 1.2 Mum                                                                                                                                                                                                                                                            
## 1.3 Mum                                                                                                                                                                                                                                                            
## 2.1 Mum and dad                                                                                                                                                                                                                                                    
## 2.2 Mum and dad                                                                                                                                                                                                                                                    
## 2.3 Mum and dad                                                                                                                                                                                                                                                    
##     Adult.1 Adult.2 Adult.3 time yA n
## 1.1 yoghurt yoghurt cookies    1  0 1
## 1.2 yoghurt yoghurt cookies    2  0 1
## 1.3 yoghurt yoghurt cookies    3  0 1
## 2.1   fruit yoghurt cookies    1  1 1
## 2.2   fruit yoghurt cookies    2  0 1
## 2.3   fruit yoghurt cookies    3  0 1
# Tables of outcome
# Adults
stat.table(Group, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yA),
                                  'Healthy (%)' = ratio(yA,n, 100)),
                                   data = d.long,
                                   margin = T)
##  ------------------------------------ 
##  Group             N Healthy Healthy  
##                          (n)     (%)  
##  ------------------------------------ 
##  Control       51.00    8.00   15.69  
##  healthy       48.00   18.00   37.50  
##  unhealthy     48.00   20.00   41.67  
##                                       
##  Total        147.00   46.00   31.29  
##  ------------------------------------
stat.table(sex, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yA),
                                  'Healthy (%)' = ratio(yA,n, 100)),
                                  data = d.long,
                                  margin = T)
##  --------------------------------- 
##  sex            N Healthy Healthy  
##                       (n)     (%)  
##  --------------------------------- 
##  Female     78.00   24.00   30.77  
##  Male       69.00   22.00   31.88  
##                                    
##  Total     147.00   46.00   31.29  
##  ---------------------------------
stat.table(relation, contents = list(N = sum(n),
                                  'Healthy (n)' = sum(yA),
                                  'Healthy (%)' = ratio(yA,n, 100)),
                                   data = d.long,
                                   margin = T)
##  ----------------------------------- 
##  relation         N Healthy Healthy  
##                         (n)     (%)  
##  ----------------------------------- 
##  Aunty         6.00    2.00   33.33  
##  Dad          66.00   22.00   33.33  
##  Mum          75.00   22.00   29.33  
##                                      
##  Total       147.00   46.00   31.29  
##  -----------------------------------
kableone(CreateTableOne(data = d.long,
                        vars = "yA",
                        factorVars = "yA",
                        strata = "Group",
                        addOverall = T))
Overall Control healthy unhealthy p test
n 147 51 48 48
yA = 1 (%) 46 (31.3) 8 (15.7) 18 (37.5) 20 (41.7) 0.011
# Just Group
binGLME.adj <- glmer(cbind(yA,n) ~ Group + (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yA, n) ~ Group + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    150.8    162.8    -71.4    142.8      143 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.6455 -0.6124 -0.3961  0.6390  1.5053 
## 
## Random effects:
##  Groups Name        Variance Std.Dev.
##  id     (Intercept) 0        0       
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     -1.8524     0.3803  -4.871 1.11e-06 ***
## Grouphealthy     0.8716     0.4701   1.854   0.0637 .  
## Groupunhealthy   0.9769     0.4642   2.105   0.0353 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt
## Grouphelthy -0.809       
## Groupnhlthy -0.819  0.663
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:3,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:3,1] - (1.96 * tab$coef[2:3,2])),2),',',
                         round(exp(tab$coef[2:3,1] + (1.96 * tab$coef[2:3,2])),2), sep = ''))
##                Rate Ratio = (95% CI)   
## Grouphealthy   "2.39"       "0.95,6.01"
## Groupunhealthy "2.66"       "1.07,6.6"
# Group adjusted for age and sex
binGLME.adj <- glmer(cbind(yA,n) ~ Group +
                                   age + 
                                   sex + 
                                   (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yA, n) ~ Group + age + sex + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    154.6    172.6    -71.3    142.6      141 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.6899 -0.6117 -0.4048  0.6243  1.6470 
## 
## Random effects:
##  Groups Name        Variance Std.Dev.
##  id     (Intercept) 0        0       
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                Estimate Std. Error z value Pr(>|z|)  
## (Intercept)    -2.13456    0.85252  -2.504   0.0123 *
## Grouphealthy    0.87903    0.47081   1.867   0.0619 .
## Groupunhealthy  0.98122    0.46689   2.102   0.0356 *
## age             0.02783    0.08931   0.312   0.7554  
## sexMale         0.08802    0.34623   0.254   0.7993  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt Grpnhl age   
## Grouphelthy -0.390                     
## Groupnhlthy -0.342  0.661              
## age         -0.867  0.023 -0.049       
## sexMale     -0.135  0.040  0.096 -0.099
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:5,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:5,1] - (1.96 * tab$coef[2:5,2])),2),',',
                         round(exp(tab$coef[2:5,1] + (1.96 * tab$coef[2:5,2])),2), sep = ''))
##                Rate Ratio = (95% CI)   
## Grouphealthy   "2.41"       "0.96,6.06"
## Groupunhealthy "2.67"       "1.07,6.66"
## age            "1.03"       "0.86,1.22"
## sexMale        "1.09"       "0.55,2.15"
# Group, age, sex and parent
binGLME.adj <- glmer(cbind(yA,n) ~ Group +
                       age + 
                       sex + 
                       relation +
                       (1|id), family = binomial, data = d.long)
tab <- summary(binGLME.adj)
tab
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(yA, n) ~ Group + age + sex + relation + (1 | id)
##    Data: d.long
## 
##      AIC      BIC   logLik deviance df.resid 
##    157.7    181.6    -70.8    141.7      139 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -0.6924 -0.6142 -0.4189  0.6034  1.5673 
## 
## Random effects:
##  Groups Name        Variance Std.Dev.
##  id     (Intercept) 0        0       
## Number of obs: 147, groups:  id, 49
## 
## Fixed effects:
##                  Estimate Std. Error z value Pr(>|z|)  
## (Intercept)      -2.18454    1.10783  -1.972   0.0486 *
## Grouphealthy      0.81639    0.47193   1.730   0.0837 .
## Groupunhealthy    0.93896    0.47664   1.970   0.0488 *
## age               0.02167    0.09098   0.238   0.8118  
## sexMale         -15.70910 1448.15502  -0.011   0.9913  
## relationDad      15.96804 1448.15556   0.011   0.9912  
## relationMum       0.15725    0.89893   0.175   0.8611  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grphlt Grpnhl age    sexMal rltnDd
## Grouphelthy -0.296                                   
## Groupnhlthy -0.384  0.647                            
## age         -0.522  0.032 -0.082                     
## sexMale      0.000  0.000  0.000  0.000              
## relationDad  0.000  0.000  0.000  0.000 -1.000       
## relationMum -0.640 -0.011  0.196 -0.204  0.000  0.001
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## boundary (singular) fit: see ?isSingular
cbind('Rate Ratio =' = round(exp(tab$coef[2:7,1]),2), 
      '(95% CI)' = paste(round(exp(tab$coef[2:7,1] - (1.96 * tab$coef[2:7,2])),2),',',
                         round(exp(tab$coef[2:7,1] + (1.96 * tab$coef[2:7,2])),2), sep = ''))
##                Rate Ratio = (95% CI)   
## Grouphealthy   "2.26"       "0.9,5.71" 
## Groupunhealthy "2.56"       "1,6.51"   
## age            "1.02"       "0.85,1.22"
## sexMale        "0"          "0,Inf"    
## relationDad    "8606616.74" "0,Inf"    
## relationMum    "1.17"       "0.2,6.82"
#-------------------------------- The End -------------------------------------------------------