ISO Prone versus ISO 30

Packages

The following packages were used in this analysis

library(readxl) #read in excel file
library(readr) #read in .csv file
library(janitor) #tidy data (column names)
library(tidyverse) #wide range of functions including ggplot
library(ggpubr) #aranging ggplots
library(performance) #model checking
library(emmeans) # for estimated marginal means
library(WRS2) # for robust t-test (trimmed mean differences)

Force data

Read and clean data:

force <- read_excel("Force.xlsx")
names<-names(force%>%clean_names)
colnames(force) <- names

head(force)
# A tibble: 6 × 6
  participant_number test  l_max_force_n r_max_force_n l_avg_force_n
               <dbl> <chr>         <dbl>         <dbl>         <dbl>
1                  1 ISO30          392           466.          383.
2                  2 ISO30          258.          267.          219.
3                  3 ISO30          391.          434           378.
4                  4 ISO30          439           479.          419.
5                  5 ISO30          391           376           370.
6                  6 ISO30          296.          330.          269.
# ℹ 1 more variable: r_avg_force_n <dbl>

Visual inspection and normality checking

a<- ggplot(force) +
  aes(x =r_max_force_n, fill = test ) +
  geom_density(adjust = 1L) +
  scale_fill_viridis_d(option = "cividis", direction = 1) +
  labs(x = "% MVC", y = "Density") + 
  ggtitle("Density plot") +
  theme_minimal() + facet_wrap(~test) + theme(legend.position = "none")

b<- ggplot(force) +
  aes(x =l_max_force_n, fill = test ) +
  geom_density(adjust = 1L) +
  scale_fill_viridis_d(option = "cividis", direction = 1) +
  labs(x = "% MVC", y = "Density") +
  theme_minimal() + facet_wrap(~test) + theme(legend.position = "none")

ggarrange(a,b)

model_l <- lm(l_max_force_n ~ test + factor(participant_number), data = force)

par(mfrow = c(2, 2)) # 2x2 layout for plots
plot(model_l)

check_normality(model_l)
OK: residuals appear as normally distributed (p = 0.729).
check_heteroscedasticity(model_l)
OK: Error variance appears to be homoscedastic (p = 0.489).
emmeans(model_l, pairwise ~ test)
$emmeans
 test  emmean   SE df lower.CL upper.CL
 ISO30    351 6.85 42      337      365
 PRONE    294 6.85 42      281      308

Results are averaged over the levels of: participant_number 
Confidence level used: 0.95 

$contrasts
 contrast      estimate   SE df t.ratio p.value
 ISO30 - PRONE     56.4 9.68 42   5.821  <.0001

Results are averaged over the levels of: participant_number 
model_r <- lm(r_max_force_n ~ test + factor(participant_number), data = force)

par(mfrow = c(2, 2)) # 2x2 layout for plots
plot(model_r)

check_normality(model_r)
OK: residuals appear as normally distributed (p = 0.981).
check_heteroscedasticity(model_r)
OK: Error variance appears to be homoscedastic (p = 0.087).
emmeans(model_r, pairwise ~ test)
$emmeans
 test  emmean   SE df lower.CL upper.CL
 ISO30    367 6.73 42      353      380
 PRONE    314 6.73 42      300      327

Results are averaged over the levels of: participant_number 
Confidence level used: 0.95 

$contrasts
 contrast      estimate   SE df t.ratio p.value
 ISO30 - PRONE     52.9 9.52 42   5.561  <.0001

Results are averaged over the levels of: participant_number 

Between-participant correlation

Filtering left and right leg data and pivoting to wide format:

left<- force %>%
  subset(select = c(participant_number, test, l_max_force_n ))%>% 
  pivot_wider(names_from = test, values_from = l_max_force_n)

right<- force %>%
  subset(select = c(participant_number, test, r_max_force_n ))%>% 
  pivot_wider(names_from = test, values_from = r_max_force_n)

Pearson’s correlation

cor.test(x = left$ISO30, y =left$PRONE, method = "pearson")

    Pearson's product-moment correlation

data:  left$ISO30 and left$PRONE
t = 4.1596, df = 41, p-value = 0.0001588
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2922375 0.7262785
sample estimates:
      cor 
0.5447663 
model_l <- lm(ISO30 ~ PRONE, data = left)

summary(model_l)

Call:
lm(formula = ISO30 ~ PRONE, data = left)

Residuals:
     Min       1Q   Median       3Q      Max 
-149.662  -32.756   -8.021   38.542  139.884 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 140.4950    51.4195   2.732 0.009236 ** 
PRONE         0.7142     0.1717   4.160 0.000159 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 62.2 on 41 degrees of freedom
Multiple R-squared:  0.2968,    Adjusted R-squared:  0.2796 
F-statistic:  17.3 on 1 and 41 DF,  p-value: 0.0001588
par(mfrow = c(2, 2)) # 2x2 layout for plots
plot(model_l)

check_normality(model_l)
OK: residuals appear as normally distributed (p = 0.738).
check_heteroscedasticity(model_l)
OK: Error variance appears to be homoscedastic (p = 0.742).
cor.test(x = right$ISO30, y = right$PRONE, method = "pearson")

    Pearson's product-moment correlation

data:  right$ISO30 and right$PRONE
t = 5.3015, df = 41, p-value = 4.232e-06
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.4173321 0.7872859
sample estimates:
      cor 
0.6377397 
model_r <- lm(ISO30 ~ PRONE, data = right)
summary(model_r)

Call:
lm(formula = ISO30 ~ PRONE, data = right)

Residuals:
    Min      1Q  Median      3Q     Max 
-106.74  -43.06  -14.63   41.02  143.98 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 103.5845    50.5370   2.050   0.0468 *  
PRONE         0.8386     0.1582   5.302 4.23e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 62.4 on 41 degrees of freedom
Multiple R-squared:  0.4067,    Adjusted R-squared:  0.3922 
F-statistic: 28.11 on 1 and 41 DF,  p-value: 4.232e-06
par(mfrow = c(2, 2)) # 2x2 layout for plots
plot(model_r)

check_normality(model_r)
OK: residuals appear as normally distributed (p = 0.111).
check_heteroscedasticity(model_r)
OK: Error variance appears to be homoscedastic (p = 0.499).

EMG data

Read in data:

raw_mean <- read_csv("sEMG_raw.csv")
head(raw_mean)
# A tibble: 6 × 8
  participant test  gm_pk am_pk st_pk b_fl_pk b_fs_pk med_g_pk
  <chr>       <chr> <dbl> <dbl> <dbl>   <dbl>   <dbl>    <dbl>
1 P1          ISO30   2.1   2.2   3.8     1.4     2.1      1.8
2 P1          PRONE   2     2.1   3.2     1.5     1.9      1.6
3 P2          ISO30   3.2   2     1.9     3       3.4      1.7
4 P2          PRONE   2.6   1.7   1.4     2.4     2.9      1.5
5 P3          ISO30   1.9   2.6   1.8     2.4     1.8      1.6
6 P3          PRONE   2     1.3   1.5     2.1     2.6      1.6

The behaviour of the residuals were visually inspected and met the assumptions of normality and homogeneity of variance”


Call:
lm(formula = gm_pk ~ test + factor(participant), data = raw_mean)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.4077 -0.1923  0.0000  0.1923  2.4077 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)  
(Intercept)              1.9077     0.7794   2.448   0.0307 *
testPRONE                0.2846     0.4166   0.683   0.5075  
factor(participant)P10  -0.2000     1.0622  -0.188   0.8538  
factor(participant)P11  -0.1000     1.0622  -0.094   0.9265  
factor(participant)P12  -0.2500     1.0622  -0.235   0.8179  
factor(participant)P13  -0.8000     1.0622  -0.753   0.4659  
factor(participant)P2    0.8500     1.0622   0.800   0.4391  
factor(participant)P3   -0.1000     1.0622  -0.094   0.9265  
factor(participant)P4    0.7000     1.0622   0.659   0.5223  
factor(participant)P5    0.2500     1.0622   0.235   0.8179  
factor(participant)P6   -0.3000     1.0622  -0.282   0.7824  
factor(participant)P7    0.2500     1.0622   0.235   0.8179  
factor(participant)P8    1.8000     1.0622   1.695   0.1159  
factor(participant)P9   -0.1000     1.0622  -0.094   0.9265  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.062 on 12 degrees of freedom
Multiple R-squared:  0.4435,    Adjusted R-squared:  -0.1593 
F-statistic: 0.7358 on 13 and 12 DF,  p-value: 0.705
Analysis of Variance Table

Response: gm_pk
                    Df  Sum Sq Mean Sq F value Pr(>F)
test                 1  0.5265 0.52654  0.4667 0.5075
factor(participant) 12 10.2646 0.85538  0.7582 0.6804
Residuals           12 13.5385 1.12821               

Warning: Non-normality of residuals detected (p < .001).
Warning: Heteroscedasticity (non-constant error variance) detected (p < .001).

Individual trimmed mean analysis and summary statistics:

testdata<- raw_mean %>%
  subset(select = c(participant, test, gm_pk ))%>% 
  pivot_wider(names_from = test, values_from = gm_pk)


yuend(testdata$ISO30, testdata$PRONE, tr = 0.2)
Call:
yuend(x = testdata$ISO30, y = testdata$PRONE, tr = 0.2)

Test statistic: -0.6542 (df = 8), p-value = 0.53133

Trimmed mean difference:  -0.08889 
95 percent confidence interval:
-0.4022     0.2244 

Explanatory measure of effect size: 0.17 
median(testdata$ISO30)
[1] 1.9
quantile(testdata$ISO30, 0.75)
75% 
2.2 
median(testdata$PRONE)
[1] 2
quantile(testdata$PRONE, 0.25)
25% 
1.8