library(dplyr)
library(readr)
library(ggplot2)
library(lme4)
library(forcats)
library(gt)
source("predictions.R")

data_file <- "./data/Pointing Elici_all data_2020-04-29.csv"
raw_df <- read_csv(data_file)

# cleaning
df <- raw_df
df <- subset(df, !(`Exclusion code` %in% c(1, 2)))

# make factors
df$Extension <- factor(df$Extension, levels = c("non-full", "full"))
df$Function <- factor(
  df$Function, 
  levels = c("location_load-bearing", "location_load-sharing", "explanatory")
)
df$Function <- fct_recode(
  df$Function, 
  "load-bearing" = "location_load-bearing", 
  "load-sharing" = "location_load-sharing", 
  "explanatory" = "explanatory"
)

df$Group <- factor(df$Group, levels = c("GESTURERS", "SIGNERS" ))
df$Group <- fct_recode(df$Group, "speakers" = "GESTURERS", "signers" = "SIGNERS")

df$Participant <- factor(paste0(df$Group, df$Participant))
df$`Pros unit ID` <- factor(df$`Pros unit ID`)
df$location <- factor(sapply(strsplit(df$Target, "_"), `[[`, 1), levels = c("G", "H", LETTERS[1:6]))
df <- rename(df, "num_words" = "# of words", "num_points" = "# POINTS", "dur" = "Duration - msec")
df$dur_log <- log(df$dur)
df$demonstrative <- factor(
  dplyr::case_when(
    df$demonstrative == 0 ~ "no demonstrative",
    df$demonstrative == 1 ~ "demonstrative",
    TRUE ~ NA_character_,
  ), levels = c("no demonstrative", "demonstrative")
)

coef_ci_table <- function(model) {
    n_digits <- 2
    
    df <- coefplot::coefplot(model, plot = FALSE)
    df %>%
        dplyr::rename(coef. = "Value") %>%
        dplyr::mutate(
            level = gsub("\\(Intercept\\)", "intercept", Coefficient),
            "95% CI" = glue::glue(
                "({round(LowInner, digits = n_digits)}, {round(HighInner, digits = n_digits)})"
            ),
            "99% CI" = glue::glue(
                "({round(LowOuter, digits = n_digits)}, {round(HighOuter, digits = n_digits)})"
            ),
        ) %>% 
        select(c("level", "coef.", "95% CI", "99% CI")) %>% 
        gt::gt() %>% 
        gt::fmt_number(columns = vars(coef.), decimals = 2) %>% 
        gt::cols_align(align = "right", columns = vars(level))
}

Main analyses

Analysis 1. Arm extension as a function of group and semantic function

shown in Figure 3

model <- glmer(
  Extension ~ Group * Function + (1 | Participant) + (1 | location), 
  df, 
  family = "binomial"
)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 0.90 (0.37, 1.43) (-0.16, 1.96)
Groupsigners −1.82 (-2.54, -1.1) (-3.25, -0.39)
Functionload-sharing −0.78 (-1.12, -0.44) (-1.47, -0.09)
Functionexplanatory −0.89 (-1.2, -0.58) (-1.51, -0.26)
Groupsigners:Functionload-sharing 0.56 (0.08, 1.04) (-0.4, 1.52)
Groupsigners:Functionexplanatory 0.64 (0.2, 1.08) (-0.23, 1.51)
summary(model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: Extension ~ Group * Function + (1 | Participant) + (1 | location)
##    Data: df
## 
##      AIC      BIC   logLik deviance df.resid 
##   1072.7   1111.6   -528.3   1056.7      945 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.9311 -0.6788 -0.1885  0.6989  4.4368 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 2.1805   1.477   
##  location    (Intercept) 0.1789   0.423   
## Number of obs: 953, groups:  Participant, 24; location, 8
## 
## Fixed effects:
##                                   Estimate Std. Error z value Pr(>|z|)   
## (Intercept)                         0.9015     0.5290   1.704  0.08833 . 
## Groupsigners                       -1.8208     0.7169  -2.540  0.01109 * 
## Functionload-sharing               -0.7797     0.3428  -2.275  0.02293 * 
## Functionexplanatory                -0.8875     0.3119  -2.845  0.00444 **
## Groupsigners:Functionload-sharing   0.5560     0.4801   1.158  0.24675   
## Groupsigners:Functionexplanatory    0.6388     0.4369   1.462  0.14370   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grpsgn Fnctn- Fnctnx Grp:F-
## Groupsignrs -0.674                            
## Fnctnld-shr -0.404  0.289                     
## Fnctnxplntr -0.426  0.308  0.675              
## Grpsgnrs:F-  0.281 -0.410 -0.702 -0.471       
## Grpsgnrs:Fn  0.299 -0.413 -0.474 -0.705  0.658

Prediction numbers

pred(model) %>%
  mutate(
    Extension = arm::invlogit(Extension),
    ci_lower = arm::invlogit(plo),
    ci_upper = arm::invlogit(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Extension, ci_lower, ci_upper), decimals = 3)
Group Function Extension ci_lower ci_upper
speakers load-bearing 0.818 0.609 0.928
speakers load-sharing 0.490 0.261 0.724
speakers explanatory 0.513 0.285 0.736
signers load-bearing 0.438 0.212 0.693
signers load-sharing 0.216 0.091 0.432
signers explanatory 0.246 0.106 0.473

Analysis 2. Pointing duration as a function of group and semantic function

shown in Figure 4

model <- lmer(dur_log ~ Group * Function + (1 | Participant) + (1 | location), df)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 7.00 (6.9, 7.1) (6.81, 7.19)
Groupsigners −0.43 (-0.57, -0.29) (-0.7, -0.16)
Functionload-sharing −0.05 (-0.13, 0.04) (-0.22, 0.12)
Functionexplanatory 0.16 (0.08, 0.24) (0, 0.31)
Groupsigners:Functionload-sharing −0.26 (-0.38, -0.14) (-0.51, -0.01)
Groupsigners:Functionexplanatory −0.56 (-0.68, -0.45) (-0.79, -0.34)
summary(model)
## Linear mixed model fit by REML ['lmerMod']
## Formula: dur_log ~ Group * Function + (1 | Participant) + (1 | location)
##    Data: df
## 
## REML criterion at convergence: 1829.9
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.0112 -0.6843  0.0241  0.6254  3.5425 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 0.060324 0.24561 
##  location    (Intercept) 0.002512 0.05012 
##  Residual                0.373020 0.61075 
## Number of obs: 953, groups:  Participant, 24; location, 8
## 
## Fixed effects:
##                                   Estimate Std. Error t value
## (Intercept)                        6.99911    0.09698  72.168
## Groupsigners                      -0.42891    0.13635  -3.146
## Functionload-sharing              -0.04589    0.08482  -0.541
## Functionexplanatory                0.15904    0.07756   2.051
## Groupsigners:Functionload-sharing -0.26018    0.12289  -2.117
## Groupsigners:Functionexplanatory  -0.56280    0.11384  -4.944
## 
## Correlation of Fixed Effects:
##             (Intr) Grpsgn Fnctn- Fnctnx Grp:F-
## Groupsignrs -0.686                            
## Fnctnld-shr -0.510  0.363                     
## Fnctnxplntr -0.538  0.382  0.645              
## Grpsgnrs:F-  0.350 -0.548 -0.689 -0.443       
## Grpsgnrs:Fn  0.366 -0.553 -0.440 -0.680  0.676

Prediction numbers

pred(model) %>%
  mutate(
    Duration = exp(dur_log),
    ci_lower = exp(plo),
    ci_upper = exp(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Duration, ci_lower, ci_upper), decimals = 0)
Group Function dur_log Duration ci_lower ci_upper
speakers load-bearing 6.991897 1,088 896 1,321
speakers load-sharing 6.938968 1,032 861 1,237
speakers explanatory 7.143244 1,266 1,066 1,502
signers load-bearing 6.636929 763 625 930
signers load-sharing 6.225684 506 424 603
signers explanatory 6.172600 479 402 572

Analysis 3. Arm extension as a function of demonstrative presence

shown in Figure 5, top

df_gest <- subset(df, Group == "speakers")
df_gest <- droplevels(df_gest)
model <- glmer(
  Extension ~ demonstrative + (1 | Participant) + (1 | location), 
  df_gest, 
  family = "binomial"
)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept −0.04 (-0.48, 0.41) (-0.93, 0.85)
demonstrativedemonstrative 0.87 (0.59, 1.14) (0.31, 1.42)
summary(model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: Extension ~ demonstrative + (1 | Participant) + (1 | location)
##    Data: df_gest
## 
##      AIC      BIC   logLik deviance df.resid 
##    515.1    531.6   -253.6    507.1      445 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.0998 -0.6371  0.3469  0.6912  2.7974 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 1.7475   1.3219  
##  location    (Intercept) 0.1923   0.4385  
## Number of obs: 449, groups:  Participant, 12; location, 8
## 
## Fixed effects:
##                            Estimate Std. Error z value Pr(>|z|)   
## (Intercept)                -0.03873    0.44491  -0.087  0.93063   
## demonstrativedemonstrative  0.86591    0.27902   3.103  0.00191 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## dmnstrtvdmn -0.224

Prediction numbers

pred(model) %>%
  mutate(
    Extension = arm::invlogit(Extension),
    ci_lower = arm::invlogit(plo),
    ci_upper = arm::invlogit(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Extension, ci_lower, ci_upper), decimals = 3)
demonstrative Extension ci_lower ci_upper
no demonstrative 0.454 0.255 0.670
demonstrative 0.789 0.594 0.905

Analysis 4. Pointing duration as a function of demonstrative presence

shown in Figure 5, bottom

df_gest <- subset(df, Group == "speakers")
model <- lmer(dur_log ~ demonstrative + (1 | Participant) + (1 | location), df_gest)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 6.95 (6.88, 7.03) (6.81, 7.1)
demonstrativedemonstrative 0.28 (0.21, 0.34) (0.15, 0.4)
summary(model)
## Linear mixed model fit by REML ['lmerMod']
## Formula: dur_log ~ demonstrative + (1 | Participant) + (1 | location)
##    Data: df_gest
## 
## REML criterion at convergence: 790.2
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.98528 -0.64866  0.03881  0.71747  2.67388 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 0.033422 0.18282 
##  location    (Intercept) 0.008147 0.09026 
##  Residual                0.318075 0.56398 
## Number of obs: 449, groups:  Participant, 12; location, 8
## 
## Fixed effects:
##                            Estimate Std. Error t value
## (Intercept)                 6.95460    0.07251  95.908
## demonstrativedemonstrative  0.27658    0.06381   4.334
## 
## Correlation of Fixed Effects:
##             (Intr)
## dmnstrtvdmn -0.350

Prediction numbers

pred(model) %>%
  mutate(
    Duration = exp(dur_log),
    ci_lower = exp(plo),
    ci_upper = exp(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Duration, ci_lower, ci_upper), decimals = 0)
demonstrative dur_log Duration ci_lower ci_upper
no demonstrative 6.943450 1,036 896 1,198
demonstrative 7.200425 1,340 1,146 1,566

Supplementary analyses

Analysis S1. Arm extension as a function of group, semantic function, and number of words

note the two way interaction between Function and num_words as well as the three-way interaction between Group, Function, and num_words were not included in the model due to convergence issues.

model <- glmer(
  Extension ~ Group * Function + Group * num_words + (1 | Participant) + (1 | location), 
  df, 
  family = "binomial"
)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 0.83 (0.27, 1.38) (-0.29, 1.94)
Groupsigners −1.80 (-2.54, -1.05) (-3.29, -0.31)
Functionload-sharing −0.87 (-1.25, -0.49) (-1.62, -0.11)
Functionexplanatory −1.00 (-1.37, -0.63) (-1.74, -0.26)
num_words 0.02 (-0.02, 0.07) (-0.06, 0.11)
Groupsigners:Functionload-sharing 0.52 (-0.01, 1.06) (-0.55, 1.59)
Groupsigners:Functionexplanatory 0.62 (0.11, 1.13) (-0.4, 1.64)
Groupsigners:num_words 0.04 (-0.06, 0.13) (-0.15, 0.23)
summary(model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: 
## Extension ~ Group * Function + Group * num_words + (1 | Participant) +  
##     (1 | location)
##    Data: df
## 
##      AIC      BIC   logLik deviance df.resid 
##   1075.8   1124.4   -527.9   1055.8      943 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -4.1190 -0.6844 -0.1901  0.6995  4.7220 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 2.2989   1.5162  
##  location    (Intercept) 0.1827   0.4274  
## Number of obs: 953, groups:  Participant, 24; location, 8
## 
## Fixed effects:
##                                   Estimate Std. Error z value Pr(>|z|)   
## (Intercept)                        0.82503    0.55590   1.484  0.13777   
## Groupsigners                      -1.79944    0.74510  -2.415  0.01573 * 
## Functionload-sharing              -0.86821    0.37792  -2.297  0.02160 * 
## Functionexplanatory               -0.99816    0.36885  -2.706  0.00681 **
## num_words                          0.02482    0.04404   0.564  0.57295   
## Groupsigners:Functionload-sharing  0.52054    0.53451   0.974  0.33012   
## Groupsigners:Functionexplanatory   0.62234    0.51088   1.218  0.22316   
## Groupsigners:num_words             0.03769    0.09521   0.396  0.69223   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Grpsgn Fnctn- Fnctnx nm_wrd Grp:F- Grps:F
## Groupsignrs -0.683                                          
## Fnctnld-shr -0.247  0.183                                   
## Fnctnxplntr -0.215  0.163  0.742                            
## num_words   -0.244  0.168 -0.418 -0.531                     
## Grpsgnrs:F-  0.169 -0.276 -0.698 -0.517  0.297              
## Grpsgnrs:Fn  0.151 -0.246 -0.530 -0.715  0.384  0.732       
## Grpsgnrs:n_  0.109 -0.159  0.190  0.239 -0.450 -0.418 -0.480

Prediction numbers

pred(model) %>%
  mutate(
    Extension = arm::invlogit(Extension),
    ci_lower = arm::invlogit(plo),
    ci_upper = arm::invlogit(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Extension, ci_lower, ci_upper), decimals = 3)
Group Function num_words Extension ci_lower ci_upper
speakers load-bearing 0 0.806 0.577 0.926
speakers load-bearing 1 0.789 0.557 0.918
speakers load-bearing 2 0.810 0.591 0.926
speakers load-bearing 3 0.772 0.535 0.909
speakers load-bearing 4 0.767 0.528 0.907
speakers load-bearing 5 0.753 0.506 0.901
speakers load-bearing 6 0.937 0.831 0.978
speakers load-bearing 7 0.934 0.820 0.978
speakers load-sharing 2 0.421 0.195 0.687
speakers load-sharing 3 0.544 0.290 0.777
speakers load-sharing 4 0.584 0.330 0.800
speakers load-sharing 5 0.433 0.213 0.682
speakers load-sharing 6 0.586 0.337 0.798
speakers load-sharing 7 0.522 0.282 0.752
speakers load-sharing 8 0.431 0.213 0.680
speakers load-sharing 9 0.481 0.246 0.725
speakers load-sharing 10 0.298 0.128 0.552
speakers load-sharing 11 0.482 0.238 0.735
speakers load-sharing 12 0.584 0.313 0.812
speakers load-sharing 13 0.214 0.078 0.466
speakers load-sharing 14 0.371 0.149 0.664
speakers load-sharing 16 0.073 0.021 0.226
speakers load-sharing 19 0.305 0.090 0.661
speakers explanatory 2 0.744 0.490 0.898
speakers explanatory 3 0.622 0.360 0.827
speakers explanatory 4 0.611 0.357 0.817
speakers explanatory 5 0.654 0.406 0.840
speakers explanatory 6 0.652 0.408 0.836
speakers explanatory 7 0.572 0.331 0.783
speakers explanatory 8 0.394 0.194 0.638
speakers explanatory 9 0.426 0.214 0.669
speakers explanatory 10 0.325 0.148 0.571
speakers explanatory 11 0.298 0.130 0.545
speakers explanatory 12 0.536 0.284 0.771
speakers explanatory 13 0.157 0.058 0.360
speakers explanatory 14 0.497 0.239 0.756
speakers explanatory 15 0.213 0.076 0.472
speakers explanatory 16 0.352 0.136 0.653
speakers explanatory 18 0.273 0.088 0.593
signers load-bearing 0 0.442 0.210 0.702
signers load-bearing 1 0.472 0.232 0.726
signers load-bearing 2 0.378 0.168 0.646
signers load-sharing 1 0.313 0.134 0.573
signers load-sharing 2 0.209 0.085 0.429
signers load-sharing 3 0.231 0.097 0.458
signers load-sharing 4 0.219 0.089 0.446
signers load-sharing 5 0.175 0.066 0.389
signers load-sharing 6 0.023 0.007 0.070
signers load-sharing 7 0.484 0.211 0.767
signers load-sharing 9 0.598 0.254 0.867
signers explanatory 1 0.345 0.152 0.608
signers explanatory 2 0.281 0.121 0.526
signers explanatory 3 0.208 0.086 0.424
signers explanatory 4 0.206 0.083 0.425
signers explanatory 5 0.111 0.040 0.271
signers explanatory 6 0.042 0.014 0.124
signers explanatory 7 0.290 0.105 0.587
signers explanatory 9 0.062 0.015 0.223
signers explanatory 10 0.208 0.051 0.563

Analysis S2. Arm extension as a function of location and semantic function

note the two way interaction between location and Function was not included in the model due to convergence issues, though there is little theoretical basis for including this interaction in the first place.

model <- glmer(
  Extension ~ location + Function + (1 | Group) + (1 | Participant), 
  df, 
  family = "binomial"
)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept −0.70 (-1.24, -0.16) (-1.79, 0.38)
locationH 1.08 (0.73, 1.43) (0.39, 1.77)
locationA 0.37 (0.04, 0.69) (-0.29, 1.02)
locationB 1.16 (0.87, 1.44) (0.59, 1.73)
locationC 1.28 (0.99, 1.57) (0.7, 1.86)
locationD 0.89 (0.53, 1.24) (0.18, 1.6)
locationE 0.54 (0.21, 0.86) (-0.11, 1.18)
locationF 0.23 (-0.06, 0.52) (-0.35, 0.81)
Functionload-sharing −0.52 (-0.76, -0.28) (-1.01, -0.03)
Functionexplanatory −0.58 (-0.8, -0.36) (-1.03, -0.14)
summary(model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: Extension ~ location + Function + (1 | Group) + (1 | Participant)
##    Data: df
## 
##      AIC      BIC   logLik deviance df.resid 
##   1068.7   1127.0   -522.4   1044.7      941 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.2478 -0.6841 -0.1936  0.6819  4.2973 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 2.358    1.535   
##  Group       (Intercept) 0.253    0.503   
## Number of obs: 953, groups:  Participant, 24; Group, 2
## 
## Fixed effects:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -0.7011     0.5430  -1.291  0.19665    
## locationH              1.0805     0.3457   3.126  0.00177 ** 
## locationA              0.3658     0.3271   1.118  0.26340    
## locationB              1.1577     0.2839   4.078 4.55e-05 ***
## locationC              1.2820     0.2891   4.434 9.26e-06 ***
## locationD              0.8880     0.3550   2.502  0.01236 *  
## locationE              0.5366     0.3242   1.655  0.09788 .  
## locationF              0.2282     0.2904   0.786  0.43194    
## Functionload-sharing  -0.5194     0.2434  -2.134  0.03285 *  
## Functionexplanatory   -0.5838     0.2206  -2.647  0.00813 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) loctnH loctnA loctnB loctnC loctnD loctnE loctnF Fnctn-
## locationH   -0.229                                                        
## locationA   -0.223  0.409                                                 
## locationB   -0.263  0.458  0.492                                          
## locationC   -0.256  0.469  0.500  0.561                                   
## locationD   -0.216  0.363  0.391  0.459  0.447                            
## locationE   -0.236  0.396  0.426  0.487  0.483  0.393                     
## locationF   -0.271  0.443  0.473  0.528  0.532  0.424  0.464              
## Fnctnld-shr -0.233 -0.034 -0.112 -0.105 -0.126 -0.104 -0.066 -0.032       
## Fnctnxplntr -0.243 -0.057 -0.096 -0.093 -0.114 -0.026 -0.048  0.005  0.656

Prediction numbers

pred(model) %>%
  mutate(
    Extension = arm::invlogit(Extension),
    ci_lower = arm::invlogit(plo),
    ci_upper = arm::invlogit(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Extension, ci_lower, ci_upper), decimals = 3)
location Function Extension ci_lower ci_upper
G load-bearing 0.466 0.228 0.721
G load-sharing 0.156 0.059 0.352
G explanatory 0.237 0.096 0.474
H load-bearing 0.756 0.497 0.907
H load-sharing 0.392 0.172 0.667
H explanatory 0.478 0.231 0.736
A load-bearing 0.579 0.306 0.811
A load-sharing 0.244 0.097 0.493
A explanatory 0.295 0.123 0.556
B load-bearing 0.797 0.571 0.921
B load-sharing 0.566 0.313 0.789
B explanatory 0.480 0.245 0.725
C load-bearing 0.774 0.535 0.911
C load-sharing 0.417 0.199 0.673
C explanatory 0.557 0.306 0.782
D load-bearing 0.675 0.394 0.869
D load-sharing 0.434 0.199 0.703
D explanatory 0.443 0.203 0.713
E load-bearing 0.681 0.409 0.868
E load-sharing 0.289 0.119 0.551
E explanatory 0.271 0.110 0.527
F load-bearing 0.572 0.312 0.798
F load-sharing 0.230 0.093 0.466
F explanatory 0.280 0.118 0.531

Analysis S3. Pointing duration as a function of group, semantic function, and number of words

model <- lmer(dur_log ~ Group * Function * num_words + (1 | Participant) + (1 | location), df)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 6.74 (6.61, 6.86) (6.48, 6.99)
Groupsigners −0.16 (-0.32, 0) (-0.48, 0.16)
Functionload-sharing 0.10 (-0.06, 0.26) (-0.21, 0.42)
Functionexplanatory 0.22 (0.08, 0.37) (-0.07, 0.52)
num_words 0.11 (0.08, 0.15) (0.04, 0.18)
Groupsigners:Functionload-sharing −0.44 (-0.65, -0.22) (-0.86, -0.01)
Groupsigners:Functionexplanatory −0.74 (-0.93, -0.56) (-1.11, -0.37)
Groupsigners:num_words −0.16 (-0.28, -0.04) (-0.41, 0.08)
Functionload-sharing:num_words −0.09 (-0.13, -0.06) (-0.17, -0.02)
Functionexplanatory:num_words −0.09 (-0.12, -0.05) (-0.16, -0.01)
Groupsigners:Functionload-sharing:num_words 0.15 (0.02, 0.28) (-0.1, 0.41)
Groupsigners:Functionexplanatory:num_words 0.17 (0.05, 0.3) (-0.08, 0.42)
summary(model)
## Linear mixed model fit by REML ['lmerMod']
## Formula: dur_log ~ Group * Function * num_words + (1 | Participant) +  
##     (1 | location)
##    Data: df
## 
## REML criterion at convergence: 1843.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.1645 -0.6700  0.0475  0.6322  3.5010 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 0.062238 0.24947 
##  location    (Intercept) 0.003882 0.06231 
##  Residual                0.367910 0.60656 
## Number of obs: 953, groups:  Participant, 24; location, 8
## 
## Fixed effects:
##                                             Estimate Std. Error t value
## (Intercept)                                  6.73527    0.12524  53.778
## Groupsigners                                -0.16133    0.16150  -0.999
## Functionload-sharing                         0.10071    0.15726   0.640
## Functionexplanatory                          0.22450    0.14942   1.503
## num_words                                    0.11220    0.03507   3.199
## Groupsigners:Functionload-sharing           -0.43609    0.21158  -2.061
## Groupsigners:Functionexplanatory            -0.74263    0.18601  -3.992
## Groupsigners:num_words                      -0.16107    0.12217  -1.318
## Functionload-sharing:num_words              -0.09464    0.03852  -2.457
## Functionexplanatory:num_words               -0.08551    0.03817  -2.240
## Groupsigners:Functionload-sharing:num_words  0.15369    0.12906   1.191
## Groupsigners:Functionexplanatory:num_words   0.17281    0.12421   1.391
## 
## Correlation of Fixed Effects:
##             (Intr) Grpsgn Fnctn- Fnctnx nm_wrd Grp:F- Grps:F Grps:_ Fnc-:_
## Groupsignrs -0.752                                                        
## Fnctnld-shr -0.485  0.376                                                 
## Fnctnxplntr -0.484  0.377  0.404                                          
## num_words   -0.613  0.479  0.479  0.519                                   
## Grpsgnrs:F-  0.362 -0.459 -0.742 -0.304 -0.361                            
## Grpsgnrs:Fn  0.391 -0.470 -0.326 -0.805 -0.421  0.392                     
## Grpsgnrs:n_  0.176 -0.335 -0.138 -0.150 -0.288  0.282  0.278              
## Fnctnld-s:_  0.542 -0.423 -0.724 -0.490 -0.908  0.541  0.396  0.261       
## Fnctnxpln:_  0.538 -0.420 -0.437 -0.742 -0.922  0.331  0.600  0.265  0.853
## Grpsgn:F-:_ -0.162  0.310  0.216  0.148  0.274 -0.470 -0.270 -0.950 -0.300
## Grpsgnr:F:_ -0.166  0.311  0.135  0.229  0.285 -0.268 -0.410 -0.971 -0.263
##             Fnct:_ G:F-:_
## Groupsignrs              
## Fnctnld-shr              
## Fnctnxplntr              
## num_words                
## Grpsgnrs:F-              
## Grpsgnrs:Fn              
## Grpsgnrs:n_              
## Fnctnld-s:_              
## Fnctnxpln:_              
## Grpsgn:F-:_ -0.257       
## Grpsgnr:F:_ -0.308  0.926

Prediction numbers

pred(model) %>%
  mutate(
    Duration = exp(dur_log),
    ci_lower = exp(plo),
    ci_upper = exp(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Duration, ci_lower, ci_upper), decimals = 0)
Group Function num_words dur_log Duration ci_lower ci_upper
speakers load-bearing 0 6.722545 831 647 1,067
speakers load-bearing 1 6.841133 936 755 1,160
speakers load-bearing 2 6.981031 1,076 882 1,312
speakers load-bearing 3 7.020634 1,119 911 1,375
speakers load-bearing 4 7.112141 1,227 970 1,552
speakers load-bearing 5 7.197280 1,336 1,010 1,766
speakers load-bearing 6 7.636632 2,073 1,486 2,890
speakers load-bearing 7 7.672371 2,148 1,453 3,176
speakers load-sharing 2 6.827028 922 722 1,179
speakers load-sharing 3 6.836908 932 744 1,167
speakers load-sharing 4 6.828461 924 750 1,138
speakers load-sharing 5 6.885162 978 804 1,189
speakers load-sharing 6 6.791467 890 738 1,074
speakers load-sharing 7 6.930872 1,023 851 1,231
speakers load-sharing 8 6.932025 1,025 850 1,236
speakers load-sharing 9 7.005713 1,103 907 1,341
speakers load-sharing 10 6.883782 976 793 1,202
speakers load-sharing 11 6.950155 1,043 833 1,306
speakers load-sharing 12 7.151344 1,276 999 1,629
speakers load-sharing 13 7.030816 1,131 866 1,477
speakers load-sharing 14 7.172660 1,303 974 1,743
speakers load-sharing 16 7.253733 1,413 1,003 1,992
speakers load-sharing 19 7.040389 1,142 744 1,751
speakers explanatory 2 6.973574 1,068 841 1,356
speakers explanatory 3 7.003385 1,100 883 1,370
speakers explanatory 4 7.017093 1,116 911 1,367
speakers explanatory 5 7.094117 1,205 997 1,457
speakers explanatory 6 7.096543 1,208 1,009 1,446
speakers explanatory 7 7.164515 1,293 1,085 1,541
speakers explanatory 8 7.229648 1,380 1,158 1,644
speakers explanatory 9 7.077748 1,185 990 1,420
speakers explanatory 10 7.055087 1,159 958 1,401
speakers explanatory 11 7.118171 1,234 1,007 1,512
speakers explanatory 12 7.249292 1,407 1,129 1,753
speakers explanatory 13 7.204245 1,345 1,059 1,708
speakers explanatory 14 7.220197 1,367 1,054 1,772
speakers explanatory 15 7.403435 1,642 1,238 2,177
speakers explanatory 16 7.477667 1,768 1,302 2,402
speakers explanatory 18 7.310968 1,497 1,048 2,137
signers load-bearing 0 6.663923 784 633 970
signers load-bearing 1 6.616062 747 575 971
signers load-bearing 2 6.332693 563 359 882
signers load-sharing 1 6.203820 495 395 620
signers load-sharing 2 6.218435 502 415 607
signers load-sharing 3 6.228157 507 423 607
signers load-sharing 4 6.207787 497 407 606
signers load-sharing 5 6.191392 489 384 621
signers load-sharing 6 5.786418 326 243 437
signers load-sharing 7 6.654315 776 544 1,108
signers load-sharing 9 6.387525 594 364 969
signers explanatory 1 6.229222 507 414 622
signers explanatory 2 6.216762 501 416 603
signers explanatory 3 6.071977 434 362 519
signers explanatory 4 6.254484 520 431 628
signers explanatory 5 6.136088 462 375 570
signers explanatory 6 5.861673 351 276 447
signers explanatory 7 6.135528 462 350 609
signers explanatory 9 6.221513 503 351 723
signers explanatory 10 6.185478 486 323 729

Analysis S4. Arm extension as a function of demonstrative presence and semantic function

df_gest <- subset(df, Group == "speakers")
df_gest <- droplevels(df_gest)
model <- glmer(
  Extension ~ demonstrative * Function + (1 | Participant) + (1 | location), 
  df_gest, 
  family = "binomial"
)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 0.47 (-0.13, 1.06) (-0.73, 1.66)
demonstrativedemonstrative 0.86 (0.32, 1.4) (-0.22, 1.94)
Functionload-sharing −0.44 (-0.93, 0.04) (-1.41, 0.53)
Functionexplanatory −0.73 (-1.22, -0.24) (-1.71, 0.25)
demonstrativedemonstrative:Functionload-sharing −0.51 (-1.24, 0.23) (-1.98, 0.96)
demonstrativedemonstrative:Functionexplanatory 0.07 (-0.57, 0.72) (-1.22, 1.37)
summary(model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: Extension ~ demonstrative * Function + (1 | Participant) + (1 |  
##     location)
##    Data: df_gest
## 
##      AIC      BIC   logLik deviance df.resid 
##    517.0    549.9   -250.5    501.0      441 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.9461 -0.6153  0.3152  0.6336  2.5059 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 1.6420   1.2814  
##  location    (Intercept) 0.2133   0.4618  
## Number of obs: 449, groups:  Participant, 12; location, 8
## 
## Fixed effects:
##                                                 Estimate Std. Error z value
## (Intercept)                                      0.46749    0.59718   0.783
## demonstrativedemonstrative                       0.85930    0.54109   1.588
## Functionload-sharing                            -0.44155    0.48646  -0.908
## Functionexplanatory                             -0.73117    0.48940  -1.494
## demonstrativedemonstrative:Functionload-sharing -0.50728    0.73546  -0.690
## demonstrativedemonstrative:Functionexplanatory   0.07237    0.64709   0.112
##                                                 Pr(>|z|)
## (Intercept)                                        0.434
## demonstrativedemonstrative                         0.112
## Functionload-sharing                               0.364
## Functionexplanatory                                0.135
## demonstrativedemonstrative:Functionload-sharing    0.490
## demonstrativedemonstrative:Functionexplanatory     0.911
## 
## Correlation of Fixed Effects:
##             (Intr) dmnstr Fnctn- Fnctnx dmn:F-
## dmnstrtvdmn -0.563                            
## Fnctnld-shr -0.642  0.655                     
## Fnctnxplntr -0.649  0.669  0.805              
## dmnstrtv:F-  0.417 -0.718 -0.632 -0.513       
## dmnstrtvd:F  0.492 -0.797 -0.608 -0.757  0.606

Prediction numbers

pred(model) %>%
  mutate(
    Extension = arm::invlogit(Extension),
    ci_lower = arm::invlogit(plo),
    ci_upper = arm::invlogit(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Extension, ci_lower, ci_upper), decimals = 3)
demonstrative Function Extension ci_lower ci_upper
no demonstrative load-bearing 0.689 0.402 0.880
no demonstrative load-sharing 0.437 0.233 0.665
no demonstrative explanatory 0.401 0.209 0.629
demonstrative load-bearing 0.851 0.662 0.943
demonstrative load-sharing 0.704 0.410 0.890
demonstrative explanatory 0.759 0.531 0.897

Analysis S5. Pointing duration as a function of demonstrative presence and semantic function

df_gest <- subset(df, Group == "speakers")
model <- lmer(dur_log ~ demonstrative * Function + (1 | Participant) + (1 | location), df_gest)
coefplot::coefplot(model, lwdOuter = 0.5)

coef_ci_table(model)
level coef. 95% CI 99% CI
intercept 6.71 (6.59, 6.83) (6.47, 6.95)
demonstrativedemonstrative 0.46 (0.33, 0.58) (0.21, 0.7)
Functionload-sharing 0.17 (0.06, 0.29) (-0.06, 0.4)
Functionexplanatory 0.38 (0.26, 0.49) (0.15, 0.61)
demonstrativedemonstrative:Functionload-sharing −0.17 (-0.34, 0) (-0.51, 0.17)
demonstrativedemonstrative:Functionexplanatory −0.25 (-0.4, -0.1) (-0.55, 0.05)
summary(model)
## Linear mixed model fit by REML ['lmerMod']
## Formula: dur_log ~ demonstrative * Function + (1 | Participant) + (1 |  
##     location)
##    Data: df_gest
## 
## REML criterion at convergence: 785.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.2235 -0.6435  0.0669  0.7151  2.6349 
## 
## Random effects:
##  Groups      Name        Variance Std.Dev.
##  Participant (Intercept) 0.03095  0.1759  
##  location    (Intercept) 0.01053  0.1026  
##  Residual                0.30897  0.5558  
## Number of obs: 449, groups:  Participant, 12; location, 8
## 
## Fixed effects:
##                                                 Estimate Std. Error t value
## (Intercept)                                       6.7121     0.1208  55.555
## demonstrativedemonstrative                        0.4566     0.1228   3.719
## Functionload-sharing                              0.1734     0.1157   1.499
## Functionexplanatory                               0.3786     0.1163   3.255
## demonstrativedemonstrative:Functionload-sharing  -0.1700     0.1715  -0.992
## demonstrativedemonstrative:Functionexplanatory   -0.2476     0.1491  -1.661
## 
## Correlation of Fixed Effects:
##             (Intr) dmnstr Fnctn- Fnctnx dmn:F-
## dmnstrtvdmn -0.706                            
## Fnctnld-shr -0.754  0.706                     
## Fnctnxplntr -0.761  0.715  0.805              
## dmnstrtv:F-  0.504 -0.698 -0.656 -0.531       
## dmnstrtvd:F  0.596 -0.796 -0.627 -0.780  0.589

Prediction numbers

pred(model) %>%
  mutate(
    Duration = exp(dur_log),
    ci_lower = exp(plo),
    ci_upper = exp(phi),
  ) %>%
  select(-plo, -phi) %>%
  gt::gt() %>%
  gt::fmt_number(columns = vars(Duration, ci_lower, ci_upper), decimals = 0)
demonstrative Function dur_log Duration ci_lower ci_upper
no demonstrative load-bearing 6.649137 772 606 983
no demonstrative load-sharing 6.869825 963 815 1,137
no demonstrative explanatory 7.074881 1,182 1,003 1,393
demonstrative load-bearing 7.130134 1,249 1,036 1,506
demonstrative load-sharing 7.163850 1,292 1,003 1,663
demonstrative explanatory 7.254031 1,414 1,172 1,705