1 1. Objetivo e desenho analítico

Objetivo: avaliar o conhecimento e a percepção de prontidão de enfermeiros sobre choque no pós-operatório (PO) em ambiente de UTI, incluindo:
1) prontidão percebida (atualização, experiência e segurança);
2) reconhecimento de sinais (itens clínicos);
3) associações entre escores e características profissionais (tempo de experiência, escolaridade, treinamento recente etc.).

A análise é descritiva e inferencial não paramétrica (Kruskal–Wallis / Wilcoxon), apropriada para escores derivados de itens Likert (1–5).

2 2. Importação e padronização

# --- Localiza o arquivo em caminhos prováveis
candidates <- c(
  params$arquivo,
  "Reconhecimento_de_Choque_POP.xlsx",
  file.path(getwd(), "Reconhecimento_de_Choque_POP.xlsx")
)

candidates <- path.expand(candidates)
file_path <- candidates[file.exists(candidates)][1]

if (is.na(file_path)) {
  stop(
    "Arquivo não encontrado.\n",
    "Edite o parâmetro params$arquivo no YAML (topo do .Rmd) OU coloque o arquivo na pasta do projeto.\n",
    "Caminhos testados:\n- ", paste(candidates, collapse = "\n- ")
  )
}

message("Arquivo utilizado: ", file_path)

df_raw <- readxl::read_xlsx(file_path, sheet = params$sheet, .name_repair = "minimal")

# Padroniza nomes das colunas (snake_case, sem acentos)
df <- janitor::clean_names(df_raw)

# Checa duplicidade pós-limpeza (evita sobrescrita)
if (any(duplicated(names(df)))) {
  names(df) <- make.unique(names(df))
}

dim(df)
## [1] 207  39
head(df, 3)

2.1 2.1 Funções auxiliares e padronização de variáveis textuais

# Normaliza texto (minúsculas, remove múltiplos espaços)
norm_txt <- function(x) {
  x %>%
    as.character() %>%
    str_replace_all("\u00A0", " ") %>%  # non-breaking space
    str_squish() %>%
    str_to_lower()
}

# Padronização da instituição (categoria principal)
std_instituicao <- function(x) {
  x0 <- norm_txt(x)
  x0[x0 == "" | is.na(x0)] <- NA_character_

  out <- case_when(
    is.na(x0) ~ "nao_informado",

    # público / privado / ambos
    str_detect(x0, "trabalho.*dois|ambos|dois\\s*vincul|public[ao].*privad|privad.*public|p[uú]blic[ao].*privad|em\\s*2\\s*institui") ~ "publico;privado",
    str_detect(x0, "p[uú]blic[ao]|hospital\\s*p[uú]blic[ao]|prefeitura|federal|servidor\\s*p[uú]blic") ~ "publico",
    str_detect(x0, "privad|hospital\\s*privad|conveniad|particular|plano\\s*de\\s*saude") ~ "privado",

    # outros vínculos relevantes
    str_detect(x0, "filantrop") ~ "filantropico",
    str_detect(x0, "\\bsamu\\b|upa|emerg[êe]ncia\\s*m[oó]vel|servi[cç]os\\s*m[eé]dicos\\s*de\\s*emerg") ~ "prehospitalar",
    str_detect(x0, "ambul|cl[ií]nica") ~ "clinica_ambulatorio",
    str_detect(x0, "aut[oô]nom") ~ "autonomo",
    str_detect(x0, "ensino") ~ "ensino",
    str_detect(x0, "militar") ~ "hospital_militar",
    str_detect(x0, "ainda\\s*n[aã]o\\s*trabalh|n[aã]o\\s*trabalho") ~ "nao_trabalha",

    TRUE ~ "outros"
  )

  out
}

# Likert -> numérico (1 a 5)
likert_levels <- c("discordo totalmente","discordo em parte","neutro","concordo em parte","concordo totalmente")

likert_num <- function(x){
  x <- norm_txt(x)
  factor(x, levels = likert_levels, ordered = TRUE) |> as.integer()
}

# Formata p-valor em padrão PT-BR
fmt_p <- function(p) {
  if (is.na(p)) return("NA")
  if (p < 0.001) return("<0,001")
  x <- formatC(p, format = "f", digits = 3)
  gsub("\\.", ",", x)
}

2.2 2.2 Padronizações aplicadas e variáveis derivadas (escores)

df2 <- df %>%
  mutate(
    # instituição padronizada
    instituicao_std = std_instituicao(informacoes_profissionais_instituicao),

    # status "outras áreas" (respondeu vs não respondeu)
    outras_areas_status = if_else(
      is.na(informacoes_profissionais_possui_graduacao_outras_areas) |
        str_squish(as.character(informacoes_profissionais_possui_graduacao_outras_areas)) == "",
      "nao_respondeu",
      "tem"
    ),

    # treinamento últimos 2 anos
    treinamento_2anos = norm_txt(recebeu_treinamento_especi_fico_sobre_o_reconhecimento_e_manejo_do_choque_po_nos_ultimos_2_anos)
  ) %>%
  mutate(
    # instituição "macro"
    instituicao_macro = case_when(
      instituicao_std %in% c("publico","privado","publico;privado") ~ instituicao_std,
      instituicao_std == "nao_informado" ~ "nao_informado",
      TRUE ~ "outros"
    )
  )

# Deriva escores conforme sua lógica (Likert 1-5)
df3 <- df2 %>%
  mutate(
    atualizado_n  = likert_num(conhecimento_pratica_se_sente_atualizado_sobre_os_protocolos_de_manejo_do_choque_po),
    experiencia_n = likert_num(conhecimento_pratica_experiencia_em_uti_suficiente_para_lidar_com_choque_po),
    seguranca_n   = likert_num(seguranca_para_lidar_com_pacientes_em_choque_po_mediato_de_forma_independente),

    s_imediato_n  = likert_num(sinais_indicativo_de_choque_po_imediato),
    s_taq_n       = likert_num(sinais_indicativo_de_choque_po_taquicardia),
    s_olig_n      = likert_num(sinais_indicativo_de_choque_po_oliguria),
    s_hipot_n     = likert_num(sinais_indicativo_de_choque_po_hipotermia),
    s_cian_n      = likert_num(sinais_indicativo_de_choque_po_cianose),
    s_pic_n       = likert_num(sinais_indicativo_de_choque_po_aumento_pic),

    # Escores (média; mantém NA se faltar item)
    score_prontidao = rowMeans(across(c(atualizado_n, experiencia_n, seguranca_n)), na.rm = FALSE),
    score_sinais_6  = rowMeans(across(c(s_imediato_n, s_taq_n, s_olig_n, s_hipot_n, s_cian_n, s_pic_n)), na.rm = FALSE),
    score_sinais_5  = rowMeans(across(c(s_imediato_n, s_taq_n, s_olig_n, s_hipot_n, s_cian_n)), na.rm = FALSE) # sem PIC
  )

# Checagem rápida
df3 %>% select(instituicao_std, instituicao_macro, outras_areas_status, treinamento_2anos) %>% head(10)

3 3. Qualidade dos dados

3.1 3.1 Dimensões e missingness

na_summary <- df3 %>%
  summarise(across(everything(), ~ sum(is.na(.x)))) %>%
  pivot_longer(everything(), names_to = "variavel", values_to = "n_na") %>%
  mutate(pct_na = round(100 * n_na / nrow(df3), 1)) %>%
  arrange(desc(n_na))

na_summary

Interpretação (crítica e objetiva):
- A variável informacoes_profissionais_possui_graduacao_outras_areas tende a ter alta proporção de não resposta. Recomenda-se analisar essa variável como “respondeu vs não respondeu” (como feito em outras_areas_status) e, caso necessário, explorar conteúdo apenas entre respondentes.
- As demais variáveis apresentam baixa falta de dados, o que suporta análises inferenciais com perda mínima de amostra.

3.2 3.2 Distribuição das respostas Likert (itens-chave)

likert_vars <- c(
  "conhecimento_pratica_se_sente_atualizado_sobre_os_protocolos_de_manejo_do_choque_po",
  "conhecimento_pratica_experiencia_em_uti_suficiente_para_lidar_com_choque_po",
  "seguranca_para_lidar_com_pacientes_em_choque_po_mediato_de_forma_independente",
  "voce_ja_participou_de_algum_curso_de_capacitacao_sobre_manejo_de_choque_po",
  "se_sente_seguro_para_manejar_pacientes_em_choque_po_de_forma_independente",
  "se_sente_apoiado_pela_instituicao_para_atualizar_seus_conhecimentos_em_uti",
  "considera_os_recursos_disponi_veis_suficientes_para_o_manejo_do_choque_po",
  "se_sente_satisfeito_com_sua_pratica_clinica_em_uti",
  "voce_considera_a_comunicacao_eficaz_co_a_equipe_medica_importante_para_o_manejo_do_choque_po"
)

for (v in likert_vars) {
  cat("\n====================\n", v, "\n", sep = "")
  df3 %>% count(v = norm_txt(.data[[v]]), sort = TRUE) %>% print(n = 20)
}
## 
## ====================
## conhecimento_pratica_se_sente_atualizado_sobre_os_protocolos_de_manejo_do_choque_po
## # A tibble: 6 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte     106
## 2 concordo totalmente    44
## 3 neutro                 32
## 4 discordo em parte      16
## 5 discordo totalmente     8
## 6 <NA>                    1
## 
## ====================
## conhecimento_pratica_experiencia_em_uti_suficiente_para_lidar_com_choque_po
## # A tibble: 5 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte      98
## 2 concordo totalmente    71
## 3 discordo em parte      15
## 4 neutro                 14
## 5 discordo totalmente     9
## 
## ====================
## seguranca_para_lidar_com_pacientes_em_choque_po_mediato_de_forma_independente
## # A tibble: 5 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte      88
## 2 concordo totalmente    65
## 3 discordo em parte      25
## 4 neutro                 21
## 5 discordo totalmente     8
## 
## ====================
## voce_ja_participou_de_algum_curso_de_capacitacao_sobre_manejo_de_choque_po
## # A tibble: 5 × 2
##   v                       n
##   <chr>               <int>
## 1 discordo totalmente    85
## 2 concordo totalmente    45
## 3 concordo em parte      32
## 4 neutro                 28
## 5 discordo em parte      17
## 
## ====================
## se_sente_seguro_para_manejar_pacientes_em_choque_po_de_forma_independente
## # A tibble: 5 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte      97
## 2 concordo totalmente    52
## 3 neutro                 24
## 4 discordo em parte      23
## 5 discordo totalmente    11
## 
## ====================
## se_sente_apoiado_pela_instituicao_para_atualizar_seus_conhecimentos_em_uti
## # A tibble: 5 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte      61
## 2 concordo totalmente    60
## 3 neutro                 41
## 4 discordo em parte      25
## 5 discordo totalmente    20
## 
## ====================
## considera_os_recursos_disponi_veis_suficientes_para_o_manejo_do_choque_po
## # A tibble: 6 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo totalmente    77
## 2 concordo em parte      70
## 3 neutro                 29
## 4 discordo em parte      23
## 5 discordo totalmente     7
## 6 <NA>                    1
## 
## ====================
## se_sente_satisfeito_com_sua_pratica_clinica_em_uti
## # A tibble: 6 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo em parte      80
## 2 concordo totalmente    76
## 3 neutro                 29
## 4 discordo em parte      15
## 5 discordo totalmente     6
## 6 <NA>                    1
## 
## ====================
## voce_considera_a_comunicacao_eficaz_co_a_equipe_medica_importante_para_o_manejo_do_choque_po
## # A tibble: 4 × 2
##   v                       n
##   <chr>               <int>
## 1 concordo totalmente   188
## 2 concordo em parte      12
## 3 neutro                  5
## 4 discordo em parte       2

4 4. Escores e consistência interna (Cronbach)

4.1 4.1 Estatísticas descritivas dos escores

summary(df3$score_prontidao)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   3.333   4.000   3.887   4.333   5.000       1
summary(df3$score_sinais_5)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.40    4.20    4.60    4.46    4.80    5.00
summary(df3$score_sinais_6)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.667   4.000   4.333   4.230   4.500   5.000
df3 %>% summarise(
  n_total = n(),
  n_score_prontidao = sum(!is.na(score_prontidao)),
  n_score_sinais_5  = sum(!is.na(score_sinais_5)),
  n_score_sinais_6  = sum(!is.na(score_sinais_6))
)

Interpretação:
- score_prontidao reflete a prontidão percebida (atualização, experiência e segurança).
- score_sinais_5 representa reconhecimento de sinais clínicos clássicos (sem o item de PIC).
- score_sinais_6 inclui PIC (o que pode capturar um construto diferente se o item não estiver alinhado ao domínio “choque PO”). Do ponto de vista psicométrico e também do ponto de vista clínico, esse item provavelmente não está medindo o mesmo “domínio” que os outros sinais do seu bloco (taquicardia, oligúria, hipotermia, cianose, etc.). O output do psych::alpha() captou isso como correlação negativa do item s_pic_n com o componente principal (ele “anda na direção oposta” do restante).

4.2 4.2 Consistência interna

# prontidão percebida
alpha_pront <- psych::alpha(df3 %>% select(atualizado_n, experiencia_n, seguranca_n) %>% na.omit())
alpha_pront
## 
## Reliability analysis   
## Call: psych::alpha(x = df3 %>% select(atualizado_n, experiencia_n, 
##     seguranca_n) %>% na.omit())
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.77      0.77     0.7      0.53 3.4 0.028  3.9 0.87     0.54
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.71  0.77  0.82
## Duhachek  0.72  0.77  0.83
## 
##  Reliability if an item is dropped:
##               raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## atualizado_n       0.76      0.76    0.62      0.62 3.2    0.033    NA  0.62
## experiencia_n      0.60      0.60    0.43      0.43 1.5    0.055    NA  0.43
## seguranca_n        0.70      0.70    0.54      0.54 2.3    0.042    NA  0.54
## 
##  Item statistics 
##                 n raw.r std.r r.cor r.drop mean   sd
## atualizado_n  206  0.78  0.79  0.61   0.54  3.8 0.99
## experiencia_n 206  0.87  0.87  0.78   0.69  4.0 1.05
## seguranca_n   206  0.83  0.82  0.69   0.60  3.9 1.09
## 
## Non missing response frequency for each item
##                  1    2    3    4    5 miss
## atualizado_n  0.04 0.08 0.16 0.51 0.21    0
## experiencia_n 0.04 0.07 0.06 0.48 0.34    0
## seguranca_n   0.03 0.12 0.10 0.43 0.32    0
# sinais (6 itens; com PIC)
alpha_sinais_6 <- psych::alpha(df3 %>% select(s_imediato_n, s_taq_n, s_olig_n, s_hipot_n, s_cian_n, s_pic_n) %>% na.omit())
## Warning in psych::alpha(df3 %>% select(s_imediato_n, s_taq_n, s_olig_n, : Some items were negatively correlated with the first principal component and probably 
## should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
## Some items ( s_pic_n ) were negatively correlated with the first principal component and 
## probably should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
alpha_sinais_6
## 
## Reliability analysis   
## Call: psych::alpha(x = df3 %>% select(s_imediato_n, s_taq_n, s_olig_n, 
##     s_hipot_n, s_cian_n, s_pic_n) %>% na.omit())
## 
##   raw_alpha std.alpha G6(smc) average_r  S/N   ase mean   sd median_r
##       0.33       0.4     0.4       0.1 0.67 0.072  4.2 0.46     0.07
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.18  0.33  0.47
## Duhachek  0.19  0.33  0.48
## 
##  Reliability if an item is dropped:
##              raw_alpha std.alpha G6(smc) average_r  S/N alpha se  var.r med.r
## s_imediato_n      0.27      0.33    0.32     0.089 0.49    0.080 0.0141 0.051
## s_taq_n           0.29      0.38    0.35     0.107 0.60    0.078 0.0145 0.125
## s_olig_n          0.18      0.26    0.24     0.065 0.35    0.089 0.0108 0.048
## s_hipot_n         0.29      0.35    0.34     0.097 0.54    0.078 0.0147 0.049
## s_cian_n          0.24      0.32    0.31     0.087 0.48    0.083 0.0139 0.068
## s_pic_n           0.48      0.49    0.46     0.161 0.96    0.056 0.0082 0.187
## 
##  Item statistics 
##                n raw.r std.r  r.cor r.drop mean   sd
## s_imediato_n 207  0.42  0.54  0.383  0.228  4.8 0.57
## s_taq_n      207  0.41  0.48  0.278  0.159  4.7 0.74
## s_olig_n     207  0.60  0.62  0.546  0.297  4.3 0.98
## s_hipot_n    207  0.53  0.51  0.334  0.162  4.3 1.08
## s_cian_n     207  0.52  0.55  0.396  0.235  4.3 0.87
## s_pic_n      207  0.45  0.30 -0.045 -0.029  3.1 1.32
## 
## Non missing response frequency for each item
##                 1    2    3    4    5 miss
## s_imediato_n 0.01 0.00 0.00 0.15 0.83    0
## s_taq_n      0.01 0.02 0.03 0.17 0.77    0
## s_olig_n     0.03 0.03 0.09 0.28 0.57    0
## s_hipot_n    0.04 0.05 0.08 0.27 0.56    0
## s_cian_n     0.00 0.06 0.07 0.39 0.48    0
## s_pic_n      0.18 0.14 0.24 0.29 0.14    0
# sinais (5 itens; sem PIC)
alpha_sinais_5 <- psych::alpha(df3 %>% select(s_imediato_n, s_taq_n, s_olig_n, s_hipot_n, s_cian_n) %>% na.omit())
alpha_sinais_5
## 
## Reliability analysis   
## Call: psych::alpha(x = df3 %>% select(s_imediato_n, s_taq_n, s_olig_n, 
##     s_hipot_n, s_cian_n) %>% na.omit())
## 
##   raw_alpha std.alpha G6(smc) average_r  S/N   ase mean   sd median_r
##       0.48      0.49    0.46      0.16 0.96 0.056  4.5 0.49     0.19
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.35  0.48  0.58
## Duhachek  0.37  0.48  0.59
## 
##  Reliability if an item is dropped:
##              raw_alpha std.alpha G6(smc) average_r  S/N alpha se  var.r med.r
## s_imediato_n      0.42      0.42    0.38      0.16 0.74    0.065 0.0114  0.15
## s_taq_n           0.46      0.49    0.43      0.19 0.95    0.060 0.0036  0.21
## s_olig_n          0.36      0.37    0.32      0.13 0.59    0.068 0.0070  0.12
## s_hipot_n         0.45      0.45    0.40      0.17 0.81    0.059 0.0104  0.19
## s_cian_n          0.40      0.43    0.38      0.16 0.75    0.067 0.0091  0.15
## 
##  Item statistics 
##                n raw.r std.r r.cor r.drop mean   sd
## s_imediato_n 207  0.50  0.58  0.40   0.29  4.8 0.57
## s_taq_n      207  0.47  0.51  0.28   0.19  4.7 0.74
## s_olig_n     207  0.66  0.64  0.52   0.33  4.3 0.98
## s_hipot_n    207  0.62  0.56  0.35   0.23  4.3 1.08
## s_cian_n     207  0.59  0.58  0.40   0.29  4.3 0.87
## 
## Non missing response frequency for each item
##                 1    2    3    4    5 miss
## s_imediato_n 0.01 0.00 0.00 0.15 0.83    0
## s_taq_n      0.01 0.02 0.03 0.17 0.77    0
## s_olig_n     0.03 0.03 0.09 0.28 0.57    0
## s_hipot_n    0.04 0.05 0.08 0.27 0.56    0
## s_cian_n     0.00 0.06 0.07 0.39 0.48    0

Como foi feita DF2: *Instituicao_std: padroniza o texto da instituição para categorias (p.ex. “publico”, “privado”, “publico;privado”, “outros”, “nao_informado”).

*Outras_areas_status: transforma “possui graduação em outras áreas” em status de resposta (“tem” vs “nao_respondeu”), porque havia muito missing.

*Treinamento_2anos: normaliza para “sim/não” (minúsculas, sem espaços extras).

*Instituicao_macro: reduz instituicao_std para um agrupamento mais robusto (“publico”, “privado”, “publico;privado”, “outros”, “nao_informado”).

Como foi feita DF3:

Itens Likert convertidos para 1–5:

Prontidão percebida:

atualizado_n, experiencia_n, seguranca_n

Sinais de choque:

s_imediato_n, s_taq_n, s_olig_n, s_hipot_n, s_cian_n, s_pic_n

Escores (média dos itens):

*score_prontidao = média de (atualizado_n, experiencia_n, seguranca_n)

*score_sinais_6 = média dos 6 sinais (inclui PIC)

*score_sinais_5 = média dos 5 sinais clássicos (sem PIC)

Interpretação:
- Prontidão percebida: alpha ~ 0,77 indica boa consistência interna para 3 itens.
- Sinais (6 itens): alpha baixo, com alerta de correlação negativa do item PIC. Isso sugere que o item “aumento de PIC” não mede o mesmo construto dos demais sinais de choque PO; portanto, usar score_sinais_5 é metodologicamente mais defensável.
- Sinais (5 itens): alpha melhora, mas permanece moderado/baixo, o que é esperado quando itens medem sinais parcialmente independentes (sinais clínicos distintos) e quando há teto (muitos “concordo totalmente”).

5 5. Tabelas descritivas (gtsummary)

tab_overall <- df3 %>%
  select(
    faixa_etaria, tempo_experiencia, escolaridade,
    informacoes_profissionais_possui_graduacao_uti,
    instituicao_macro,
    treinamento_2anos,
    score_prontidao, score_sinais_5
  ) %>%
  tbl_summary(
    statistic = list(
      all_continuous() ~ "{median} ({p25}, {p75})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    missing_text = "NA"
  )

tab_overall
Characteristic N = 2071
faixa_etaria
    25 a 35 anos 93 (45%)
    36 a 45 anos 62 (30%)
    46 a 55 anos 24 (12%)
    Acima de 55 anos 1 (0.5%)
    Menos de 25 anos 27 (13%)
tempo_experiencia
    1 a 5 anos 81 (39%)
    11 a 20 anos 40 (19%)
    6 a 10 anos 40 (19%)
    Mais de 20 anos 10 (4.8%)
    Menos de 1 ano 35 (17%)
    NA 1 (0.5%)
escolaridade
    Doutorado 3 (1.4%)
    Mestrado 12 (5.8%)
    Pos graduacao 192 (93%)
informacoes_profissionais_possui_graduacao_uti
    sim 1 (0.5%)
    Sim 206 (100%)
instituicao_macro
    nao_informado 5 (2.4%)
    outros 16 (7.7%)
    privado 79 (38%)
    publico 101 (49%)
    publico;privado 6 (2.9%)
treinamento_2anos
    não 155 (75%)
    sim 52 (25%)
score_prontidao 4.00 (3.33, 4.33)
    NA 1
score_sinais_5 4.60 (4.20, 4.80)
1 n (%); Median (Q1, Q3)
tab_by_inst <- df3 %>%
  select(
    faixa_etaria, tempo_experiencia, escolaridade,
    informacoes_profissionais_possui_graduacao_uti,
    treinamento_2anos,
    score_prontidao, score_sinais_5,
    instituicao_macro
  ) %>%
  tbl_summary(
    by = instituicao_macro,
    statistic = list(
      all_continuous() ~ "{median} ({p25}, {p75})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    missing_text = "NA"
  )

tab_by_inst
Characteristic nao_informado
N = 5
1
outros
N = 16
1
privado
N = 79
1
publico
N = 101
1
publico;privado
N = 6
1
faixa_etaria




    25 a 35 anos 1 (20%) 4 (25%) 40 (51%) 45 (45%) 3 (50%)
    36 a 45 anos 2 (40%) 5 (31%) 22 (28%) 30 (30%) 3 (50%)
    46 a 55 anos 2 (40%) 3 (19%) 8 (10%) 11 (11%) 0 (0%)
    Acima de 55 anos 0 (0%) 0 (0%) 1 (1.3%) 0 (0%) 0 (0%)
    Menos de 25 anos 0 (0%) 4 (25%) 8 (10%) 15 (15%) 0 (0%)
tempo_experiencia




    1 a 5 anos 1 (20%) 5 (31%) 33 (42%) 41 (41%) 1 (17%)
    11 a 20 anos 0 (0%) 4 (25%) 15 (19%) 19 (19%) 2 (33%)
    6 a 10 anos 0 (0%) 2 (13%) 21 (27%) 14 (14%) 3 (50%)
    Mais de 20 anos 2 (40%) 1 (6.3%) 3 (3.8%) 4 (4.0%) 0 (0%)
    Menos de 1 ano 2 (40%) 4 (25%) 7 (8.9%) 22 (22%) 0 (0%)
    NA 0 (0%) 0 (0%) 0 (0%) 1 (1.0%) 0 (0%)
escolaridade




    Doutorado 0 (0%) 1 (6.3%) 2 (2.5%) 0 (0%) 0 (0%)
    Mestrado 2 (40%) 2 (13%) 5 (6.3%) 3 (3.0%) 0 (0%)
    Pos graduacao 3 (60%) 13 (81%) 72 (91%) 98 (97%) 6 (100%)
informacoes_profissionais_possui_graduacao_uti




    sim 1 (20%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    Sim 4 (80%) 16 (100%) 79 (100%) 101 (100%) 6 (100%)
treinamento_2anos




    não 3 (60%) 15 (94%) 53 (67%) 79 (78%) 5 (83%)
    sim 2 (40%) 1 (6.3%) 26 (33%) 22 (22%) 1 (17%)
score_prontidao 3.67 (3.00, 4.33) 3.83 (2.67, 4.17) 4.00 (3.67, 4.67) 4.00 (3.33, 4.33) 4.67 (4.33, 5.00)
    NA 0 0 1 0 0
score_sinais_5 3.80 (3.80, 4.40) 4.60 (4.10, 5.00) 4.60 (4.20, 4.80) 4.60 (4.20, 4.80) 4.80 (4.20, 5.00)
1 n (%); Median (Q1, Q3)

N=207

75% sem treinamento nos últimos 2 anos

score_prontidao: mediana 4.00 (3.33–4.33)

score_sinais_5: mediana 4.60 (4.20–4.80)

6 6. Análises inferenciais

6.1 6.1 Prontidão percebida (score_prontidao)

kw_exp <- kruskal.test(score_prontidao ~ tempo_experiencia, data = df3)
kw_esc <- kruskal.test(score_prontidao ~ escolaridade, data = df3)
kw_uti <- kruskal.test(score_prontidao ~ informacoes_profissionais_possui_graduacao_uti, data = df3)
kw_inst <- kruskal.test(score_prontidao ~ instituicao_macro, data = df3)
kw_treino <- kruskal.test(score_prontidao ~ treinamento_2anos, data = df3)

list(
  tempo_experiencia = kw_exp,
  escolaridade = kw_esc,
  graduacao_uti = kw_uti,
  instituicao_macro = kw_inst,
  treinamento_2anos = kw_treino
)
## $tempo_experiencia
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_prontidao by tempo_experiencia
## Kruskal-Wallis chi-squared = 18.405, df = 5, p-value = 0.002479
## 
## 
## $escolaridade
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_prontidao by escolaridade
## Kruskal-Wallis chi-squared = 9.8879, df = 2, p-value = 0.007126
## 
## 
## $graduacao_uti
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_prontidao by informacoes_profissionais_possui_graduacao_uti
## Kruskal-Wallis chi-squared = 3.0084, df = 1, p-value = 0.08283
## 
## 
## $instituicao_macro
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_prontidao by instituicao_macro
## Kruskal-Wallis chi-squared = 9.1637, df = 4, p-value = 0.05714
## 
## 
## $treinamento_2anos
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_prontidao by treinamento_2anos
## Kruskal-Wallis chi-squared = 33.457, df = 1, p-value = 7.284e-09

Kruskal–Wallis por tempo de experiência

p = 0,002 (significativo) eta²[H] = 0,067 (efeito moderado, pela sua regra)

Significado: a prontidão percebida varia com experiência.

Kruskal–Wallis por escolaridade

p = 0,007 (significativo) eta²[H] = 0,039 (efeito pequeno)

Significado: escolaridade também se associa, mas com impacto menor.

Graduação em UTI (sim/não)

p = 0,083 (não significativo) Instituição macro

p = 0,057 (tendência; não atinge 0,05)

Treinamento últimos 2 anos

p < 0,001 (muito significativo) r = 0,403 (efeito moderado)

Treinamento recente está associado a maior prontidão percebida.

6.1.1 Tamanhos de efeito

eff_exp <- df3 %>% rstatix::kruskal_effsize(score_prontidao ~ tempo_experiencia)
eff_esc <- df3 %>% rstatix::kruskal_effsize(score_prontidao ~ escolaridade)
eff_tre <- df3 %>% rstatix::wilcox_effsize(score_prontidao ~ treinamento_2anos)

eff_exp
eff_esc
eff_tre

6.1.2 Pós-teste (Dunn-Holm) quando Kruskal–Wallis significativo

# Dunn para tempo de experiência (somente se p<0.05)
if (!is.na(kw_exp$p.value) && kw_exp$p.value < 0.05) {
  dunn_exp <- df3 %>%
    filter(!is.na(score_prontidao), !is.na(tempo_experiencia)) %>%
    rstatix::dunn_test(score_prontidao ~ tempo_experiencia, p.adjust.method = "holm")
  dunn_exp
}
# Dunn para escolaridade (somente se p<0.05)
if (!is.na(kw_esc$p.value) && kw_esc$p.value < 0.05) {
  dunn_esc <- df3 %>%
    filter(!is.na(score_prontidao), !is.na(escolaridade)) %>%
    rstatix::dunn_test(score_prontidao ~ escolaridade, p.adjust.method = "holm")
  dunn_esc
}

Dunn-Holm

Após ajuste, pares que ficaram significativos envolvem principalmente:

11–20 anos vs menos de 1 ano

6–10 anos vs menos de 1 ano

Ou seja, a diferença “real” está nos extremos (iniciante vs mais experiente), não entre faixas intermediárias.

Escolaridade: Dunn-Holm

Significativos:

Doutorado vs Mestrado (com n muito pequeno em Doutorado = 3)

Mestrado vs Pós-graduação

Cuidado técnico: o grupo Doutorado é minúsculo, então esse resultado é instável e deve ser reportado com ressalva.

Interpretação:
- Se o teste de Kruskal–Wallis for significativo, o pós-teste identifica quais pares diferem.
- Reporte sempre: estatística do teste, p-valor ajustado e tamanho de efeito (eta²[H] ou r).

6.2 6.2 Reconhecimento de sinais (score_sinais_5)

kw_sinais_treino <- kruskal.test(score_sinais_5 ~ treinamento_2anos, data = df3)
kw_sinais_inst <- kruskal.test(score_sinais_5 ~ instituicao_macro, data = df3)

kw_sinais_treino
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_sinais_5 by treinamento_2anos
## Kruskal-Wallis chi-squared = 0.2276, df = 1, p-value = 0.6333
kw_sinais_inst
## 
##  Kruskal-Wallis rank sum test
## 
## data:  score_sinais_5 by instituicao_macro
## Kruskal-Wallis chi-squared = 2.9961, df = 4, p-value = 0.5585
df3 %>% rstatix::wilcox_effsize(score_sinais_5 ~ treinamento_2anos)

Treinamento vs sinais: p = 0,633 (não significativo) Efeito: r ≈ 0,033 (pequeno)

Interpretação:
- Se score_sinais_5 não variar com treinamento recente, isso sugere que a capacitação (como medida aqui) impacta mais a prontidão percebida do que o reconhecimento autoavaliado de sinais (possível efeito teto / desejabilidade social).

7 7. Visualizações

7.1 7.1 Distribuição dos escores

df_long <- df3 %>%
  select(score_prontidao, score_sinais_5, score_sinais_6) %>%
  pivot_longer(everything(), names_to = "score", values_to = "valor")

ggplot(df_long, aes(x = valor)) +
  geom_histogram(binwidth = 0.25) +
  facet_wrap(~ score, ncol = 1, scales = "free_y") +
  labs(x = "Escore (1 a 5)", y = "Frequência", title = "Distribuição dos escores")
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

7.2 7.2 Prontidão por treinamento (boxplot)

ggplot(df3, aes(x = treinamento_2anos, y = score_prontidao)) +
  geom_boxplot() +
  labs(x = "Treinamento nos últimos 2 anos", y = "Score de prontidão (1–5)",
       title = "Prontidão percebida por treinamento recente")
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_boxplot()`).

8 8. Síntese

n_total <- nrow(df3)
n_pront <- sum(!is.na(df3$score_prontidao))
n_s5 <- sum(!is.na(df3$score_sinais_5))

cat("**Amostra analisada:** ", n_total, " respondentes. ",
    "Foram obtidos escores de prontidão para ", n_pront, " (", round(100*n_pront/n_total,1), "%) e escores de sinais (5 itens) para ",
    n_s5, " (", round(100*n_s5/n_total,1), "%).\n\n", sep = "")

Amostra analisada: 207 respondentes. Foram obtidos escores de prontidão para 206 (99.5%) e escores de sinais (5 itens) para 207 (100%).

cat("**Consistência interna (Cronbach):** prontidão apresentou boa consistência (alpha ≈ ",
    round(alpha_pront$total$raw_alpha,2), "). ",
    "Para sinais, a inclusão do item de PIC reduziu a consistência e gerou alerta de correlação negativa, ",
    "sugerindo que o item pode representar um construto distinto. ",
    "Assim, `score_sinais_5` é preferível como desfecho composto.\n\n", sep = "")

Consistência interna (Cronbach): prontidão apresentou boa consistência (alpha ≈ 0.77). Para sinais, a inclusão do item de PIC reduziu a consistência e gerou alerta de correlação negativa, sugerindo que o item pode representar um construto distinto. Assim, score_sinais_5 é preferível como desfecho composto.

cat("**Testes não paramétricos:**\n\n",
    "- `score_prontidao` vs tempo de experiência: p = ", fmt_p(kw_exp$p.value), " (eta²[H] = ", round(eff_exp$effsize,3), ").\n",
    "- `score_prontidao` vs escolaridade: p = ", fmt_p(kw_esc$p.value), " (eta²[H] = ", round(eff_esc$effsize,3), ").\n",
    "- `score_prontidao` vs treinamento recente: p = ", fmt_p(kw_treino$p.value), " (r = ", round(eff_tre$effsize,3), ").\n",
    "- `score_prontidao` vs instituição (macro): p = ", fmt_p(kw_inst$p.value), ".\n\n",
    "- `score_sinais_5` vs treinamento recente: p = ", fmt_p(kw_sinais_treino$p.value), ".\n",
    sep = ""
)

Testes não paramétricos:

9 9. Reprodutibilidade

As análises estatísticas foram conduzidas no software R (R version 4.5.0, RStudio 2025.05.0 Build 496; Posit Software, PBC). Em caso de dúvidas ou solicitações adicionais, entrar em contato pelo e-mail liliandz@unicamp.br.