Artigo 2.2

Autor

Caio Vallio

Data de Publicação

2 de novembro de 2025

Resumo

“Neste estudo, investigamos qual índice de intensidade de dor está mais associado à qualidade do movimento (MDP) durante o Step Down Lateral em indivíduos com dor femoropatelar. Utilizando modelos mistos com os três preditores padronizados (dor nos 15 dias, dor pré-movimento e dor durante o movimento), constatamos que nenhum índice de dor foi estatisticamente significativo após ajuste mútuo. Entretanto, a dor durante o movimento apresentou o maior coeficiente padronizado, indicando tendência à associação mais forte com a qualidade do movimento, embora sem significância estatística. A maior parte da variância do MDP foi atribuída à diferença entre indivíduos.”

Código
library(dplyr)
library(tidyr)
library(stringr)
library(lme4)
library(lmerTest)
library(parameters)
library(performance)
library(emmeans)
library(broom)
library(purrr)
library(ggplot2)
library(DHARMa)
library(nlme)
library(influence.ME)
library(see)
library(rmcorr)

# Importação dos dados
df <- readxl::read_excel("data/Tabela 2 Estatística - Otavio.xlsx")

# Ajuste do dataset
df_long <- df |>
    pivot_longer(
        cols = c(
            SDL_01_MDP,
            NPRS_SDL01,
            SDL_02_MDP,
            NPRS_SDL02,
            SDL_03_MDP,
            NPRS_SDL03,
            SDL_04_MDP,
            NPRS_SDL04
        ),
        names_to = "variable",
        values_to = "value"
    ) |>
    mutate(
        type = case_when(
            str_detect(variable, "MDP") ~ "MDP",
            str_detect(variable, "NPRS") ~ "NPRS"
        ),
        session = case_when(
            str_detect(variable, "01") ~ 1,
            str_detect(variable, "02") ~ 2,
            str_detect(variable, "03") ~ 3,
            str_detect(variable, "04") ~ 4
        )
    ) |>
    select(-variable) |>
    pivot_wider(
        id_cols = c(ID, session),
        names_from = type,
        values_from = value
    ) |>
    arrange(ID, session) |>
    rename(NPRS_dur = NPRS)

df_long <- df_long |>
    merge(
        df |> select(ID, NPRS_15d = EVA_15dias, NPRS_pre = NPRS_Inicial),
        by = "ID"
    ) |>
    mutate(session = factor(session))

1 Análise 1: Dor Durante o Movimento e Qualidade do Movimento (MDP)

1.1 Objetivo

Avaliar a associação concomitante entre a dor durante o movimento (NPRS_dur) e a qualidade do movimento (MDP) ao longo das sessões, controlando diferenças médias entre sessões e a dependência intra-indivíduo.

1.2 Modelo Estatístico

Modelo principal (efeito conjunto):

\[ \text{MDP} \sim \text{NPRS\_dur} + \text{session} + (1 \mid \text{ID}) \]

Modelo de decomposição within/between:

\[ \text{MDP} \sim \text{NPRS\_dur\_within} + \text{NPRS\_dur\_between} + \text{session} + (1 \mid \text{ID}) \]

onde:

  • NPRS_dur_within: variação intra-indivíduo (desvio da média pessoal)
  • NPRS_dur_between: média individual (diferença entre pessoas)
  • session: efeito fixo de sessão
  • (1|ID): intercepto aleatório por participante

1.3 Preparação dos Dados

Código
df_long <- df_long |>
    mutate(session = factor(session)) |>
    drop_na(MDP, NPRS_dur, session, ID)

1.4 Modelo Principal

Código
mod_conj <- lmer(MDP ~ NPRS_dur + session + (1 | ID), data = df_long)

# Efeitos fixos
parameters(mod_conj) |> parameters::print_md()
# Fixed Effects
Parameter Coefficient SE 95% CI t(257) p
(Intercept) 11.58 0.35 (10.90, 12.27) 33.12 < .001
NPRS dur 0.13 0.08 (-0.02, 0.29) 1.66 0.098
session [2] -0.27 0.17 (-0.61, 0.06) -1.60 0.111
session [3] -0.20 0.18 (-0.56, 0.16) -1.10 0.271
session [4] -0.05 0.19 (-0.43, 0.33) -0.25 0.800
# Random Effects
Parameter Coefficient SE 95% CI
SD (Intercept: ID) 2.22 0.20 (1.85, 2.66)
SD (Residual) 0.95 0.05 (0.86, 1.05)
Código
# Qualidade do ajuste
r2_vals <- performance::r2(mod_conj)
icc_vals <- performance::icc(mod_conj)
print(r2_vals)
# R2 for Mixed Models

  Conditional R2: 0.847
     Marginal R2: 0.018
Código
print(icc_vals)
# Intraclass Correlation Coefficient

    Adjusted ICC: 0.844
  Unadjusted ICC: 0.828
Código
# ANOVA - efeitos globais
anova(mod_conj)

1.5 Diagnósticos do Modelo

Código
# Verificações de adequação
performance::check_model(mod_conj)

Código
# Verificações de adequação
performance::check_singularity(mod_conj)
[1] FALSE
Código
performance::check_convergence(mod_conj)
[1] TRUE
attr(,"gradient")
[1] 3.371602e-08
Código
# Resíduos simulados (DHARMa)
sim <- simulateResiduals(mod_conj, n = 1000)
plot(sim)

Código
testUniformity(sim)


    Asymptotic one-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.085576, p-value = 0.04186
alternative hypothesis: two-sided
Código
testDispersion(sim)


    DHARMa nonparametric dispersion test via sd of residuals fitted vs.
    simulated

data:  simulationOutput
dispersion = 0.98592, p-value = 0.96
alternative hypothesis: two.sided
Código
testOutliers(sim)


    DHARMa outlier test based on exact binomial test with approximate
    expectations

data:  sim
outliers at both margin(s) = 1, observations = 264, p-value = 0.4102
alternative hypothesis: true probability of success is not equal to 0.001998002
95 percent confidence interval:
 9.589619e-05 2.092288e-02
sample estimates:
frequency of outliers (expected: 0.001998001998002 ) 
                                         0.003787879 
Código
# Heteroscedasticidade
performance::check_heteroscedasticity(mod_conj)
OK: Error variance appears to be homoscedastic (p = 0.369).

1.6 Médias Marginais por Sessão

Código
emm_sess <- emmeans(mod_conj, ~session)
emm_sess_df <- as.data.frame(emm_sess)
emm_sess_df
Código
# Visualização
ggplot(emm_sess_df, aes(x = session, y = emmean)) +
    geom_point(size = 3) +
    geom_errorbar(aes(ymin = lower.CL, ymax = upper.CL), width = 0.12) +
    geom_line(aes(group = 1)) +
    labs(
        title = "MDP (médias marginais) por sessão",
        subtitle = "Ajustado para NPRS_dur na média",
        x = "Sessão",
        y = "MDP (média marginal estimada)"
    ) +
    theme_classic(base_size = 12)

1.7 Predições: MDP vs NPRS_dur por Sessão

Código
rng <- range(df_long$NPRS_dur, na.rm = TRUE)
grid <- tidyr::expand_grid(
    NPRS_dur = seq(rng[1], rng[2], length.out = 100),
    session = levels(df_long$session)
)

pred <- cbind(grid, fit = predict(mod_conj, newdata = grid, re.form = NA))

ggplot(pred, aes(NPRS_dur, fit, color = session)) +
    geom_line(linewidth = 1) +
    labs(
        title = "MDP predito em função da dor durante o movimento",
        subtitle = "Linhas por sessão (efeitos fixos)",
        x = "NPRS_dur (dor durante o movimento)",
        y = "MDP (predito)"
    ) +
    theme_classic(base_size = 12)

1.8 Decomposição Within/Between

Código
# Criação das variáveis decompostas
df_wb <- df_long %>%
    group_by(ID) %>%
    mutate(
        NPRS_dur_between = mean(NPRS_dur, na.rm = TRUE),
        NPRS_dur_within = NPRS_dur - NPRS_dur_between
    ) %>%
    ungroup()

# Modelo com decomposição
mod_wb <- lmer(
    MDP ~ NPRS_dur_within + NPRS_dur_between + session + (1 | ID),
    data = df_wb
)

# Efeitos fixos
parameters(mod_wb) |> parameters::print_md()
# Fixed Effects
Parameter Coefficient SE 95% CI t(256) p
(Intercept) 11.41 0.49 (10.45, 12.36) 23.52 < .001
NPRS dur within 0.10 0.10 (-0.11, 0.30) 0.94 0.349
NPRS dur between 0.18 0.13 (-0.06, 0.43) 1.46 0.145
session [2] -0.26 0.17 (-0.60, 0.09) -1.47 0.141
session [3] -0.17 0.19 (-0.55, 0.21) -0.87 0.387
session [4] -4.76e-03 0.21 (-0.42, 0.41) -0.02 0.982
# Random Effects
Parameter Coefficient SE 95% CI
SD (Intercept: ID) 2.22 0.21 (1.86, 2.67)
SD (Residual) 0.95 0.05 (0.86, 1.05)
Código
# Qualidade do ajuste
performance::r2(mod_wb)
# R2 for Mixed Models

  Conditional R2: 0.849
     Marginal R2: 0.031
Código
performance::icc(mod_wb)
Código
# ANOVA
anova(mod_wb)

1.9 Interpretação

1.9.1 Resultados Principais

Modelo conjunto (MDP ~ NPRS_dur + session + (1|ID)):

  • Efeito de NPRS_dur: β = +0,13 [IC95%: −0,02 a 0,29], p = 0,098
    → Tendência positiva, não significativa ao nível de 5%

  • Efeito de sessão: F(3, ≈209) = 1,18; p = 0,319
    → Não significativo; EMMs por sessão similares (≈11,7–12,0)

  • Variância explicada:

    • R² marginal = 0,018 (efeitos fixos explicam ~1,8%)
    • R² condicional = 0,847 (modelo total ~84,7%)
    • ICC ajustado = 0,844 (maior variabilidade entre indivíduos)

Decomposição within/between:

  • Efeito within (intra-indivíduo): β = +0,10 [IC95%: −0,11 a 0,30], p = 0,349
    → Quando o indivíduo relata mais dor que seu padrão, não há evidência de mudança no MDP

  • Efeito between (entre-indivíduos): β = +0,18 [IC95%: −0,06 a 0,43], p = 0,145
    → Indivíduos com maior dor média não apresentam MDP consistentemente diferente

  • Variância explicada: R²ₘ = 0,031; R²_c_ = 0,849; ICC = 0,844

1.9.2 Diagnósticos

  • Uniformidade (DHARMa): Leve desvio (p = 0,042), sem relevância prática
  • Dispersão: Adequada (p = 0,96)
  • Outliers: Praticamente ausentes
  • Heteroscedasticidade: Não detectada (p = 0,369)
  • Convergência/Singularidade: OK

1.9.3 Conclusão

Controlando a sessão e a correlação intra-indivíduo, não há evidência estatisticamente significativa de que maior dor durante o movimento esteja associada a pior qualidade de movimento (MDP). A decomposição within/between confirma que nem variações agudas individuais nem diferenças basais entre pessoas mostram associação significativa.

1.9.4 Parágrafo para Publicação

No modelo linear misto com intercepto aleatório por participante, a dor autorreferida durante o movimento (NPRS_dur) não se associou de forma estatisticamente significativa ao MDP (β = +0,13; IC95%: −0,02 a 0,29; p = 0,098), e não houve efeito global de sessão (F(3, ≈209) = 1,18; p = 0,319). A variabilidade do MDP foi predominantemente entre indivíduos (ICC = 0,844), com R² marginal = 0,018 e condicional = 0,847. Na decomposição within/between, nem a variação intra-indivíduo (β = +0,10; p = 0,349) nem as diferenças entre indivíduos (β = +0,18; p = 0,145) mostraram associação significativa com o MDP. Diagnósticos indicaram resíduos adequados (dispersão e homoscedasticidade satisfatórias), com discreto desvio de uniformidade sem relevância prática.


2 Análise 2: Dor Atual Pré-Movimento e Qualidade do Movimento (MDP)

2.1 Objetivo

Testar se a dor atual antes da série (baseline, NPRS_pre) está associada à qualidade do movimento (MDP) nas sessões, controlando o efeito de sessão e a dependência intra-indivíduo.

2.2 Modelo Estatístico

\[ \text{MDP} \sim \text{NPRS\_pre} + \text{session} + (1 \mid \text{ID}) \]

onde:

  • NPRS_pre: dor atual autorreferida antes da série de movimento
  • session: efeito fixo de sessão
  • (1|ID): intercepto aleatório por participante

2.3 Preparação dos Dados

Código
df_long <- df_long %>%
    mutate(session = factor(session)) %>%
    drop_na(MDP, NPRS_pre, session, ID)

2.4 Modelo Principal

Código
mod_pre <- lmer(MDP ~ NPRS_pre + session + (1 | ID), data = df_long)

# Efeitos fixos
parameters(mod_pre) |> parameters::print_md()
# Fixed Effects
Parameter Coefficient SE 95% CI t(257) p
(Intercept) 11.72 0.37 (10.99, 12.46) 31.48 < .001
NPRS pre 0.11 0.14 (-0.17, 0.39) 0.76 0.449
session [2] -0.21 0.17 (-0.54, 0.12) -1.26 0.210
session [3] -0.07 0.17 (-0.40, 0.25) -0.45 0.656
session [4] 0.12 0.17 (-0.21, 0.45) 0.72 0.475
# Random Effects
Parameter Coefficient SE 95% CI
SD (Intercept: ID) 2.25 0.21 (1.88, 2.70)
SD (Residual) 0.95 0.05 (0.86, 1.05)
Código
# Qualidade do ajuste
r2_pre <- performance::r2(mod_pre)
icc_pre <- performance::icc(mod_pre)
print(r2_pre)
# R2 for Mixed Models

  Conditional R2: 0.849
     Marginal R2: 0.010
Código
print(icc_pre)
# Intraclass Correlation Coefficient

    Adjusted ICC: 0.848
  Unadjusted ICC: 0.839
Código
# ANOVA - efeitos globais
anova(mod_pre)

2.5 Diagnósticos do Modelo

Código
# Verificações de adequação
performance::check_model(mod_pre)

Código
# Verificações de adequação
performance::check_singularity(mod_pre)
[1] FALSE
Código
performance::check_convergence(mod_pre)
[1] TRUE
attr(,"gradient")
[1] 1.044954e-07
Código
# Resíduos simulados (DHARMa)
sim_pre <- simulateResiduals(mod_pre, n = 1000)
plot(sim_pre)

Código
testUniformity(sim_pre)


    Asymptotic one-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.083303, p-value = 0.05126
alternative hypothesis: two-sided
Código
testDispersion(sim_pre)


    DHARMa nonparametric dispersion test via sd of residuals fitted vs.
    simulated

data:  simulationOutput
dispersion = 0.97828, p-value = 0.914
alternative hypothesis: two.sided
Código
testOutliers(sim_pre)


    DHARMa outlier test based on exact binomial test with approximate
    expectations

data:  sim_pre
outliers at both margin(s) = 1, observations = 264, p-value = 0.4102
alternative hypothesis: true probability of success is not equal to 0.001998002
95 percent confidence interval:
 9.589619e-05 2.092288e-02
sample estimates:
frequency of outliers (expected: 0.001998001998002 ) 
                                         0.003787879 
Código
# Heteroscedasticidade
performance::check_heteroscedasticity(mod_pre)
OK: Error variance appears to be homoscedastic (p = 0.361).

2.6 Médias Marginais por Sessão

Código
emm_sess_pre <- emmeans(mod_pre, ~session)
emm_sess_pre_df <- as.data.frame(emm_sess_pre)
emm_sess_pre_df
Código
# Visualização
ggplot(emm_sess_pre_df, aes(x = session, y = emmean)) +
    geom_point(size = 3) +
    geom_errorbar(aes(ymin = lower.CL, ymax = upper.CL), width = 0.12) +
    geom_line(aes(group = 1)) +
    labs(
        title = "MDP (médias marginais) por sessão",
        subtitle = "Ajustado para NPRS_pre na média",
        x = "Sessão",
        y = "MDP (média marginal estimada)"
    ) +
    theme_classic(base_size = 12)

2.7 Predições: MDP vs NPRS_pre por Sessão

Código
rng <- range(df_long$NPRS_pre, na.rm = TRUE)
grid_pre <- expand_grid(
    NPRS_pre = seq(rng[1], rng[2], length.out = 100),
    session = levels(df_long$session)
)

pred_pre <- cbind(
    grid_pre,
    fit = predict(mod_pre, newdata = grid_pre, re.form = NA)
)

ggplot(pred_pre, aes(NPRS_pre, fit, color = session)) +
    geom_line(linewidth = 1) +
    labs(
        title = "MDP predito em função da dor atual pré-movimento",
        subtitle = "Linhas por sessão (efeitos fixos)",
        x = "NPRS_pre (dor atual antes da série)",
        y = "MDP (predito)"
    ) +
    theme_classic(base_size = 12)

2.8 Interpretação

2.8.1 Resultados Principais

Modelo MDP ~ NPRS_pre + session + (1|ID):

  • Efeito de NPRS_pre: β = +0,11 [IC95%: −0,17 a 0,39], p = 0,449
    → Não significativo; dor pré-movimento não se associa ao MDP

  • Efeito de sessão: F(3, 195) = 1,37; p = 0,255
    → Não significativo

  • Variância explicada:

    • R² marginal = 0,010 (efeitos fixos explicam ~1%)
    • R² condicional = 0,849 (modelo total ~85%)
    • ICC ajustado = 0,848 (grande variabilidade entre indivíduos)

2.8.2 Diagnósticos

  • Convergência/Singularidade: OK
  • Uniformidade (DHARMa): Limítrofe (p = 0,051), mas aceitável
  • Dispersão: Adequada (p = 0,914)
  • Outliers: Praticamente ausentes
  • Heteroscedasticidade: Não detectada (p = 0,361)

2.8.3 Conclusão

A dor atual autorreferida imediatamente antes da série de movimentos não está associada à qualidade do movimento (MDP). A maior parte da variabilidade permanece entre indivíduos, com efeitos fixos explicando porção mínima da variância.

2.8.4 Parágrafo para Publicação

O modelo linear misto com intercepto aleatório por participante não evidenciou associação entre a dor atual antes do movimento (NPRS_pre) e a qualidade do movimento (MDP) (β = 0,11; IC95%: −0,17 a 0,39; p = 0,451). O efeito de sessão também não foi significativo (F(3, 195) = 1,37; p = 0,255). A variância explicada pelos efeitos fixos foi pequena (R² marginal = 0,010), ao passo que o ajuste global do modelo foi elevado (R² condicional = 0,849), com grande proporção da variabilidade atribuída às diferenças entre indivíduos (ICC = 0,848). As verificações diagnósticas não indicaram violações relevantes de pressupostos. Em conjunto, os resultados sugerem que a dor autorreferida imediatamente antes da série não se relaciona de forma relevante com o desempenho de movimento avaliado pelo MDP.


3 Análise 3: Média de Dor em 15 Dias e Qualidade do Movimento (MDP)

3.1 Objetivo

Avaliar se a média de dor nos últimos 15 dias (NPRS_15d) está associada à qualidade do movimento (MDP), controlando sessão e a dependência intra-indivíduo via intercepto aleatório.

3.2 Modelo Estatístico

\[ \text{MDP} \sim \text{NPRS\_15d} + \text{session} + (1 \mid \text{ID}) \]

onde:

  • NPRS_15d: média de dor autorreferida nos últimos 15 dias
  • session: efeito fixo de sessão
  • (1|ID): intercepto aleatório por participante

3.3 Preparação dos Dados

Código
df_long <- df_long %>%
    mutate(session = factor(session)) %>%
    drop_na(MDP, NPRS_15d, session, ID)

3.4 Modelo Principal

Código
mod_15d <- lmer(MDP ~ NPRS_15d + session + (1 | ID), data = df_long)

# Efeitos fixos
parameters(mod_15d) |> parameters::print_md()
# Fixed Effects
Parameter Coefficient SE 95% CI t(257) p
(Intercept) 11.32 1.08 (9.20, 13.45) 10.49 < .001
NPRS 15d 0.10 0.19 (-0.27, 0.47) 0.55 0.585
session [2] -0.21 0.17 (-0.54, 0.12) -1.26 0.210
session [3] -0.07 0.17 (-0.40, 0.25) -0.45 0.656
session [4] 0.12 0.17 (-0.21, 0.45) 0.72 0.475
# Random Effects
Parameter Coefficient SE 95% CI
SD (Intercept: ID) 2.26 0.21 (1.88, 2.71)
SD (Residual) 0.95 0.05 (0.86, 1.05)
Código
# Qualidade do ajuste
r2_15d <- performance::r2(mod_15d)
icc_15d <- performance::icc(mod_15d)
print(r2_15d)
# R2 for Mixed Models

  Conditional R2: 0.849
     Marginal R2: 0.006
Código
print(icc_15d)
# Intraclass Correlation Coefficient

    Adjusted ICC: 0.848
  Unadjusted ICC: 0.843
Código
# ANOVA - efeitos globais
anova(mod_15d)

3.5 Diagnósticos do Modelo

Código
# Verificações de adequação
performance::check_model(mod_15d)

Código
# Verificações de adequação
performance::check_singularity(mod_15d)
[1] FALSE
Código
performance::check_convergence(mod_15d)
[1] TRUE
attr(,"gradient")
[1] 1.391961e-07
Código
# Resíduos simulados (DHARMa)
sim_15d <- simulateResiduals(mod_15d, n = 1000)
plot(sim_15d)

Código
testUniformity(sim_15d)


    Asymptotic one-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.077333, p-value = 0.08504
alternative hypothesis: two-sided
Código
testDispersion(sim_15d)


    DHARMa nonparametric dispersion test via sd of residuals fitted vs.
    simulated

data:  simulationOutput
dispersion = 0.97828, p-value = 0.914
alternative hypothesis: two.sided
Código
testOutliers(sim_15d)


    DHARMa outlier test based on exact binomial test with approximate
    expectations

data:  sim_15d
outliers at both margin(s) = 1, observations = 264, p-value = 0.4102
alternative hypothesis: true probability of success is not equal to 0.001998002
95 percent confidence interval:
 9.589619e-05 2.092288e-02
sample estimates:
frequency of outliers (expected: 0.001998001998002 ) 
                                         0.003787879 
Código
# Heteroscedasticidade
performance::check_heteroscedasticity(mod_15d)
OK: Error variance appears to be homoscedastic (p = 0.363).

3.6 Médias Marginais por Sessão

Código
emm_sess_15d <- emmeans(mod_15d, ~session)
emm_sess_15d_df <- as.data.frame(emm_sess_15d)
emm_sess_15d_df
Código
# Visualização
ggplot(emm_sess_15d_df, aes(x = session, y = emmean)) +
    geom_point(size = 3) +
    geom_errorbar(aes(ymin = lower.CL, ymax = upper.CL), width = 0.12) +
    geom_line(aes(group = 1)) +
    labs(
        title = "MDP (médias marginais) por sessão",
        subtitle = "Ajustado para NPRS_15d na média",
        x = "Sessão",
        y = "MDP (média marginal estimada)"
    ) +
    theme_classic(base_size = 12)

3.7 Predições: MDP vs NPRS_15d por Sessão

Código
rng <- range(df_long$NPRS_15d, na.rm = TRUE)
grid_15d <- expand_grid(
    NPRS_15d = seq(rng[1], rng[2], length.out = 100),
    session = levels(df_long$session)
)

pred_15d <- cbind(
    grid_15d,
    fit = predict(mod_15d, newdata = grid_15d, re.form = NA)
)

ggplot(pred_15d, aes(NPRS_15d, fit, color = session)) +
    geom_line(linewidth = 1) +
    labs(
        title = "MDP predito em função da média de dor em 15 dias",
        subtitle = "Linhas por sessão (efeitos fixos)",
        x = "NPRS_15d (média de dor em 15 dias)",
        y = "MDP (predito)"
    ) +
    theme_classic(base_size = 12)

3.8 Interpretação

3.8.1 Resultados Principais

Modelo MDP ~ NPRS_15d + session + (1|ID):

  • Efeito de NPRS_15d: β = +0,10 [IC95%: −0,27 a 0,47], p = 0,585
    → Não significativo; indivíduos com maior dor média em 15 dias não apresentam MDP diferente

  • Efeito de sessão: F(3, 195) = 1,37; p = 0,255
    → Não significativo

  • Variância explicada:

    • R² marginal = 0,006 (efeitos fixos explicam ~0,6%)
    • R² condicional = 0,849 (modelo total ~85%)
    • ICC ajustado = 0,848 (grande variabilidade entre indivíduos)

3.8.2 Diagnósticos

  • Convergência/Singularidade: OK
  • Uniformidade (DHARMa): Adequada (p = 0,085)
  • Dispersão: Adequada (p = 0,914)
  • Outliers: Praticamente ausentes
  • Heteroscedasticidade: Não detectada (p = 0,363)

3.8.3 Conclusão

A média de dor referida nos últimos 15 dias não se associa à qualidade do movimento (MDP). Este resultado reforça que medidas retrospectivas de dor (efeito entre-indivíduos) não predizem diferenças na qualidade de movimento.

3.8.4 Parágrafo para Publicação

No modelo linear misto com intercepto aleatório por participante, a média de dor referida nos últimos 15 dias (NPRS_15d) não se associou à qualidade do movimento (MDP) (β = 0,10; IC95%: −0,27 a 0,47; p = 0,585). O fator sessão também não foi significativo (F(3, 195) = 1,37; p = 0,255). O modelo apresentou R² marginal de 0,006 e R² condicional de 0,849, indicando que a maior parte da variabilidade é atribuída às diferenças entre indivíduos (ICC = 0,848). Os diagnósticos não sugeriram violações importantes dos pressupostos, sustentando a robustez das conclusões.


4 Análise 4: Modelo Conjunto Comparativo (Força Relativa dos Preditores)

4.1 Objetivo

Estimar a associação simultânea de três medidas de dor — NPRS_15d (média nos 15 dias), NPRS_pre (dor atual pré-série) e NPRS_dur (dor durante a série) — sobre MDP, controlando sessão e a correlação intra-indivíduo, permitindo comparar a “força” relativa de cada preditor.

4.2 Modelo Estatístico

\[ \text{MDP} \sim \text{scale(NPRS\_15d)} + \text{scale(NPRS\_pre)} + \text{scale(NPRS\_dur)} + \text{session} + (1 \mid \text{ID}) \]

onde:

  • Todos os preditores NPRS são padronizados (z-scores) para permitir comparação direta dos coeficientes
  • session: efeito fixo de sessão
  • (1|ID): intercepto aleatório por participante

4.3 Preparação dos Dados

Código
df_long <- df_long %>%
    mutate(
        session = factor(session),
        NPRS_15d_z = as.numeric(scale(NPRS_15d)),
        NPRS_pre_z = as.numeric(scale(NPRS_pre)),
        NPRS_dur_z = as.numeric(scale(NPRS_dur))
    ) %>%
    drop_na(MDP, NPRS_15d_z, NPRS_pre_z, NPRS_dur_z, session, ID)

4.4 Modelo Principal

Código
mod_joint <- lmer(
    MDP ~ NPRS_15d_z + NPRS_pre_z + NPRS_dur_z + session + (1 | ID),
    data = df_long
)

# Efeitos fixos (coeficientes padronizados)
tab_beta <- parameters::parameters(mod_joint)
tab_beta |> parameters::print_md()
# Fixed Effects
Parameter Coefficient SE 95% CI t(255) p
(Intercept) 11.98 0.31 (11.38, 12.59) 38.97 < .001
NPRS 15d z 0.04 0.29 (-0.54, 0.62) 0.12 0.901
NPRS pre z -0.02 0.33 (-0.66, 0.62) -0.05 0.956
NPRS dur z 0.31 0.22 (-0.12, 0.74) 1.40 0.162
session [2] -0.27 0.17 (-0.61, 0.07) -1.58 0.115
session [3] -0.20 0.19 (-0.57, 0.17) -1.06 0.288
session [4] -0.05 0.20 (-0.45, 0.35) -0.24 0.813
# Random Effects
Parameter Coefficient SE 95% CI
SD (Intercept: ID) 2.25 0.21 (1.87, 2.70)
SD (Residual) 0.95 0.05 (0.86, 1.05)
Código
# Qualidade do ajuste
r2_joint <- performance::r2(mod_joint)
icc_joint <- performance::icc(mod_joint)
print(r2_joint)
# R2 for Mixed Models

  Conditional R2: 0.850
     Marginal R2: 0.018
Código
print(icc_joint)
# Intraclass Correlation Coefficient

    Adjusted ICC: 0.847
  Unadjusted ICC: 0.832
Código
# ANOVA - efeitos globais
anova(mod_joint)
Código
# Colinearidade (VIF)
performance::check_collinearity(mod_joint)

4.5 Diagnósticos do Modelo

Código
# Verificações de adequação
performance::check_model(mod_joint)

Código
# Verificações de adequação
performance::check_singularity(mod_joint)
[1] FALSE
Código
performance::check_convergence(mod_joint)
[1] TRUE
attr(,"gradient")
[1] 8.331153e-07
Código
# Resíduos simulados (DHARMa)
sim_joint <- simulateResiduals(mod_joint, n = 1000)
plot(sim_joint)

Código
testUniformity(sim_joint)


    Asymptotic one-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.080727, p-value = 0.06407
alternative hypothesis: two-sided
Código
testDispersion(sim_joint)


    DHARMa nonparametric dispersion test via sd of residuals fitted vs.
    simulated

data:  simulationOutput
dispersion = 0.96184, p-value = 0.844
alternative hypothesis: two.sided
Código
testOutliers(sim_joint)


    DHARMa outlier test based on exact binomial test with approximate
    expectations

data:  sim_joint
outliers at both margin(s) = 1, observations = 264, p-value = 0.4102
alternative hypothesis: true probability of success is not equal to 0.001998002
95 percent confidence interval:
 9.589619e-05 2.092288e-02
sample estimates:
frequency of outliers (expected: 0.001998001998002 ) 
                                         0.003787879 
Código
# Heteroscedasticidade
performance::check_heteroscedasticity(mod_joint)
OK: Error variance appears to be homoscedastic (p = 0.369).

4.6 Médias Marginais por Sessão

Código
emm_sess_joint <- emmeans(mod_joint, ~session)
emm_sess_joint_df <- as.data.frame(emm_sess_joint)
emm_sess_joint_df
Código
# Visualização
ggplot(emm_sess_joint_df, aes(x = session, y = emmean)) +
    geom_point(size = 3) +
    geom_errorbar(aes(ymin = lower.CL, ymax = upper.CL), width = 0.12) +
    geom_line(aes(group = 1)) +
    labs(
        title = "MDP (médias marginais) por sessão",
        subtitle = "Ajustado para todos os preditores NPRS na média",
        x = "Sessão",
        y = "MDP (média marginal estimada)"
    ) +
    theme_classic(base_size = 12)

4.7 Interpretação

4.7.1 Resultados Principais

Modelo conjunto com preditores padronizados:

  • z-NPRS_15d: β ≈ −0,02; F(1, 67.0) = 0,015; p = 0,902
    → Não significativo; sem associação com MDP

  • z-NPRS_pre: β ≈ −0,02; F(1, 90.7) = 0,003; p = 0,956
    → Não significativo; sem associação com MDP

  • z-NPRS_dur: β ≈ +0,31; F(1, 251.5) = 1,97; p = 0,162
    → Maior coeficiente padronizado, mas ainda não significativo ao nível de 5%

  • Sessão: F(3, 202.4) = 1,17; p = 0,321
    → Não significativo

  • Variância explicada:

    • R² marginal = 0,018 (efeitos fixos explicam ~1,8%)
    • R² condicional = 0,850 (modelo total ~85%)
    • ICC ajustado = 0,847

4.7.2 Colinearidade

VIF (Variance Inflation Factor):

  • z-NPRS_dur: VIF = 1,96
  • z-NPRS_pre: VIF = 1,32
  • z-NPRS_15d: VIF = 1,08
  • sessão: VIF = 1,59

→ Todos VIF < 2: sem colinearidade problemática; comparação de força relativa é estável

4.7.3 Diagnósticos

  • Convergência/Singularidade: OK
  • Uniformidade (DHARMa): Limítrofe mas aceitável (p = 0,064)
  • Dispersão: Adequada
  • Outliers: Praticamente ausentes
  • Heteroscedasticidade: Não detectada (p = 0,369)

4.7.4 Conclusão

No modelo conjunto com os três índices de dor padronizados, nenhum preditor foi estatisticamente significativo após ajuste mútuo. Contudo, a dor durante o movimento (z-NPRS_dur) apresentou o maior coeficiente padronizado (β ≈ 0,31), sugerindo a associação mais forte com a qualidade de movimento, embora não conclusiva neste conjunto. A maior parte da variância do MDP permanece entre indivíduos (ICC = 0,847).

4.7.5 Parágrafo para Publicação

No modelo conjunto com preditores padronizados (MDP ~ z-NPRS_15d + z-NPRS_pre + z-NPRS_dur + sessão + (1|ID)), nenhum dos três índices de dor foi estatisticamente significativo após o ajuste mútuo (z-NPRS_15d: p = 0,902; z-NPRS_pre: p = 0,956; z-NPRS_dur: p = 0,162). Ainda assim, o coeficiente padronizado de dor durante o movimento (β ≈ 0,31) foi o maior em magnitude, sugerindo a associação mais forte com a qualidade de movimento, embora não conclusiva neste conjunto. O fator sessão não apresentou efeito global significativo (p = 0,321). O modelo exibiu R² marginal de 0,018 e R² condicional de 0,850, além de ICC de 0,847, indicando que a maior parte da variância do MDP se dá entre indivíduos. Não houve evidência de colinearidade relevante (VIF < 2) nem de violações importantes de pressupostos.