TASComp Estudo piloto

Author

Carolina Aguiar (Mestranda)

Dados do estudo piloto

  • Foram analisadas a acurácia e o tempo médio de resposta por cada participante em cada tipo de sentença, e agrupado por cada tipo de sentença considerando a amostra total

  • Neste arquivo será apresentado o passo a passo do código para leitura dos dados

    Carregando pacotes

library(stringr)
library(readr)
library(dplyr) 
library(data.table) 
library(readxl)
library(tidyr)
library(tidyr)
library(fuzzyjoin)
library(xfun)
library(purrr)
library(knitr)
.libPaths()
[1] "C:/Users/carol/OneDrive/Documentos/R/win-library/4.0"
[2] "C:/Program Files/R/R-4.0.5/library"                  

Selecionando o diretório

  • Selecionar o diretório para “puxar” os dados da pasta

  • Os arquivos do Psytoolkit são salvos separadamente, por participante - e também separados em arquivos de experimento e arquivos de eperimento

Unindo os arquivos separados

dadospiloto1 <- list.files(full.names = FALSE) %>%# organiza arquivos da pasta
  sapply(., read_table, col_names = FALSE , simplify = F) %>% 
  # faz a leitura dos arquivos e transforma em lista
  rbindlist(., use.names = TRUE, idcol = "id", fill= TRUE) %>% 
  # transforma a variavel em um data frame e cria uma coluna com o nome do arquivo de origem
  mutate(id = str_sub(id, end = -5)) # para tirar os textos "a mais"

names(dadospiloto1)=c("ID", "exp","questao" ,"tipo", "condicao","RT", "pontuacao", "tempo", "acerto", "resposta") #renomeia o nome de cada coluna do data frame
dadospiloto1$tempo <- as.numeric(dadospiloto1$tempo)

t1 <- dadospiloto1 %>% group_by(ID, condicao) %>% 
  summarise(mean(tempo), median(tempo))  #calcula a media e mediana para cada condicao

t2 <- dadospiloto1 %>% group_by(ID, condicao) %>% 
  summarise(sum(acerto == "Correto") * 100/n())  #soma o numero de acertos, multiplica por 100 e divide pelo numero de trials

final_dados <- list(t1, t2) %>% reduce(inner_join)  %>% 
  mutate_if(., is.numeric, round, 2)
names(final_dados)=c("ID", "condicao", "Mean(tempo)", "Median(tempo)","pontuacao") #renomeia as colunas

write.csv("dadospiloto.csv") 
"","x"
"1","dadospiloto.csv"
write.csv("final_dados.csv")
"","x"
"1","final_dados.csv"

Arquivos

  • O arquivo dados piloto 1 contém todas as respostas de todos os participantes (como salvo no slide anterior)

  • O arquivo final_dados já agrupa o tempo e os acertos por condição, em cada participante - assim como define a acurácia em porcentagem

Não utilizado nesse momento…

#remover outliers +- 2dp
#dados <- subset(filtro,filtro$RT > mean(filtro$RT, na.rm = TRUE) - 
                  #2*sd(filtro$RT, na.rm = TRUE) & 
                  #filtro$RT < mean(filtro$RT, na.rm = TRUE) + 
                  #2*sd(filtro$RT, na.rm = TRUE)) 

#filtro <- dadospiloto %>%  filter(ID != "", Status == "Correto",
                              #Block != "training")

Construindo tabelas

library(reactable)

table <- reactable(final_dados,
  defaultColDef = colDef(
    minWidth = 100,
    width = 150,
    style = list(padding = "0 13px"), html = TRUE
  )
)

table <- reactable(final_dados, searchable = TRUE)
table
# table

# save widget
# library(htmltools)
# saveWidget(table, file="../HtmlWidget/reactable1.html")
library(reactable)

table <- reactable(
  final_dados,
  searchable = TRUE,
  filterable = TRUE,
  highlight = TRUE,
  striped = TRUE,
  bordered = TRUE,
  resizable = TRUE,
  defaultColDef = colDef(
    minWidth = 100,
    width = 200,
    align = "center",
    style = list(padding = "0 13px"),
    html = TRUE
  )
)

table <- reactable(final_dados, searchable = TRUE)
table

Tempo e % de acertos por participante em cada bloco (tipo de sentença)

summary_condition <- final_dados %>%
  group_by(condicao) %>%
  summarise(media_acuracia = mean(pontuacao, na.rm = TRUE)) %>%
  ungroup()

summary_condition$media_acuracia <- round(summary_condition$media_acuracia, 2)
library(ggplot2)

Tabela com % média de acertos por condição

library(reactable)

table1 <- reactable(
  summary_condition,
  columns = list(
    condicao = colDef(name = "condicao"),
    media_acuracia = colDef(
      name = "media_acuracia",
      sortable=TRUE
    )
  ),
  striped = TRUE,
  highlight = TRUE,
  bordered = TRUE
)

table1 <- reactable(summary_condition, searchable = TRUE)
table1
summary_condition_ID <- final_dados %>%
  group_by(ID) %>%
  summarise(media_acuracia_ID = mean(pontuacao, na.rm = TRUE)) %>%
  ungroup()

summary_condition_ID$media_acuracia_ID <- round(summary_condition_ID$media_acuracia_ID, 2) #reduzindo o numero de casas decimais
library(ggplot2)

Tabela com % média de acertos por participante

library(reactable)

table1_ID <- reactable(
  summary_condition_ID,
  columns = list(
    ID = colDef(name = "ID"),
    media_acuracia_ID = colDef(
      name = "media_acuracia",
      sortable=TRUE
    )
  ),
  striped = TRUE,
  highlight = TRUE,
  bordered = TRUE
)

table1_ID <- reactable(summary_condition_ID, searchable = TRUE)
table1_ID

Gráfico

% acurácia em cada bloco

# Supondo que seu data frame original se chame df
summary_condition <- summary_condition %>%
  group_by(condicao) %>%
  summarise(
    media_acuracia = media_acuracia,
    se = sd(media_acuracia) / sqrt(n())
  )

# Criar o gráfico de barras com erro padrão
ggplot(summary_condition, aes(x = condicao, y = media_acuracia)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_errorbar(aes(ymin = media_acuracia - se, ymax = media_acuracia + se),
                width = 0.2) +
  labs(x = "Condição", y = "Média de Acurácia") +
  theme_grey() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(ggplot2)

ggplot(dadospiloto1, aes(x = condicao, y = tempo)) +
  geom_boxplot(fill = "skyblue") +
  labs(x = "Condição", y = "Tempo") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 60, hjust = 1))

library(dplyr)

final_dados <- final_dados %>%
  rename(tempo = `Mean(tempo)`)

Carregando tabelas com info do questionário

  • Carregando tabelas com informações do questionário e outras preenchidas separadamente (idade, gênero dos participantes + informações do survey)

  • Unir a tabela com os dados do experimento

library(readr)
info_piloto <- read_delim("info_piloto.csv", 
    delim = ";", escape_double = FALSE, trim_ws = TRUE,
    show_col_types = FALSE)



#junta os dados dos dois bancos
piloto_final_info <- stringdist_join(info_piloto, dadospiloto1, 
                         by='ID', # junta os bancos de dados de acordo com a coluna ID
                         mode='inner', #use left join
                         method = "jw", #use jw distance metric
                         max_dist= 0.1, 
                         distance_col='dist') %>%
  group_by(ID.x) %>% slice_min(order_by=dist, n=1) 

#write_csv(final, file = "dados_final_piloto.csv")

reactable(piloto_final_info)