#html_document

R survival guide

Antes de começar temas mais voltados à Psicometria, esta seção se propõe a apresentar um breve tutorial estatístico e computacional visando orientar às análises e seus resultados principais no ambiente das pesquisas em Psicologia. Como nosso curso possui ênfase pragmática, a supressão de conceitos teóricos (matemáticos ou não) e provas por indução ou aproximação numérica são intencionais. Todos os códigos estarão disponíveis e os pacotes serão carregados à medida da usabilidade deles.

Os dados das seguintes pesquisas serão parcialmente utilizados no decorrer das explicações:

Arruda, Arruda, Anunciação (2019). Psychometric properties and clinical utility of the Executive Function Inventory for Children and Adolescents: a large multistage populational study including children with ADHD. Applied Neuropsychology: Child. Under review.

Matsubara, L.M., Luna, S.P.L., Teixeira, L.R., Castilho, M.S., Björkman, A.H., Oliveira, H.S., & Anunciação, L.F.C.. (2019). Avaliação psicométrica em português do indicador de dor crônica de Helsinki em cães com sinais crônicos de osteoartrite. Arquivo Brasileiro de Medicina Veterinária e Zootecnia, 71(1), 109-118. https://dx.doi.org/10.1590/1678-4162-9892

Anunciação, L., Chen, C., Pereira, D.A., & Landeira-Fernandez, J.. (2019). Factor Structure of a Social-Emotional Screening Instrument for Preschool Children. Psico-USF, 24(3), 449-461. Epub October 10, 2019. https://dx.doi.org/10.1590/1413-82712019240304

Anunciação, Luis, et al. “Confirmatory Analysis and Normative Tables for the Brazilian Ages and Stages Questionnaires : Social–Emotional.” Child: Care, Health and Development, vol. 45, no. 3, Apr. 2019, pp. 387–393., https://dx.doi.org/10.1111/cch.12649.

O primeiro trabalho será utilizado para explicitação de técnicas estatísticas.

Notas importantes

Esse handout faz parte de um compilado de aulas e tutoriais feitos por mim e por muitos outros pesquisadores. Assim, não há absolutamente nenhum material original nele e todas as obras consultadas têm suas citações e referências disponíveis ao fim. Penso que a originalidade deste trabalho está justamente em organizar todo o conteúdo de maneira estruturada, que faça sentido e possa ser computacionalmente demonstrada. Caso você deseje utilizar esse material em outros contextos não-comerciais, sinta-se livre para isso. Não se esqueça de citar.

Todo material foi feito com atenção no ambiente R Markdown, mas erros de digitação, acentuação (etc) podem ocorrer. Por sua vez, aspectos estatísticos foram amplamente revistos e espera-se que não haja erros ou ambuiguidades. No entanto, caso você identifique algo fora do esperado, por favor, envie um e-mail para luisfca@gmail.com.

Esse material é sempre salvo em formato pdf e online. Por motivos óbvios, a versão online apresenta-se mais completa e atualizada do que as outras. Você pode verificar a data do website na parte superior, sabendo que a primeira versão deste material foi feita em 23 de outubro de 2019. Atente-se que a cor de fundo de alguns pontos é diferente e isso serve para destacar tanto códigos como algumas passagens.

Teoria dos erros (NHST)

A inferência estatística pode ser querbada em estimação pontual, estimação intervalar, testes de hipóteses e comparação de modelos. Toda inferência está sujeita a erros e isso, por ora, recebe maior destaque quando se trabalha com testes de hipóteses de hipóteses. A relação entre os erros do tipo 1 e do tipo 2 está apresentada a seguir. É importante notar que a forma de passar esse conteúdo é bastante dependente do contexto acadêmico. Areas como epidemiologia, biomedicina e psicologia quase sempre tem predileção de uso da nomenclatura de “falso positivo”/“falso negativo”. Áreas como estatística, egenharias e ciências da computação tendem a classificar os erros por seus dois “tipos”. Não é difícil perceber que, apesar da forma de ensino ser um pouco distinta, o conteúdo é similar. Dessa maneira, visando criar um ambiente pedagógico que atenda os diferentes públicos, os conceitos serão vistos em paralelo e com auxílio de tabelas e gráficos.

A maioria dos livros de estatística apresenta uma tabela similar a posta a seguir.

Tabela de tomada de decisão

Tabela de tomada de decisão

É possível verificar que existe uma interface entre o processo de inferência estatística e as condições da realidade. A estatística frequentista assume que a \(H_0\) é verdadeira e é isso que está expresso nas colunas. Técnicamente, não controlamos isso. Por sua vez, o processo inferencial pode ter seu desfecho em rejeitar a hipótese nula ou falhar em rejeitar e ele depende de algumas características definidas pelo pesquisador.

É claro perceber que existem acertos e erros no processo inferencial (e, consequentemente, nas decisões calcadas nele). O Erro do tipo 1 ocorre quando rejeitamos a hipótese nula quando ela é verdadeira. A probabilidade desse erro é o nível de significância eleito e é apresentado pela letra grega \(\alpha\). Dessa maneira, \(\alpha = P(Tipo 1 erro)\).

O erro do tipo 2 ocorre quando falhamos em rejeitar a hipótese nula quando ela é falsa. Ele é apresentado pela letra grega \(\beta\). Assim, \(\beta = P(Type 2 Error)\). Um conceito fundamental na inferência estatística é o Poder do teste. O Poder é a probabilidade de rejeitar a hipótese nula quando ela é falsa. Todo pesquisador deseja minimizar os erros, no entanto, existe um tradeoff em que minimizar o erro do tipo 1 vem acompanhado da maximização do erro do tipo 2. Um ponto de comum acordo entre os pesquisadores está na estipulação do limite máximo do Erro do tipo 1 em 10% (\(\alpha = 0.1\)) e a tentativa de manter o \(\beta\) em 80% (\(\beta = 0.8\))

Tabela de tomada de decisão

Tabela de tomada de decisão

Evidentemente, sem ter exemplos mais aderentes à realidade, o conteúdo torna-se difícil de assimilar.Apesar de úteis, eles costumam criar muitos(!) problemas quando tenta-se fazer uma interface matemática com eles. No entanto, um exemplo muito conhecido seguie assim: imagine que um um teste diagnóstico foi desenvolvido para verificar se uma pessoa está grávida (resultado positivo) ou não (resultado negativo). Por definição, a estatística frequentista vai assumir que a Hipótese nula é verdadeira (não há sinal e, portanto, não há gravidez). Caso um homem faça o exame e o teste acuse que ele não está grávido (resultado negativo), o teste acertou (trata-se de um VN). Caso o homem faça o exame e o teste acuse que ele está grávido (resultado positivo), o teste errou (trata-se de um FP ou erro do tipo 1). Em contraste, caso uma mulher grávida (e sabe-se disso por outros meios) faça este exame e ele acuse que ela está grávida (resultado positivo), o teste acertou (trata-se de um VP ou 1-\(\beta\)). Caso o teste tenha como resultado que ela não está grávida (resultado negativo), ele errou (trata-se de um FN).

A apresentação gráfica também tem lugar na apresentação do conceito e ela é quase sempre feita apresentando duas distribuições normais parcialmente interpostas. A Normal do lado esquerdo é uma em que a Hipótese nula é verdadeira (apenas ruído) e a do lado direito é aquela em que a Hipótese nula é falsa (tecnicamente, sinal + ruído). A linha vertical ao centro é o critério decisional e, na imagem abaixo, ela tenta ser equilibrado, visando uma diminuição de ambos os erros. Resultados à direita do critério são positivos, uma vez que rejeitam a hipótese nula. Resultados à esquerda ao critério são negativos, uma vez que falham em rejeitar a hipótese nula.

grafico sobre possíveis decisõeso

grafico sobre possíveis decisõeso

Esse diagrama é bastante útil para notar que existe uma área (em azul escuro) onde a hipótese nula é verdadeira, mas foi rejeitada, gerando um erro do tipo 1 \(\alpha\). Além disso, á area em verde escuro apresenta a região em que a hipótese nula é falta e deveria ter sido rejeitada mas não foi, ilustrando o erro do tipo 2 (\(\beta\))

criterio moderado

criterio moderado

Mantidas as disitruições, levar o critério mais à esquerda acarreta em duas condições, que são: (i) a redução do erro do tipo 2, seguida pelo (ii) aumento do erro do tipo 1. Pragmaticamente, a inferência estatística agora tende a rejeitar \(H_0\), gerando resultados positivos, inclusive àqueles que não eram positivos. Esse critério é considerado muito leniente, já que, em detrimento de diminuir o falso negativo, aumenta o verdadeiro positivo, mas também o Falso positivo. Alguns autores também chamam esse critério de liberal ou sensível.

criterio liberal

criterio liberal

Por sua vez, levar o critério à direita faz o inverso: diminui os falsos positivos, mas aumenta o falso negativo. Como agora a tomada de decisão tende a falhar em rejeitar a hipótese nula e, consequentemente, gerar muitos resultados negativos, esse critério é também entendido como rígido, específico ou conservador.

criterio conservador

criterio conservador

Sobre esse tema, existem discussões interessantes pelo menos (i) sobre os possíveis motivos que aumentam ambos os erros, especialmente o erro do tipo 1, (ii) as consequências desses erros, (iii) em quais situações o detrimento de um erro sobre o outro poderia ser justificável e (iv) quais são as estratégias (de delineamento ou analíticas) para prevenção dos erros. Colateralmente, há também um debate muito inflamado sobre a proporção de falsos positivos publicados que quase sempre é associado à uma ideia mais geral de de viés de publicação e uma condição mais probablemática sobre p-hacking, que anda por uma linha tênue entre a necessidade de discussão e ofensas e desconfianças aos pesquisadores.

Ter uma clara noção sobre a teoria dos erros é importante, mas o olhar atento sobre o esquema até agora apresentado pode trazer à cena uma condição crucial: até o momento, o que é feito é uma comparação entre condições binárias de presença ou ausência. Em outras palavras, estamos comparando a exisência de um fenômeno ou sinal com a sua inexistência. Obviamente, situações reais são totalmente distantes desse concepção e quase sempre o que temos como foco analítico é a comparação entre dois ou mais modelos. Apesar de muito importante, esse tema não será discorrido nesse hand out.

Além disso - e para encerrar o tópico - o framework de base desta ilustração é o da estatística frequentista. Nele, assume-se que a hipótese nula é verdadeira e que a probabilidade é entendida como uma repetição infinida de experimentos idênticos. Assim, o p-valor é uma probabilidade de se obter uma estatística de teste tão extrema, ou ainda mais extrema!, do que a observada assumindo \(H_0\) como verdadeira. De forma alguma, o p-valor comenta sobre teorias, tampouco permite que se aceite a hipótese alternativa quando se rejeita a hipótese nula. Assim, é fácil perceber que a realidade das pesquisas e a capacidade de respostas oferecidas pela estatística frequentista não são totalmente associadas. Um ponto de saída é a estatística Bayesiana, que também nào será tema do hand out.

Isto posto, temos condição de avançar para o próximo tópico.

Medidas de tendência central e dispersão

Atenção! Os resultados abaixo são baseados na ‘base_efica’.

As medidas de posição podem ser quebradas em medidas tendência central e separatrizes. As medidas de tendência central, no entanto, são compostas pela Moda, Media e Mediana. A moda tem pouca utilidade pragmática, uma vez que apresenta a realização mais frequente de uma variável. A média é uma medida muito utilizada, além de intuitiva. Como a média é sensível a todos os pontos, apesar dela ser consistente e não-viesada (de \(\mu\)), seus resultados são pouco resistentes/robustos. A mediana, por sua vez, é menos intuitiva, mas mais robusta aos pontos anômalos. A mediana também pode ser classificada como uma separatriz, com resultados análogos ao 2o Quartil, 50 percentil e 50 Decil. Frequentemente, a mediana é utilizada em distribuições assimétricas.

As medidas de dispersão indicam o grau que as observações se afastam ou se espalham de uma medida de posição. Há varias medidas, mas ao verificar a frequência em que elas aparecem, provavelmente o Desvio-padrão e o Intervalo Interquartil são as mais comuns. O Desvio-padrão apresenta o afastamento em torno da média e o Intervalo Interquartil apresenta distância entre o primeiro quartil (Q1) e o terceiro quartil (Q3). Dessa maneira, 50% dos dados estão dentro deste intervalo.

Para ilustrar, a tabela a seguir apresenta as principais estatísticas descritivas da ‘idade’ dos participantes da pesquisa agrupados por sua condição clínica.

library(summarytools)
## Registered S3 method overwritten by 'pryr':
##   method      from
##   print.bytes Rcpp
## 
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
## 
##     view
library(janitor)
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
base_efica <- clean_names(base_efica)

base_efica %>% 
  group_by(group) %>% 
  select(age) %>% 
  descr(.)
## Adding missing grouping variables: `group`
## Descriptive Statistics  
## age by group  
## Data Frame: base_efica  
## N: 165  
## 
##                     group = tdah   group = tipico
## ----------------- -------------- ----------------
##              Mean           7.70             8.18
##           Std.Dev           2.16             2.60
##               Min           5.00             5.00
##                Q1           6.00             6.00
##            Median           7.00             8.00
##                Q3           9.00            10.00
##               Max          15.00            18.00
##               MAD           1.48             2.97
##               IQR           3.00             4.00
##                CV           0.28             0.32
##          Skewness           0.72             1.09
##       SE.Skewness           0.19             0.04
##          Kurtosis          -0.11             1.36
##           N.Valid         165.00          3284.00
##         Pct.Valid         100.00           100.00

Gráficos

A escolha do gráfico é relacionada à quantidade de variáveis presentes e ao nível de medida da VI quando há duas (ou mais) variáveis. Gráficos de barras e de setores são úteis quando há apenas uma variável categórica e Boxplot, Histogramas e gráficos de densidade são uteis quando há apenas uma variável contínua.

Por exemplo, para variável “sexo”, o gráfico de setor abaixo é informativo.

ggplot(base_efica, aes(x = "", fill = sex)) + 
  geom_bar(width = 1) + 
  coord_polar(theta="y") +
  theme_bw()

Já para variável idade, o gráfico de densidade (de kernel) é adequado. Esse gráfico é uma variante do histograma.

ggplot(base_efica, aes(age)) +
  geom_density(fill = "royalblue", alpha=.4) +
  theme_bw()

A relação entre duas variáveis em que a VI é discreta (sexo, por exemplo) é bem vista por um boxplot, tal como abaixo

ggplot(base_efica, aes(x = sex, y = age, color = sex)) +
  geom_boxplot() +
  theme_bw() +
  theme(legend.position = "none")

Quando ela é continua, um gráfico de dispersão auxilia

ggplot(base_efica, aes(x=parents_totalpoints, y = teachers_totalpoints)) +
  geom_jitter() +
  theme_bw()

Modelos lineares

Os testes mais comumente utilizados em Psicologia podem ser entendidos como modelos lineares (GLM) e, em sentido mais específico, modelos de regressão com algumas restrições (para mais informações, este link é interessante. Pragmaticamente, análises univariadas podem ser representadas pela relação entre a VI e a VD e, ao considera-las como discretas ou contínuas, o quadro abaixo apresenta os modelos estatísticos:

tabela de testes

tabela de testes

Como por óbvio esse sistema apresentado é limitado e as controversias podem ser impulsionadas, algumas notas de ponderação:

  1. Há bastante polêmica em considerar variáveis categóricas como discretas e isso é uma saída provisória apenas por considerar que elas se seguem uma função de probabilidade de massa

  2. Tecnicamente, o qui-quadrado não assume uma VI e uma vD.

Um passo altamente informativo antes mesmo da realização de testes inferenciais é a apresentação gráfica das variáveis.

Teste T

Da maneira mais breve possível, o teste T compara duas médias. Caso se compare uma determinada média amostral com uma média populacional (previamente esperada, \(\mu_0\)), trata-se de um teste T para uma amostra (ou um grupo), caso se compare os resultados médios de dois grupos, trata-se de um teste T para duas amostras (ou dois grupos) e caso se compare duas médias de um mesmo grupo obtidas em momentos diferentes, trata-se de um teste T pareado (ou repetido). Os pressupostos dos modelos lineares (normalidade, homocedasticidade) também se aplicam aqui e as violações deles podem gerar resultados distorcidos.

Um exemplo simples de alcançar da usabilidade do teste T (para dois grupos independentes) é a tentativa de verificar se os resultados são significativamente diferentes em função da cor da pele da criança avaliada. Os resultados estão apresentados abaixo e é possível concluir que não há diferenças significativas em relação à média em função da cor da pele da criança (t(3185) = 0.578, p = 0.526).

t.test(base_efica$parents_totalpoints ~ base_efica$race, var.equal=T)
## 
##  Two Sample t-test
## 
## data:  base_efica$parents_totalpoints by base_efica$race
## t = 0.57899, df = 3185, p-value = 0.5626
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.104575  2.030291
## sample estimates:
## mean in group non-white     mean in group White 
##                45.09978                44.63692

O gráfico característico (barras) desse resultado encontra-se abaixo. As barras de erro foram adicionadas. Elas são importantes para ter uma ‘noção’ sobre resultados inferenciais, mas não devem ser utilizadas como substituição dos testes formais para isso.

base_efica %>% 
  filter(!is.na(race)) %>% 
  ggplot(., aes(x = race, y = parents_totalpoints, fill = race)) +
  geom_bar(stat = "summary") +
  stat_summary(fun.data = mean_se, geom = "errorbar") +
  theme_bw() +
  theme(legend.position = "none")
## No summary function supplied, defaulting to `mean_se()

É fundamental deixar uma nota. Essa pesquisa contou com questionários sociodemográficos preenchidos pelos participantes e o que se entende aqui como cor é a percepção de cada um deles sobre esse atributo. Sabe-se que isso é amplamente problemático aqui no Brasil. O exemplo foi eleito propositadamente apenas para demonstrar como se executa o teste T, uma vez que resultados significativos ou não significativos nesse ponto são pouco críveis.

Violações aos pressupostos do teste T são frequentes tanto em relação à normalidade da distribuição como em relação à homocedasticidade. Como notas de apoio, o entendimento desses pressupostos é bastante complexo e tem baixo ou nenhum acordo teórico na literatura. Da forma como alguns autores entendem, todo teste estatístico visa concluir sobre propriedades dos parâmetros (medidas populacionais) e, nesse sentido, o teste T assume que o parâmetro é normalmente distribuído (não necessariamente a amostra). No entanto, uma vez que, pelo Teorema Central do Limite, as médias das diferentes amostras tiradas de uma determinada população com variância finita se distribuem normalmente mesmo quando têm uma distribuição de origem diferente da normal (sampling distribution), haverá acadêmicos que dirão que o teste T não assume normalidade nem dos resultados amostrais, nem da população subjacente, mas tão somente da sampling distribution das médias ou diferenças de médias em jogo. A discussão parece infinta, como você pode ver aqui ou aqui e tem argumentos interessantes, como o exposto por um querido colega nosso aqui. Optei aqui – como em quase todo material meu – por utilizar o termo ‘sampling distrubution’ em vez de tentar uma tradução brasileira. Tecnicamente, sampling distribution é distribuição amostral, mas aqui entendido como a distribuição das infinitas amostras obtidas da população e não apenas a distibuição de uma amostra única em questão (que é a que o pesquisador possui).

Superada essa dificulade, quase sempre o interesse do pesquisador é checar passo-a-passo os pressupostos em sua amostra, que é a única que ele tem disponível. Para testar a normalidade, veja a distribuição dos resultados de cada um dos grupos e faça um teste de Shapiro-Wilk (SW). A \(H_0\) do SW é de normalidade. Este teste tem duas características, a primeira é sua sensibilidade ao tamanho da amostra. Quão maior o tamanho da amostra, mais facilmente ele vai rejeitar a hipótese de normalidade. A segunda é a seguinte: se duas distribuições são normais, mas com médias diferentes, os resultados serão bimodais e o shapiro-wilt também vai rejeitar a hipótese de normalidade de maneira incorreta. Ambos os resultados são bons exemplos de falsos positivos, uma vez que \(H_0\) é verdadeira (distribuição normal) e o teste a rejeita.

Realizar o welch-test é uma primeira saída quando a violação ocorre apenas na homocedasticidade ou a realização de sua versão considerada não-paramétrica pode ser feita pelo teste de Mann-Whitney (MW). O Welch-test pode ser feito com a mesma sintaxe do Teste T, surpimindo apenas o argumento var.equal=T. Já o MW está expresso a seguir e com resultados apontando à mesma direção do previamente encontrado.

wilcox.test(base_efica$parents_totalpoints ~ base_efica$race)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  base_efica$parents_totalpoints by base_efica$race
## W = 1047324, p-value = 0.6725
## alternative hypothesis: true location shift is not equal to 0

Análise da variância

Conforme previamente mencionado, a ANOVA (e suas variações) são modelos de regressão que consideram que a VI é categórica (aqui, tomada como discreta). As vias/fatores e delineamento de uma ANOVA definem seus (sub)tipos. Se há apenas uma variável independente, a ANOVA é chamada de uma via. Caso haja duas, ela é chamada de duas vias, etc. Caso haja possibilidade de interação entre esses fatores, essa ANOVA recebe o nome de Fatorial. As categórias dentro de cada uma das variáveis (vias ou fatores) são chamadas de níveis ou condições. Se houver variáveis contínuas entre as independentes, tradicionalmente os livros entenderam que se trata de uma ANVOCA. É possível ter um delineamento entre grupos e intragrupos, bem como considerar medidas repetidas.

Quando o resutado da ANOVA é significativo, isto aponta que uma diferença significativa existe em todas as possíveis combinações entre/intra grupos. Isso é o conceito de um Omnibus test. É importante ter atenção a isso, pois testes post-hoc e ANOVA não respondem às mesmas perguntas e não são necessariamente dependentes. Esse é um tema bastante debatido, como pode ser visto aqui.

Uma atenção computacional aqui deve ser clara. Se a variável não for reconhecida como chr ou factor, será necessário incluir este argumento no modelo. Do contrário, o R vai estimar a variável considerando que ela é contínua e, consequentemente, os resultados serão incorretos. Você poderá notar isso pelos graus de liberdade dos resultados. Por definição, o df entre grupos (segunda linha da tabela) é K-1. Como temos três guardiões (pais, mães e outros), o df deve ser 2.

library(apaTables)
base_efica %>% 
  filter(group == "tipico" & !is.na(guardian)) %>% 
  lm(parents_totalpoints ~ guardian, .) %>% 
  apa.aov.table(.)
## 
## 
## ANOVA results using parents_totalpoints as the dependent variable
##  
## 
##    Predictor         SS   df        MS       F    p partial_eta2
##  (Intercept)  726639.20    1 726639.20 1923.21 .000             
##     guardian    1690.71    2    845.36    2.24 .107          .00
##        Error 1214331.63 3214    377.83                          
##  CI_90_partial_eta2
##                    
##          [.00, .00]
##                    
## 
## Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared

O gráfico de barras dessa relação encontra-se abaixo. Repare que barras de erros foram introduzidas.

base_efica %>% 
  filter(group == "tipico" & !is.na(guardian)) %>% 
  ggplot(., aes(x = guardian, y = parents_totalpoints, fill = guardian)) +
  geom_bar(stat = "summary") +
  stat_summary(fun.data = mean_se, geom = "errorbar") +
  theme_bw() +
  theme(legend.position = "none")
## No summary function supplied, defaulting to `mean_se()

Os resultados de um modelo estatístico dependem da adequação dos pressupostos subjacentes a ele. Quando existe uma violação deles, é necessário transformar os dados ou alterar o modelo. Quase sempre, a alternativa - chamada de não-paramétrica - à uma ANOVA de uma via é o teste Kruskal-Wallis. Os resultados são similares à realização da ANOVA com dados ranqueados. Abaixo a demonstração:

base_efica %>% 
  filter(group == "tipico" & !is.na(guardian)) %>% 
  kruskal.test(parents_totalpoints ~ guardian, .)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  parents_totalpoints by guardian
## Kruskal-Wallis chi-squared = 3.7039, df = 2, p-value = 0.1569

Correlação

A associação entre duas variáveis numéricas pode ser vista em função de sua forma, magnitude e direção. Apesar dos coeficientes terem relação com cada uma dessas características, a convenção em Psicologia para ponto de corte é a seguinte [@cohen_1988]:

Caso a correlação seja até |0.1|, é tida como fraca

temp_data <- MASS::mvrnorm(n=200, mu=c(0, 0), Sigma=matrix(c(1, .1, .1, 1), nrow=2), empirical=TRUE)
ggplot(data = data.frame(temp_data), aes(x = X1, y = X2)) + geom_jitter() + 
  geom_smooth(method = "lm") +
   geom_text(aes(label=paste("r=", cor(temp_data)[2])), 
            x=-Inf, y=Inf, hjust=-0.2, vjust=1.2)

Caso a correlação seja superior ou igual a |0.3|, é tida como moderada

temp_data <- MASS::mvrnorm(n=200, mu=c(0, 0), Sigma=matrix(c(1, .3, .3, 1), nrow=2), empirical=TRUE)
ggplot(data = data.frame(temp_data), aes(x = X1, y = X2)) + geom_jitter() + 
  geom_smooth(method = "lm") +
   geom_text(aes(label=paste("r=", cor(temp_data)[2])), 
            x=-Inf, y=Inf, hjust=-0.2, vjust=1.2)

Caso a correlação seja superior ou igual a |0.5|, é tida como forte

temp_data <- MASS::mvrnorm(n=200, mu=c(0, 0), Sigma=matrix(c(1, .5, .5, 1), nrow=2), empirical=TRUE)
ggplot(data = data.frame(temp_data), aes(x = X1, y = X2)) + geom_jitter() + 
  geom_smooth(method = "lm") +
   geom_text(aes(label=paste("r=", cor(temp_data)[2])), 
            x=-Inf, y=Inf, hjust=-0.2, vjust=1.2)

temp_data <- MASS::mvrnorm(n=200, mu=c(0, 0), Sigma=matrix(c(1, .1, .1, 1), nrow=2), empirical=TRUE) %>% data.frame()
temp_data <- temp_data %>% 
  add_row(., X1 = 11, X2 = 12)

ggplot(data = temp_data, aes(x = X1, y = X2)) + geom_jitter() + 
  geom_smooth(method = "lm") +
  geom_text(aes(label=paste("r=", round(cor(temp_data)[2],1))), 
            x=-Inf, y=Inf, hjust=-0.2, vjust=1.2)

O Coeficiente de correlação produto-momento de Pearson é utilizado para variáveis contínuas e apresenta como duas variáveis se relacionam linearmente, tal como apresentado no resultado abaixo.

cor.test(base_efica$parents_totalpoints, base_efica$teachers_totalpoints)
## 
##  Pearson's product-moment correlation
## 
## data:  base_efica$parents_totalpoints and base_efica$teachers_totalpoints
## t = 24.102, df = 3447, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3508413 0.4079745
## sample estimates:
##     cor 
## 0.37977

O gráfico de dispersão apresenta essa condição.

ggplot(base_efica, aes(parents_totalpoints, teachers_totalpoints)) +
  geom_jitter() +
  theme_bw()

Quando a relação não é linear, mas preserva uma monotonicidade, a correlação de Spearman é mais indicada. Isso é muito frequente entre itens de um instrumento psicológico.

cor.test(base_efica$parents_totalpoints, base_efica$teachers_totalpoints, method = "spearman")
## Warning in cor.test.default(base_efica$parents_totalpoints,
## base_efica$teachers_totalpoints, : Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  base_efica$parents_totalpoints and base_efica$teachers_totalpoints
## S = 4369458850, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.3610022

Empiricamente, os resultados são bastante similares. Analiticamente, o rho de Spearman é virtualmnente similar à correlação de Pearson com dados ranqueados.

cor.test(rank(base_efica$parents_totalpoints), rank(base_efica$teachers_totalpoints), method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  rank(base_efica$parents_totalpoints) and rank(base_efica$teachers_totalpoints)
## t = 22.727, df = 3447, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3316222 0.3896827
## sample estimates:
##       cor 
## 0.3610022

A imagem abaixo foi retirada deste site e pode ser um bom recurso para verificar essa afirmativa.

coeficientes de correlação

coeficientes de correlação

Pontos importantes:

É também possível ‘descontar’, ‘controlar’ o efeito de uma terceira variável em uma análise correlacional. Dá-se o nome de ‘correlação parcial’ quando se faz isso e a imagem a seguir apresenta o conceito.

correlação parcial

correlação parcial

Por exemplo, para verificar a correlação entre a pontuação de pais (parents_totalpoints) e professores (teachers_totalpoints), controlando pela idade (age) do participante:

ppcor::pcor.test(x = base_efica$parents_totalpoints, 
          y = base_efica$teachers_totalpoints, 
          z = base_efica$age, method = "pearson")

É fundamental lembrar: caso a estimativa da correlação parcial seja maior do que o efeito bruto, trata-se de um efeito de supressão. Caso a estimativa seja menor, trata-se de um efeito de atenuamento ou explicativo. O resultado é identico à estimativa padronizada de uma regressão linear múltipla, graficamente demonstrado abaixo.

visreg::visreg2d(
  lm(teachers_totalpoints ~  parents_totalpoints + age, base_efica),
  "parents_totalpoints", "age", plot.type="persp")

O tópico de correlação é muito importante para análises psicométricas e isso terá uma grande valia quando conceitos sobre fidedignidade e validade forem apresentados. Em momento posterior, matrizes tetracóricas e policóricas serão vistas para tal finalidade.

É importante lembrar que um resultado correlacional não expressa causalidade e só tem sentido em contextos de estacionariedade.

Regressão linear

A Regressão linear pode ser simples ou múltipla. Quando simples, há apenas uma VI (por tradição mas não necessariamente, contínua). Quando mútlipla, há varias variáveis independentes. O delineamento pode ser aditivo (x1 + x2) ou multiplicativo (x1 * x2). A resposta principal que um modelo de regressão deseja responder é como predizer os valores de uma variável em função de outra. Refraseando um pouco, isso é similar a responder o quanto a variabilidade de uma variável depende/pode ser atribuída/explicada pela variabilidade de outra (s).

Importante notar que os outros modelos vistos até aqui são casos particulares de modelos de regressão. Talvez se a docência fosse mais atrelada à modelagem matemática, em vez de seleção de testes estatísticos, seria mais fácil perceber o como todos os resultados são baseados em modelos probabilísticos (e não às teorias psicológicas subjacenets), além do amplo relacionamento entre os testes estatísticos e o pouco fundamento de algumas análises super complexas e quase nunca interpretáveis (imagine uma ANOVA fatorial de 4 vias)

bem como ter atenção aos principais pressupostos dos modelos de regressão, que são i. linearidade do relacionamento entre as variáveis, e que os reíduos tem ii. média zero, iii. variância constante, são iv. independentes e v. normalmente distribuídos.

library(olsrr)
## 
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
## 
##     rivers
lm(parents_totalpoints ~ age, base_efica) %>% 
  ols_regress()
##                          Model Summary                          
## ---------------------------------------------------------------
## R                       0.066       RMSE                20.450 
## R-Squared               0.004       Coef. Var           45.461 
## Adj. R-Squared          0.004       MSE                418.212 
## Pred R-Squared          0.003       MAE                 16.564 
## ---------------------------------------------------------------
##  RMSE: Root Mean Square Error 
##  MSE: Mean Square Error 
##  MAE: Mean Absolute Error 
## 
##                                   ANOVA                                   
## -------------------------------------------------------------------------
##                    Sum of                                                
##                   Squares          DF    Mean Square      F         Sig. 
## -------------------------------------------------------------------------
## Regression       6343.805           1       6343.805    15.169     1e-04 
## Residual      1441575.286        3447        418.212                     
## Total         1447919.091        3448                                    
## -------------------------------------------------------------------------
## 
##                                   Parameter Estimates                                    
## ----------------------------------------------------------------------------------------
##       model      Beta    Std. Error    Std. Beta      t        Sig      lower     upper 
## ----------------------------------------------------------------------------------------
## (Intercept)    49.265         1.153                 42.727    0.000    47.004    51.525 
##         age    -0.525         0.135       -0.066    -3.895    0.000    -0.789    -0.261 
## ----------------------------------------------------------------------------------------

Quando existe apenas uma variável no modelo, o gráfico é virtualmente identico ao gráfico correlacional, a excetuar pela reta de regressão amostral.

library(effects)
## Loading required package: carData
## Registered S3 methods overwritten by 'lme4':
##   method                          from
##   cooks.distance.influence.merMod car 
##   influence.merMod                car 
##   dfbeta.influence.merMod         car 
##   dfbetas.influence.merMod        car
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
plot(allEffects(lm(parents_totalpoints ~ age, base_efica)))

O coeficiente de determinação (R2) é uma razão entre a SQR (Soma dos quadrados da regressão) pela SQT (soma dos quadrados total) ou 1-SQE/SQT.

Mediação e moderação

Tecnicamente, esses modelos são generalizações dos modelos de regressão e, portanto, tem as mesmas exigências em seus pressupostos. A modelagem de mediação e moderação ocorre quando há, ao menos, duas variáveis independentes e uma variável dependente, em que uma das VIs poderia ser considerada como uma terceira variável que devesse ser controlada, seja porque ela é confundidora, estranha ou interveniente à pesquisa.

Como a distinção conceitual entre ambos os modelos é as vezes mais densa do que sua distinção matemática – que é fácil – a imagem abaixo apresenta o mais simples de um modelo de mediação.

Modelo de mediação

Modelo de mediação

Nele, tecnicamente, a variável X gera efeito direto (c’) em Y, como um efeito indireto (a * b) nele (passando por M). X deve vir antes de M e não o contrário, como pontua Hayes (2013, p. 87), mas há uma discussão intensa sobre o delineamento de pesquisa para realização de um modelo de mediação.

Exemplos poderiam ser:

  • A relação entre o nível socio-econômico (A e B vs C, D e E) de um participante (X) e a avaliação que os professores fazem dele (Y) é mediada pela avaliação que os pais fazem dele (M) (é um exemplo muito ruim, já que o nível socioeconômico deveria ter a capacidade de influenciar a avaliaçao dos pais. Serve apenas para fins didáticos)

  • A intensidade do consumo de álcool (X) e sua relação com pensamentos suicidas (Y) é mediada por estados depressivos (M) (o álcool influencia e possibilita ocorrer a depressão)

  • o quanto a prática de atividade física intensa (X) influencia a tomada de decisão econômica (Y) em uma relação mediada por excitação (liberação de dopamina) (M)

  • Qual é o efeito da idade (M) em gerar condições clínicas (problemas visuais, por exemplo) (M) e acidentes de trânsito (Y)

O primeiro exemplo (bastante ambíguo, concordo) encontra-se abaixo:

library(psych)
base_efica %>% 
  mutate(ses_ab = if_else(socioeconomic == "A" | socioeconomic == "B",1,0)) %>% 
  #mutate(sex = if_else(sex == "Female",1,0)) %>% 
  mediate(teachers_totalpoints ~ ses_ab + (parents_totalpoints), data = .) #<- mediation line

## 
## Mediation/Moderation Analysis 
## Call: mediate(y = teachers_totalpoints ~ ses_ab + (parents_totalpoints), 
##     data = .)
## 
## The DV (Y) was  teachers_totalpoints . The IV (X) was  ses_ab . The mediating variable(s) =  parents_totalpoints .
## 
## Total effect(c) of  ses_ab  on  teachers_totalpoints  =  -1.61   S.E. =  0.86  t  =  -1.87  df=  3447   with p =  0.062
## Direct effect (c') of  ses_ab  on  teachers_totalpoints  removing  parents_totalpoints  =  -1.66   S.E. =  0.8  t  =  -2.08  df=  3446   with p =  0.038
## Indirect effect (ab) of  ses_ab  on  teachers_totalpoints  through  parents_totalpoints   =  0.05 
## Mean bootstrapped indirect effect =  0.05  with standard error =  0.32  Lower CI =  -0.58    Upper CI =  0.68
## R = 0.38 R2 = 0.15   F = 292.9 on 2 and 3446 DF   p-value:  3.3e-118 
## 
##  To see the longer output, specify short = FALSE in the print statement or ask for the summary

Talvez uma breve explicação seja útil. Os valores de c’e b são os mesmos de uma regressão linear múltipla da regressão do ‘teachers_totalpoints’ em ‘ses_ab’ e ‘parents_totalpoints’. O valor do a é o valor de uma regressão linear simples do ‘parents_totalpoints’ em ‘ses_ab’. O efeito indireto (do ‘ses_ab’ passando por ‘parents_totalpoints’ no ‘teachers_totalpoint’) é o produto a,b. Nesse caso, 0.11 * 0.44, que resulta em 0.05 arredondado.

Uma série de discussões começam a surgir também neste ponto. Como inspecionar o modelo, como testar diferentes níveis da mediação, como controlar por possíveis efeitos espúrios, etc. Esses debates são importantes e o livro do Hayes é um bom caminho, apesar de ser longo, massante e, pelo menos para mim, confuso.

Já a imagem a seguir apresenta o caso mais simples de um modelo de moderação. Nos modelos de moderação, o tamanho, força ou o sinal do efeito de X em Y depende de M. Repare que agora o M tem papel um papel fundamental.

Modelo de moderação

Modelo de moderação

Matematicamente, ele é a mesma coisa que uma ANOVA fatorial. Nesse caso, uma ANOVA fatorial de 2-vias.

Modelo de moderação

Modelo de moderação

Discussão a parte, como exemplo, imagina que se deseja investigar se o efeito da idade da criança nos resultados da avaliação que o professor faz dela depende de seu sexo (M ou F). Outros exmeplos poderiam ser os seguintes:

  • Será que a relação entre neuroticismo (X) e depressão (Y) dependente de uma ansiedade de estado (M) ?

  • Será que a relação entre variáveis demográficas de uma criança (Sexo, por exemplo) e suas atitudes e crenças sociais (Y) é moderada pela frequência que ela assiste televisão (M) ?

  • Como a idade da pessoa (M) modera a relação entre o sexo (M) e o estilo de condução veicular (Y). Aqui assume-se que há uma relação entre sexo e condução veicular que é moderada pela idade.

Tecnicamente, essa moderação é feita estimando um \(\beta\) para o produto entre as variáveis independentes, tal como expresso abaixo.

lm(teachers_totalpoints ~ age * sex, data = base_efica) %>% 
  apa.reg.table(.)
## 
## 
## Regression results using teachers_totalpoints as the criterion
##  
## 
##    Predictor       b       b_95%_CI sr2  sr2_95%_CI             Fit
##  (Intercept) 24.79** [21.14, 28.45]                                
##          age   -0.30  [-0.73, 0.12] .00 [-.00, .00]                
##      sexMale   -1.26  [-6.37, 3.85] .00 [-.00, .00]                
##  age:sexMale  1.36**   [0.76, 1.96] .01  [.00, .01]                
##                                                         R2 = .050**
##                                                     95% CI[.04,.06]
##                                                                    
## 
## Note. A significant b-weight indicates the semi-partial correlation is also significant.
## b represents unstandardized regression weights. 
## sr2 represents the semi-partial correlation squared.
## Square brackets are used to enclose the lower and upper limits of a confidence interval.
## * indicates p < .05. ** indicates p < .01.
## 

O gráfico é muito informativo

ggplot(base_efica, aes(x=age, y = teachers_totalpoints, color = sex)) +
  geom_smooth(method="lm") +
  theme_bw()

E particularmente, o pacote effects também tem uma enorme utilidade neste gráfico:

plot(allEffects(lm(teachers_totalpoints ~ age * sex, data = base_efica)), 
     multiline=TRUE, 
     #ci.style="bars",
     ci.style="bands")

Fidedignidade

Acredito que todo livro em português (brasileiro) de Psicometria (e estatística multivariada, no geral) tenha traduzido o termo “Reliability” como fidedignidade. Apesar de não conhecer o background cultural de todos os leitores deste capítulo, atrevo-me a falar que quase ninguém utiliza essa palavra cotidianamente, principalmente se o ambiente de conversa for fora do acadêmico. Dessa forma, apesar do termo Fidedignidade ser amplamente utilizado, não necessariamente ele tem um sentido ou uma definição imediata, solicitando que a gente dê outros passos até conseguir desvelar esse tema e a utilidade que ele apresenta na Psicometria. Primeiro, uma definição longa, ampla, extensiva e que pode servir como um coringa, já que ela fala sobre tudo, sem ser específica em área alguma.

A confiabilidade – ou fidedignidade – é a capacidade em reproduzir um resultado de forma consistente no tempo e no espaço, ou a partir de observadores diferentes, indicando aspectos sobre coerência, precisão, estabilidade, equivalência e homogeneidade. Trata-se de um dos critérios principais de qualidade de um instrumento (Terwee et al., 2007)

Posto isso, agora uma discussão mais elaborada que toca na Metrologia, Educação, Saúde e a própria Psicometria, a partir da Teoria Clássica dos Testes. Como já exposto, a Psicometria pode ser entendida como uma área de interface (ou ponte) entre diferentes campos científicos. Se por um lado isso pode proporcionar grande interação acadêmica, por outro, alguns conceitos-chaves acabam por terem definições apenas parcialmente convergentes, justamente pela dependência à área base em que o tema é discutido.

Considerando aspectos instrumentais, a Psicometria é uma disciplina dentro do conjunto da Metrologia. Dessa forma (e neste contexto), a fidedginidade refere-se exclusivamente a características ou propriedades do instrumento de medida. Neste contexto, sua tradução é exatidão ou precisão. Como é também amplamente sabido que processos de mensuração geram erros (aleatórios ou não), a análise desses erros poderá expor sobre a estabilidade (stability), viés (bias), linearidade (linearity), repetibilidade (repeatability) e reprodutibilidade (reproducibility) dos resultados. É justamente pela proximidade da Psicometria à Metrologia, que o tema da Fidedignidade é apresentado por analogia a um jogo de dardos.

já considerando a íntima relação que o desenvolvimento de instrumentos têm com teorias psicológicas e condições educacionais, a ideia por detrás de fidedignidade é expressa pelo grau de consistência entre um instrumento e seus resultados. Agora, este conceito pode ser traduzido como “confiabilidade” e, apesar de associado à precisão (na verdade, precisão é o complemento da confiança), traz à cena condições de consistência entre os itens, entre diferentes examinadores e entre diferentes intervalos de tempo.

Bom, é necessário dar um passo mais ao fundo deste oceano a partir da Teoria Clássica dos Testes. Apesar de considerar que o que vou expressar agora pode levantar alguma polêmica, a maneira pela qual Furr expressa a fidedignidade de um instrumento tem plena lógica. Uma vez que os testes psicológicos são construídos para que seus resultados reflitam de maneira acurada a variabilidade do fenômeno psicológico, a fidedignidade de um teste reflete a extensão que as diferenças nos escores dos respondentes ocorrem em função de suas diferenças psicológicas em oposição de erros de medidas.

Finalmente, pelo guia de autoridade que a AERA representa, atualmente não haveria problema em alocar as discussões sobre Fidedignidade (seja entendida como medir sem erros, seja relacionada com uma consistência entre os itens ou avaliadores em um ou mais momentos) como uma etapa dos estudos de validade sobre a estrutura interna de um instrumento, junto com a dimensionalidade e a invariância da medida.

“Superado” alguns debates, é possível quebrar pragmaticamente e analiticamente as técnicas estatísticas para acessar a Fidedignidade de um instrumento por medidas associadas à ‘consistência’ entre os itens, entre avaliadores e entre as metades de um instrumentos, bem como por medidas que acessam a ‘estabilidade’ dos resultados por análises temporais. Uma vez que Fidedignidade se trata de um ‘grau’, todas as análises buscam identificar o quanto o erro distorce os resultados. A imagem a seguir visa fazer esta distinção:

Tipos de Fidedignidade É possível agora entender que os três principais aspectos sobre fidedignidade são (i) medir sem erro, (ii) de forma consistente e (iii) estável no tempo.

Aspectos analíticos [em construção]

Tipos de correlação

Aspectos correlacionais já foram expostos acima. No entanto, a este momento torna-se necessário ampliar um pouco para que algumas análises que serão expostas façam sentido. A técnica correlacional depende da escala entre as variáveis (aqui, entendido tanto como nível de medida, como quantidade de informação numérica) como da natureza da variavel (observada ou latente). Pela literatura que conheço, a forma mais palatável de apresentar esta relação foi feita no artigo de 1982 de Olsson, Drasgow e Dorans.

Tipos de Correlação

Tipos de Correlação

Há um bookdown interessante sobre este tópico e ele pode ser acessado aqui, bem como um tutorial, que pode ser acessado aqui. Posto isso, algumas análises serão realizadas para mostrar algumas características.Para redução de intensidade computacional, apenas os 5 primeiros itens serão trabalhados.

Quando as variáveis são contínuas, emprega-se o Produto Momento de Pearson. Por exemplo, a correlação entre os itens fica:

base_efica %>% 
  select(y1:y5) %>% 
  corrr::correlate() 
## 
## Correlation method: 'pearson'
## Missing treated using: 'pairwise.complete.obs'

O teste inferencial para o coeficiente de correlação pode ser feito. Por exemplo, se há o interesse em verificar se a correlação entre y1 e y2, temos:

cor.test(base_efica$y1, base_efica$y2)
## 
##  Pearson's product-moment correlation
## 
## data:  base_efica$y1 and base_efica$y2
## t = 25.487, df = 3408, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3715434 0.4279379
## sample estimates:
##       cor 
## 0.4001193

r se distribui numa t-2 graus de liberdade, assumindo normalidade bivariada. Assim,

\(H_0: \rho=0 \\ H_0: \rho \neq 0 \\ \alpha = 0.05\) \(t=r\sqrt{\frac{n-2}{1-r^2}}\). Como temos 3410, isso explica o grau de liberdade (df = 3408).

Caso se assuma que as variáveis são ordinais (apesar de contínuas), ou que os dados estão ranqueados e é necessário uma proteção aos outliers, a correlação de Spearman é mais indicada. Essa informação não está na tabela anterior. Dessa maneira, temos:

base_efica %>% 
  select(y1:y5) %>% 
  corrr::correlate(method = "spearman") 
## 
## Correlation method: 'spearman'
## Missing treated using: 'pairwise.complete.obs'

Repare que a correlação foi algo atenuada.

Quando se lida com variáveis latentes e as variáveis manifestas sejam ordinais é possível (e desejável) realizar correlações tetracóricas ou policóricas. Se as variáveis apresentarem dois valores (variáveis binárias ou dicotômicas), pode-se utilizar a correlação tetracórica. Caso haja mais níveis, pode-se utilizar a correlação policórica. Ambas as técnicas foram desenvolvidas também por Pearson e sua computação manual é bem mais densa do que a Produto momento.

A função ‘tetrachoric’ do pacote psych está abaixo. A demontração do código abaixo é apenas pedagógica, já que as variáveis acessadas não são dicotômicas e por isso, o pacote psych não iria realizar essa análise.

#base_efica %>% 
#  select(y1:y5) %>% 
#  tetrachoric(.)

Esse mesmo pacote tem a função ‘polychoric’, que realiza a correlação policórica entre as variáveis.

base_efica %>% 
  select(y1:y5) %>% 
  polychoric(.)
## Call: polychoric(x = .)
## Polychoric correlations 
##    y1   y2   y3   y4   y5  
## y1 1.00                    
## y2 0.50 1.00               
## y3 0.39 0.41 1.00          
## y4 0.41 0.44 0.62 1.00     
## y5 0.38 0.49 0.41 0.54 1.00
## 
##  with tau of 
##         1   2
## y1 -0.141 1.1
## y2 -0.161 1.3
## y3 -0.278 1.1
## y4  0.045 1.2
## y5  0.305 1.5

Repare que, a esse momento, o coeficiente tornou-se maior (inclusive, do que o produto momento de Pearson). Será possível verificar posteriormente que as análises realizadas em matrizes tetracóricas ou policóricas apresentam resultados distintos (maiores, normalmente) às realizadas em uma matriz gerada pela correlação produto-momento.

[Em processo de ajuste] Todas as análises clássicas (TCT) assumem:

  1. \(X = \tau + \varepsilon\) O escore observado (X) por uma pessoa é o somatório dos itens (que gera o Escore verdadeiro) mais uma parcela de erro

  2. \(E[X] = \tau\) O valor esperado do Escore Observado (X) é o escore verdadeiro. Ou seja, é não-viesado.

  3. \(\rho(\tau,\varepsilon)=0\) A correlação entre o escore verdadeiro (\(\tau\)) e o erro (\(\varepsilon\)) é zero

  4. \(\rho({\varepsilon_{1}, \varepsilon_{2}}) = 0\) Os resíduos (erros) entre dois testes diferentes feitos é descorrelatado

Um aspecto que julgo importante em análises psicométricas é ter o entendimento da base analítica que gera os resultados. Nem sempre isso é possível, mas para algumas análises de consistência interna, isso pode ser feito.

Teste re-teste

Este tipo de fidedignidade é relacionado à estabilidade da medida. Existem pressupostos para realização desta técnica. Entre eles,

(i) Não há diferença entre o escore real entre os participantes
(ii) A variância residual (erro) é igual entre as duas ocasiões

Em relação às análises, técnicas correlacionais costumam ser feitas e elas costumam analisar individualmente em cada um dos itens e/ou o total obtido. A utilização da Correlação de Spearman é mais adequada, mas apesar disso, não é infrequente verificar que a Correlação Produto-Momento de Pearson. Também se encontra na literatura testes inferenciais de médias por medidas repetidas.

Pontos de corte são relacionados à finalidade do instrumento, além do tempo entre as aplicações. Para técnicas correlacionais, valores de r = 0.7 ou superiores são necessários (Kline, 1998), mas valores menores não devem ser entendidos como restritivos. Já para técnicas de diferenças entre médias (ranqueadas ou não), valores não significativos são bem vindos.

Entre as características positivas desta técnica, ela é intuitiva e feita em todas as áreas que desenvolvem instrumentos (Kline, 1998, p.29). É bastante natural que se uma medida (instrumento) é estável ao longo do tempo, os resultados sejam correlacionados. Em constraste, é fácil perceber que os pressupostos expostos acima sejam mais facilmente associados a funções como inteligência e personalidade, mas amplamente problemáticos em instrumentos que visam acessar aspectos afetivos ou ansiosos.

Como exemplo, vou usar agora a base do Matsubara et al., 2019. Abaixo, o primeiro item da escala é correlacionado nas duas medidas temporais utilizadas.

base_carprofeno %>% 
  select(w4_1,w0_1) %>% 
  cor(.,use="complete.obs", method="spearman")
##           w4_1      w0_1
## w4_1 1.0000000 0.5043351
## w0_1 0.5043351 1.0000000

Por sua vez, a rotina a seguir apresenta a correlação entre todos os itens no primeiro e no segundo momento.

#calcular coeficiente de correlacao
cor_raw <- base_carprofeno %>% 
  select(w4_1:w4_11, w0_1: w0_11) %>%  # Pegar os itens de interesse
  {Hmisc::rcorr(as.matrix(.), type = "spearman")$r} %>% #trazer apenas o coef. correlacao $r
  data.frame(.) %>%  #colocar em dataframe para manipulacao
  select(.,-starts_with("w4")) %>% #Vou ficar apenas com os itens da primeira aplicação (11 itens)
  as.matrix() %>% # Colocar em matriz para pegar diagonais
  diag() %>%  #Pegar os diagonais 
  cbind.data.frame()

#Pegar valor de p
cor_p <- base_carprofeno %>% 
  select(w4_1:w4_11, w0_1: w0_11) %>%  # Pegar os itens de interesse
  {Hmisc::rcorr(as.matrix(.), type = "spearman")$P} %>% #trazer apenas o coef. correlacao $r
  data.frame(.) %>%  #colocar em dataframe para manipulacao
  select(.,-starts_with("w4")) %>% #Vou ficar apenas com os itens da primeira aplicação (11 itens)
  as.matrix() %>% # Colocar em matriz para pegar diagonais
  diag() %>%  #Pegar os diagonais
  cbind.data.frame()

#Unir ambas as bases (provisorias)
bind_cols(c("coeficiente"=cor_raw, "p_valor"=cor_p)) %>% 
  rownames_to_column(., "item") %>% 
  kable(digits = 2) %>% # Aprsentacao
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
item coeficiente.. p_valor..
1 0.50 0
2 0.72 0
3 0.83 0
4 0.51 0
5 0.84 0
6 0.81 0
7 0.70 0
8 0.58 0
9 0.55 0
10 0.64 0
11 0.62 0
# Remover bases provisorias
rm(cor_raw, cor_p)

Agora há a correlação entre os resultados totais obtidos em ambas as aplicações.

cor.test(base_carprofeno$total_w4, base_carprofeno$total_w0)
## 
##  Pearson's product-moment correlation
## 
## data:  base_carprofeno$total_w4 and base_carprofeno$total_w0
## t = 11.506, df = 38, p-value = 6.016e-14
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7856992 0.9359723
## sample estimates:
##       cor 
## 0.8814671

Conforme explicitado, eventualmente, alguns autores também entendem que a diferença entre os dois resultados obtidos é também uma forma de fidedignidade relacionada à estabilidada da medida. Nesse sentido, apesar de no artigo nós não termos feito isso, apresentamos uma tabela com as diferenças das médias entre as semanas que antecediam o tratamento, que encontra-se abaixo:

base_carprofeno %>% 
  select(starts_with("w4"), starts_with("w0")) %>% 
  pivot_longer(names(.),names_to=c('g0','g1'),
               names_pattern= '^(w.*)_(.*)') %>%  #convert to long format
  group_by(g0,g1) %>% # group by g0 = (w0 or w1) and g1=(1,2,3)
  summarise(value=mean(value,na.rm=TRUE)) %>% # get mean by group
  pivot_wider(names_from=g0,values_from=value) %>% # pivot to get three lines
  mutate(dif = w4-w0) %>% # difference of mean by group
  select(g1,dif) %>% # keep only useful columns
  pivot_wider(names_from=g1,names_prefix='dif_',values_from=dif)
#via PURRR
#base_carprofeno %>% 
#  select(starts_with("w4"), starts_with("w0")) %>% 
#  split.default((seq_along(.)-1) %/% (ncol(.)/2)) %>% 
#  pmap_dbl(~ mean(.x, na.rm = TRUE) - mean(.y, na.rm = TRUE))

E caso tivéssemos interesse em computar as diferenças entre os totais, um teste T pareado talvez fosse candidato para isso. Valores de P não significativos seriam necessários para evidenciar que ambos os resultados não são significativamente diferentes.

base_carprofeno %>% 
  mutate(soma_t1 = rowSums(select(.,w4_1:w4_11), na.rm = T),
         soma_t2 = rowSums(select(.,w0_1:w0_11), na.rm = T)) %>% 
    t.test(.$soma_t1, .$soma_t2, paired = T, data =.)
## 
##  Paired t-test
## 
## data:  .$soma_t1 and .$soma_t2
## t = 1.3449, df = 55, p-value = 0.1842
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.3062873  1.5562873
## sample estimates:
## mean of the differences 
##                   0.625

Formas paralelas

Este tipo de fidedignidade se relaciona com duas versões de um mesmo teste, sendo aplicado ao mesmo tempo, para as mesmas pessoas. Esta técnica assume que:

(i) O escore verdadeiro do participante para um teste (uma forma específica do teste) é exatamente igual ao seu escore no outro teste (na segunda forma do teste). Isso é a mesma coisa que falar que ambos os testes/as formas mensaram o mesmo construto, o que é entendido como equivalência tau.

(ii) Ambos os testes/formas paralelas tem o mesmo nível de variância residual.

Esta técnica traz consigo uma lógica relacioanada com segurança dos dados e talvez essa seja a maior vantagem. É também adequado mencionar que a variabilidade em função de múltiplas testagens é elimitada. Entretanto, pragmaticamente fazer formas paralelas impõe um trabalho exaustivo e, talvez por isso, a frequência deste tipo de modelagem seja baixa.

Não tenho dados exclusivamente relacionados a essa técnica e os artigos que nosso grupo têm sobre redução instrumental é o mais próximo que, a este momento, consigo chegar em exemplos.

Duas metades

Este tipo de fidedigidade é feita pela divisão do instrumento em duas metades iguais. Pragmaticamente, isso é similar a ter duas Formas paralelas (acima exposto), mas sem ter a necessidade de criar dois instrumentos.

Analiticamente, é necessário dividir o instrumento em duas metades, criar um escore geral para cada metade, correlacionar o resultado da metade 1 com a metade 2 e, em seguida, fazer um ajuste, dado pela equação Spearman-Brown split-half (também chamada de Spearman-Brown Prophency), abaixo exposta.

\(R_{xx}=\frac{2r_{hh}}{1+r_{hh}}\)

vou usar agora a base do Arruda et al., 2019 para demonstração:

base_efica %>% 
  select(starts_with("y")) %>% 
  splitHalf()
## Split half reliabilities  
## Call: splitHalf(r = .)
## 
## Maximum split half reliability (lambda 4) =  0.96
## Guttman lambda 6                          =  0.96
## Average split half reliability            =  0.95
## Guttman lambda 3 (alpha)                  =  0.95
## Minimum split half reliability  (beta)    =  0.91
## Average interitem r =  0.23  with median =  0.23

Entre avaliadores

A literatura também traz o termo “Confiabilidade / Consistência interavaliadores” (inter-rater) para este tópico. Sintetizando, quando dois ou mais avaliadores observam e avaliam um determinado fenômeno psicológico como por, exemplo, aspectos comportamentais, do desenvolvimento infantil ou características de personalidade, a consistência / ou concordância entre os juízes é uma das formas de fidedignidade. Se os juízes forem consistentes, se supõe que a fidedignidade será alta e, caso o oposto seja o encontrado, estima-se uma baixa consistência da medida.

As técnicas para avaliação da consistência entre avaliadores dependem de condições como o número de juízes, a escala de medida utilizada (nominal, ordinal, etc) e a finalidade é obter os valores absolutos ou as diferenças relativas entre os participantes.

Em uma pesquisa em que sou co-autor [@blagica, 2018], tivemos análises iniciais durante a primeira fase de execução em que pais e professores avaliaram o desenvolvimento infantil de crianças entre 12 (1 ano) e 60 meses (5 anos). Como pais e professores avaliaram a mesma criança, com o mesmo instrumento e, virtualmente, ao mesmo momento, optamos por fazer a correlação de pearson entre ambos os resultados.

library(readxl)
base_icc <- read_excel("C:/Users/luisf/Dropbox/Puc-Rio/Notas de Aula/Aulas ANOVA/EAD/Psicometria no R/base_icc.xlsx")
base_icc <- janitor::clean_names(base_icc)
cor.test(base_icc$asqgm_total_20, base_icc$asqgm_total_39)
## 
##  Pearson's product-moment correlation
## 
## data:  base_icc$asqgm_total_20 and base_icc$asqgm_total_39
## t = 6.0515, df = 46, p-value = 2.424e-07
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.4706583 0.7987914
## sample estimates:
##       cor 
## 0.6657606

A correlação foi significativa (p < 0.01), proporcional e forte (r = 0.66).

Caso tivéssemos interesse em fazer o ICC, também seria possível. É importante atentar que ICC não significa uma única análise, mas uma classe de análises que são quebradas em função da quantidade de avaliadores e intenção de uso da métrica (valores absolutos ou diferenças). O pacote psych apresenta uma função específica para isso.

base_icc %>% 
  select(asqgm_total_20,asqgm_total_39) %>% 
  ICC(.)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl =
## control$checkConv, : Model failed to converge with max|grad| = 0.0231553
## (tol = 0.002, component 1)
## Call: ICC(x = .)
## 
## Intraclass correlation coefficients 
##                          type  ICC   F df1 df2       p lower bound
## Single_raters_absolute   ICC1 0.66 4.9  47  48 8.1e-08        0.47
## Single_random_raters     ICC2 0.66 4.9  47  47 1.0e-07        0.47
## Single_fixed_raters      ICC3 0.66 4.9  47  47 1.0e-07        0.47
## Average_raters_absolute ICC1k 0.80 4.9  47  48 8.1e-08        0.64
## Average_random_raters   ICC2k 0.80 4.9  47  47 1.0e-07        0.64
## Average_fixed_raters    ICC3k 0.80 4.9  47  47 1.0e-07        0.64
##                         upper bound
## Single_raters_absolute         0.80
## Single_random_raters           0.80
## Single_fixed_raters            0.80
## Average_raters_absolute        0.89
## Average_random_raters          0.89
## Average_fixed_raters           0.89
## 
##  Number of subjects = 48     Number of Judges =  2

Tecnicamente, ICC e ANOVA são similares, havendo apenas uma questão de como particionar a variância para convergir um resultado ao outro.

base_icc %>% 
  select(id, asqgm_total_20, asqgm_total_39) %>% 
  rename(parents = asqgm_total_20,
         teachers = asqgm_total_39) %>% 
  pivot_longer(., cols = -id, names_to = "rater") %>% 
  lm(value ~ factor(id),.) %>% 
  anova(.)

Consistência interna

Este tipo de fidedignidade é relacionado com a consistência interna da medida e pode ser avaliada de algumas formas. Em relação a indicadores da TCT, encontra-se a medida da (i) correlação entre os itens do instrumento, a (ii) correlação entre os itens e o (pseudo) total obtido, a (iii) correlação entre as duas metades iguais do instrumento e (vi) coeficientes gerais, como o Alfa de Cronbach (seja bruto ou padronizado). Apesar de todas as técnicas terem utilidade quando o pesquisador deseja verificar a manutenção (ou retirada) de um item específico do instrumento, frequentemente é somente pelo Alfa de Cronbach que isso é realizado.

Existem claras vantagens neste tipo de análise. Entre elas: só é necessário que o grupo de examinandos passe pelo mesmo instrumento uma única vez no tempo. Isso elimina as variações de erros decorrentes de alterações ocorridas durante o intervalo entre as aplicações. Analiticamente, as análises são simples e não costuma haver muita discussão acerca da utilidade dos resultados.

A correlação inter-item (ou entre os itens da escala) visa examinar o grau de relacionamento não-redudante médio entre um item da escala e o restante. Os resultados podem ser utilizados para indicar redundância entre o conteúdo dos itens. Valores entre .20 e .40 sugerem uma correlação adequada (não sendo muito baixa ou alta) (Piedmont, 2014), apesar de alguns autores sugerirem valores superiores a 0.3 neste coeficiente (Hair, p. 126).

Para cálculo dessa medida, é necessário criar uma matriz de correlação entre os itens e, em seguida, verificar a média dessas correlações. Uma vez que as correlações redudantes das diagonais não são incluídas, a análise precisa retirá-las da equação, tal como feito a seguir pela função ‘correlate’ do pacote ‘corrr’.

base_efica %>% 
  select(starts_with("y")) %>% 
  corrr::correlate() %>% 
  select(-rowname) %>% 
  colMeans(na.rm = TRUE) -> inter_item
## 
## Correlation method: 'pearson'
## Missing treated using: 'pairwise.complete.obs'
inter_item
##         y1         y2         y3         y4         y5         y6 
## 0.24705292 0.26329082 0.27211132 0.30509710 0.25087769 0.18368374 
##         y7         y8         y9        y10        y11        y12 
## 0.25040062 0.26153123 0.20907420 0.24097413 0.22577306 0.25858349 
##        y13        y14        y15        y16        y17        y18 
## 0.23264267 0.27829506 0.27836109 0.31516434 0.24460827 0.26919557 
##        y19        y20        y21        y22        y23        y24 
## 0.28168445 0.23876344 0.27756991 0.21846338 0.26907478 0.26781310 
##        y25        y26        y27        y28        y29        y30 
## 0.27711486 0.25272792 0.26575602 0.26840323 0.17266912 0.14966487 
##        y31        y32        y33        y34        y35        y36 
## 0.23549690 0.23238317 0.15149929 0.23474043 0.23449380 0.21875307 
##        y37        y38        y39        y40        y41        y42 
## 0.28620476 0.22138197 0.13910339 0.21294673 0.19264943 0.23702861 
##        y43        y44        y45        y46        y47        y48 
## 0.23908528 0.28419712 0.28477942 0.25550910 0.27479646 0.26681807 
##        y49        y50        y51        y52        y53        y54 
## 0.16379452 0.26209555 0.02823777 0.26614966 0.25429661 0.23575125 
##        y55        y56        y57        y58        y59        y60 
## 0.22860719 0.16687879 0.21660712 0.17201520 0.27962608 0.23277123 
##        y61        y62        y63        y64        y65 
## 0.21171203 0.27621005 0.26260663 0.07861226 0.17412543

A média desses valores gera o valor de 0.2344367, que é chamado de “Correlação entre-itens” ou “Coeficiente de correlação inter-itens” e expressa o grau de associação entre todos os itens do instrumento. Segundo os critérios expostos há pouco, até o momento tudo aparente estar ok.

Por sua vez, a correlação entre cada item e o (pseudo)Total da escala tenta generalizar a análise anterior considerando agora a relação entre cada um dos itens em específico e o total gerado pelo somatório de todos os itens que compoem a escala. Há também algumas recomendações da literatura em considerar 0.3 (Nunnally e Bernstein, 1994), ou 0.5 (Hair, 2014) como valor mínimo para cada resultado individual. Resultados inferiores a esse colocam o item em questão como um candidato à supressão.

base_efica %>% 
  mutate(total = rowSums(select(.,starts_with("y")), na.rm=T)) %>%  #criar o total
  select(total, starts_with("y")) %>% #selecionar apenas as variaveis de interesse
  cor(., use="complete.obs") %>%  #correlacional
  subset(., TRUE, c("total")) #apresentar apenas a primeira 
##            total
## total 1.00000000
## y1    0.51722309
## y2    0.54732666
## y3    0.56566601
## y4    0.63196329
## y5    0.52231168
## y6    0.37645951
## y7    0.51823714
## y8    0.55444632
## y9    0.44638286
## y10   0.52122380
## y11   0.47957144
## y12   0.55962942
## y13   0.50249610
## y14   0.59487745
## y15   0.60222391
## y16   0.66181502
## y17   0.51895519
## y18   0.56850996
## y19   0.59310897
## y20   0.49603293
## y21   0.58191190
## y22   0.46796574
## y23   0.58842795
## y24   0.55899920
## y25   0.58225019
## y26   0.53738297
## y27   0.55665560
## y28   0.56388631
## y29   0.37934714
## y30   0.32636030
## y31   0.49978113
## y32   0.50289098
## y33   0.36915869
## y34   0.52862751
## y35   0.49926969
## y36   0.46790580
## y37   0.61027046
## y38   0.47905824
## y39   0.33216682
## y40   0.46458013
## y41   0.42532966
## y42   0.52071146
## y43   0.51689414
## y44   0.60485999
## y45   0.59770836
## y46   0.52025082
## y47   0.57922854
## y48   0.56004244
## y49   0.37883188
## y50   0.56443080
## y51   0.09245117
## y52   0.56988426
## y53   0.53818128
## y54   0.51270413
## y55   0.49444321
## y56   0.36455122
## y57   0.45404303
## y58   0.37898510
## y59   0.58986903
## y60   0.51221522
## y61   0.45819816
## y62   0.57546835
## y63   0.56106151
## y64   0.18593371
## y65   0.38747292

O Coeficiente Alfa é uma razão entre a variabilidade dos itens pela variabilidade total do instrumento: \(\alpha =\frac{K}{K-1} ( 1-\frac{\sum_{i=1}^{K}\sigma^2_{Y_i}}{\sigma^2\sum_{i=1}^{K}{Yt}}\)

Repare que: \(\sum_{i=1}^{K}\sigma^2_{Y_i}\): Somtório da variância de cada item \(\sigma^2\sum_{i=1}^{K}{Yt}\): Variância do somatório do total de cada participante (ou variância total do teste) \((1-\frac{\sum_{i=1}^{K}\sigma^2_{Y_i}}{\sigma^2\sum_{i=1}^{K}{Yt}}\) é análogo ao R2 de uma regressão

Tenha em mente que há outras maneiras de fazer essa equação e na literatura, frequentemente, os autores divergem na forma de apresentaçào. O código abaixo apresenta as contas e foi inspirado aqui

#variancia de cada item 
base_efica %>% #base
  select(starts_with("y")) %>% #itens 
  var(.,na.rm=TRUE) %>% #variancia de todos contra todos
  diag() %>% #preservar apenas a variancia individuual
  sum() -> var_item #somar

# variancia total do teste (de cada participante)
base_efica %>% 
  mutate(total = rowSums(select(.,starts_with("y")), na.rm=T)) %>% 
  summarise(var(total)) %>% pull() -> var_tot

#total de itens 
base_efica %>% select(starts_with("y")) %>% ncol %>% as.vector() -> itens

itens/(itens-1)*(1-var_item/var_tot)
## [1] 0.9519945

É possível também ter o chamado Alfa padronizado, que é mais adequado a instrumentos com itens agregados ou com escalas diferentes de respostas. Sua formula é baseada na média das correlações não redundantes entre os itens(o que é mais palatável do que covariâncias) e os resultados são quase sempre muito próximos ao Alfa bruto.

\(\alpha_{std} =\frac{K\bar{r}_{xx}}{1+(K-1)\bar{r}_{xx}}\)

Uma curiosidade: O Alfa padronizado é uma generalizaçào da fórmula Spearman-Brown.

Em nosso caso, o valor seria:

itens*mean(inter_item)/(1+(itens-1)*mean(inter_item))
## [1] 0.9521641

O pacote psych, com a função alpha, encurta toda essa explicação e apresenta as estimativas previamente calculadas.

base_efica %>% 
  select(starts_with("y")) %>% 
  {alpha(.)$total}

Ainda pouco, mencionei sobre o Alfa ordinal. O pacote psych não o calcula por uma função específica, sendo necessário fazer isso a mão ou utilizar o pacote userfriendlyscience, que é também bastante amigável. Apesar de não ter, neste handout, uma base específica para demonstrar a importância desse procedimento, em um teste que sou co-autor (MEMORE), uma vez que os itens eram certo/errado, usamos essa estimativa.

Para finalizar, é importante mencionar os aspectos positivos e outros problemáticos do Alfa. Talvez o mais importante desses seja a sua relação com a quantidade de itens. Repare que, mantida a correlação baixa entre os itens, esse valor sempre aumenta como função dos itens. Abaixo uma demontração inspirada em [@Krable, 2016, p. 143].

cronb <- vector("list",50) #create a list
for (i in 1:50) {
  x <- i*0.1/(1+(i-1)*0.1) #compute cronbach alpha for 0.1 correlatiom
  x2 <- i*0.3/(1+(i-1)*0.3) #compute cronbach alpha for 0.3 correlatiom
  x3 <- i*0.5/(1+(i-1)*0.5) #compute cronbach alpha for 0.5 correlatiom
  cronb[[i]] <- c(i, x, x2, x3) #store
  rm(i, x, x2, x3) #remove
}
do.call(rbind,cronb) %>% #colocar num dataframe
  as.data.frame(.) %>% #estipular o df
  rename("itens" = V1,
         "r=0.1" = V2,
         "r=0.3" = V3,
         "r=0.5" = V4) %>% #renomear 
  pivot_longer(-itens, #itens virara o ID
               names_to = "correlacao", #os A v2 vai ser nomes
               values_to = "valor") %>% #os valores vao se chamar valor
  ggplot(aes(x = itens, y = valor, color = correlacao)) +
  geom_point() +
  geom_hline(yintercept = 0.7, color="black", linetype="dashed") + #insert line
  theme_bw()

rm(cronb)

Posto isso, existem diferentes recomendações sobre o conjunto de valores resultantes do Alfa de Cronbach que indicam consistência adequada. Pela Resolução 09/2018 do Conselho Federal de Psicologia, 0.6 é o mínimo necessário para atingir. Recomendações acadêmicas mais embasadas recomendam valores de 0.7 ou 0.8 como mínimos (Furr, 2011). É importante também destacar que valores muito altos (> 0.90) podem indicar redundância (Streiner, 2003)

Posto isso, é importante atentar que o Alfa de Cronbach não é uma medida da dimensionalidade da escala, mas somente de sua consistência interna. De maneira mais específica, a consistência deve ser entendida como dos dados.

Uma atenção é importante aqui nessa demonstração. As diagonais (por definição, 1) não devem fazer parte da analise. Se elas forem inclluídos, os resultados serão um pouco diferentes.

Erro Padrão da Medida

base_efica %>% 
  summarise(sd(parents_totalpoints))
20.5*sqrt(1-0.9521459)
## [1] 4.484494

Aspectos de validade

Validade é o conceito mais importante em Psicometria. Pelas recomendações da 6a edição da AERA (2014), validade se refere ao grau que as evidências e a teoria apoiam a interpretação dos resultados de um teste para os propósitos pelos quais ele foi desenvolvido. Consequentemente, o processo de validação envolve o acúmulo de evidências relevantes que proveem a base científica e metodológica para esta interpretação. Pela AERA, a validade não é uma propriedade do instrumento, tampouco teria sentido falar em diferentes tipos de validade. Para a AERA, a validade se refere aos resultados do teste.

Existem alguns trabalhos meus em que apresento uma revisão teórica e histórica sobre a evolução do conceito de validade e recomendo fortemente o [@Anunciação2018], que pode ser lido integralmente aqui. É notória a evolução do conceito de validade e a imagem abaixo (retirada de (Sireci & Padilla, 2014) apresenta esse progresso:

Evolução do conceito de validade

Evolução do conceito de validade

Penso que o primeiro grande salto surgiu em 1985, pela conceituação de validade enquanto algo unitário, com grande ênfase no que era entendido como “construct-related” [@Teo, p.38]. Em 1999 e 2014, a ênfase nas consequências da testagem oportunizou o segundo grande salto do conceito de validade.

Tornando o assunto (que é longo) em algo mais conciso e bastante influenciado pela lista feita pelo Stephen Sireci, os principais tópicos entendidos atualmente são:

  1. Validade não é uma propriedade do teste/instrumento
  2. Um teste não pode ser “válido” ou “inválido”
  3. O que podemos buscar validar são as inferências / usos dos resultados de um instrumento
  4. Validade não é “tudo ou nada”
  5. A validade do teste deve ser avaliada com relação a uma finalidade específica do teste
  6. Assim, um teste pode ser apropriado para um objetivo, mas não para outro(s)

A tualmente se considera 5 fontes de evidencia de validade, tal como a imagem abaixo.

Tipos de validade

Tipos de validade

Coeficiente de Validade de Conteúdo

O cálculo do CVC é realizado seguindo cinco etapas A primeira, com base nas notas dos juízes (1 a 5), calcula-se a média das notas de cada item

  1. \(M = \frac{\sum\limits_{i=1}^{n}x_i}{N}\)

Em seguida (segunda etapa), com base na média, calcula-se o CVC inicial para cada item (CVCi), dividindo-se pelo valor máximo que a assertiva poderia receber nas dimensões acessadas pelos juízes.

  1. \(CVC_i = \frac{M}{5}\)

Na terceira etapa, calcula-se o erro (Pei), para descontar possíveis vieses dos juízes avaliadores, para cada questão. Neste caso, divide-se um (1) pelo número de juízes avaliadores, elevado pelo mesmo número de avaliadores.

  1. \(PE_i = (\frac{1}{J})^J\)

Com isso, o CVC final (quarta etapa) de cada item/questão (CVCc) poderá ser calculado a partir da subtração do CVCipelo Pei.

  1. \(CVC_c = CVC_i - PE_i\)

A última etapa é destinada para o CVC total do questionário (CVCt), para cada uma das características (clareza de linguagem, pertinência prática e relevância teórica). Consiste em subtrair a média do CVCi (MCVCi) pela média do Pei (MPei).

  1. \(CVC_c = \bar{X}_{CVC_i} - \bar{X}_{PE_i}\)

O Coeficiente de Validade de Conteúdo é muito útil para verificar a adequação de cada um dos itens àquilo que se tem interesse de medir. É possível utilizar essa métrica como um indexador geral do instrumento, mas também como uma etapa dentro de um processo maior de adaptação de um instrumento psicológico. Apesar de não haver um consenso em relação a quais devem ser os critérios avaliados pelo CVC, pelo menos a “adequação” e a “simplicidade de entendimento” do item devem estar presente. Quando o instrumento estiver em processo de retrotradução, é importante também verificar a qualidade da tradução.

Neste artigo, optamos por realizar o CVc apenas da coerência do item (seu aspecto principal de validade de conteúdo). Nesse sentido, ao calcular o CVc deste domínio, teria-se chego ao CVc da escala como um todo. A base de dados vai ser algo tratada abaixo para que seja fácil de visualizar os resultados.

Atenção! Os resultados abaixo são baseados na ‘base_cvc’.

base_cvc %>%  #get dataset
  select(intersect(starts_with("q0009"), ends_with("001"))) %>% #select specific variables
  rename_all(., list( ~paste0("x_", seq_along(.),""))) %>% #rename
  mutate_all(as.numeric) -> base_cvc_1

A primeira etapa do CVC é o cálculo da média de cada um dos itens, que e encontra abaixo:

base_cvc_1 %>%
  summarytools::descr(.) %>% 
  t(.) %>% #traspor
  as.data.frame() %>% #transformar em base
  rownames_to_column("item") %>% #inserir o indexador
  .[gtools::mixedorder(.$item), ] %>% #<- ordenacao correta
  format(., digits=3) #round

A segunda etapa é o cálculo do CVC individual (\(CVC_i\)). O ponto máximo utilizado foi 5 e abaixo a rotina para realização da fórmula.

base_cvc_1 %>% 
  map(., ~mean(.)/5) %>% #every column (variable) by the maximum point
  simplify() %>% #simplity output
  round(1) -> cvci #round decimals to 1

O fator de correção é desprezível. Uma vez que temos 11 juízes, esse valor teria 12 zeros antes à esquerda do primeiro valor diferente de zero. Dessa maneira, O CVC (tecnicamente, não ajustado) da escala seria de 0.6777778

base_cvc %>%  #get dataset
  select(intersect(starts_with("q0009"), ends_with("002"))) %>% #select specific variables
  rename_all(., list( ~paste0("x_", seq_along(.),""))) %>% #rename
  mutate_all(as.numeric) -> base_cvc_2

A média de cada um dos itens é.

base_cvc_2 %>%
  summarytools::descr(.) %>% 
  t(.) %>% #traspor
  as.data.frame() %>% #transformar em base
  rownames_to_column("item") %>% #inserir o indexador
  .[gtools::mixedorder(.$item), ] %>% #<- ordenacao correta
  format(., digits=1) #round
base_cvc_2 %>% 
  map(., ~mean(.)) %>% #every column (variable)
  simplify() %>% #simplity output
  round(0) -> simplicidade #round decimals to 1

Para unir as bases

resultado_cvc <- cbind(cvci, simplicidade) %>% 
  as.data.frame() %>% 
  rownames_to_column("item")

Para deixar apenas aqueles que citamos no artigo (CVCi > 0.4, Simplicidade > 4)

resultado_cvc %>% 
  filter(cvci >= 0.7, simplicidade >= 4) %>%
  pull(item)
##  [1] "x_2"  "x_6"  "x_8"  "x_10" "x_12" "x_14" "x_15" "x_16" "x_18" "x_20"
## [11] "x_24" "x_29" "x_30" "x_31" "x_33" "x_34" "x_35" "x_36" "x_37" "x_38"
## [21] "x_39" "x_40" "x_41" "x_42" "x_44" "x_46" "x_47" "x_48" "x_50" "x_52"
## [31] "x_53" "x_54"
rm(base_cvc_1, base_cvc_2, cvci, simplicidade)

Relação com outras variáveis

Atenção! Os resultados abaixo são baseados na ‘base_carprofeno’.

Nesse artigo, além do questionário-algo aplicado, exames colaterais (tanto via alguns questionários, como a partir de avaliação física) foram realizados. Um dos critérios de inclusão no estudo foi baseado em resultados de exames radiográficos que foram ordenados em função da intensidade das possíveis em grupos de A (excelente) a E (grave). No entanto, é possível pegar esse delineamento para apresentar justamente uma técnica estatística utilizada para investigar a relação que os resultados de um instrumento possuem com outras variáveis. Para tornar o exemplo mais assertivo, dado que a associação entre os resultados do Raio-X D com o Raio-X são altos (v = 0.68), apenas o Direito será utilizado.

DescTools::CramerV(table(base_carprofeno$rxdir_dummy, base_carprofeno$rxesq_dummy),conf.level=0.95)
##  Cramer V    lwr.ci    upr.ci 
## 0.6807354 0.4921604 0.7652546

É possível notar que os resultados obtidos pela escala são maiores nos grupos C, D e E.

ggplot(base_carprofeno, aes(x = factor(rxgrau_dir), y = total_w4, fill = factor(rxgrau_dir))) +
  geom_boxplot() +
  theme_bw() +
  theme(legend.position = "hide")

Tradicionalmente, quando a VI é categórica (tratada como discreta) e a VD é uma variável coníntua, uma ANOVA permite investigar o efeito do grupo nos resultados. Nesse sentido, os resultados globais apontam para um modelo significativo (F(4,51) = 13.30, p < 0.01).

mod_criterio <- lm(total_w4 ~ factor(rxgrau_dir),base_carprofeno)
apaTables::apa.aov.table(mod_criterio)
## 
## 
## ANOVA results using total_w4 as the dependent variable
##  
## 
##           Predictor      SS df     MS     F    p partial_eta2
##         (Intercept)  475.00  1 475.00 12.58 .001             
##  factor(rxgrau_dir) 2008.39  4 502.10 13.30 .000          .51
##               Error 1925.45 51  37.75                        
##  CI_90_partial_eta2
##                    
##          [.31, .60]
##                    
## 
## Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared

A comparação pareada demonstra que os níveis iniciais (A e B) são, majoritariamente, significativamente diferentes dos níveis terminais (C, D e E) permitindo ter uma conclusão totalmente aderente às recomendações da AERA, quando diz que “A variável critério é uma medida de algum atributo ou resultado operacionalmente distinto do teste. Assim, o teste não é uma medida de critério, mas é uma medida hipotetizada como um potencial preditor desse critério alvo” (p. 17).

emmeans::emmeans(mod_criterio, pairwise ~ rxgrau_dir , adjust = "tukey")$contrasts
##  contrast estimate   SE df t.ratio p.value
##  A - B      -3.000 3.38 51 -0.888  0.9002 
##  A - C     -11.111 2.49 51 -4.469  0.0004 
##  A - D     -13.923 2.21 51 -6.295  <.0001 
##  A - E     -11.818 2.33 51 -5.077  0.0001 
##  B - C      -8.111 3.69 51 -2.197  0.1975 
##  B - D     -10.923 3.51 51 -3.109  0.0244 
##  B - E      -8.818 3.59 51 -2.458  0.1167 
##  C - D      -2.812 2.66 51 -1.055  0.8281 
##  C - E      -0.707 2.76 51 -0.256  0.9990 
##  D - E       2.105 2.52 51  0.836  0.9180 
## 
## P value adjustment: tukey method for comparing a family of 5 estimates
emmeans::emmip(mod_criterio, ~ rxgrau_dir, CI = T)

Como nota de apoio, é importante atentar que a ideia de “teste referenciado por critério”, apesar de relacionado a ideia geral de estudos de validade em que existem critérios externos ao teste em questão, guarda mais o nome como comunalidade do que as situações de uso. Isso ocorre pois, a este momento, estudos que visam correlacionar os resultados de uma medida psicológica com um critério externo são feitos antes da utilização em maior escala do instrumento psicológico em processos de avaliação psicológica.

Posto isso, no trabalho realizamos formalmente uma etapa da investigação da relação dos escores da escala com outras variáveis e concluímos que: Em A1, a correlação entre o IDCH e a EAVloc foi de 0,59. No A2, para a EAVloc, foi de 0,56 (moderada). No S2, a correlação entre o IDCH e a EAVloc foi de 0,55. A rotina abaixo demonstra os resultados.

base_carprofeno %>% 
  #filter(grupo_dummy == 1) %>% 
  {cor.test(.$total_w4, .$vas_loc_w4)}
## 
##  Pearson's product-moment correlation
## 
## data:  .$total_w4 and .$vas_loc_w4
## t = 4.4724, df = 38, p-value = 6.794e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3374624 0.7597647
## sample estimates:
##       cor 
## 0.5872395
base_carprofeno %>% 
  #filter(grupo_dummy != 3) %>% 
  {cor.test(.$total_w0, .$vas_loc_w0)}
## 
##  Pearson's product-moment correlation
## 
## data:  .$total_w0 and .$vas_loc_w0
## t = 4.1377, df = 38, p-value = 0.0001873
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2974498 0.7403040
## sample estimates:
##       cor 
## 0.5573188
base_carprofeno %>% 
  #filter(grupo_dummy != 3) %>% 
  {cor.test(.$total_s2, .$vas_loc_s2)}
## 
##  Pearson's product-moment correlation
## 
## data:  .$total_s2 and .$vas_loc_s2
## t = 4.1026, df = 38, p-value = 0.000208
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2931319 0.7381586
## sample estimates:
##       cor 
## 0.5540492

Finalmente, como uma ideia subjacente a este curso é também permitir que o estudante tenha habilidade de programação e consiga, eficientemente, utilizar funções de pacotes desenvolvidos para auxiliar as análises estatísticas, o gráfico a seguir é uma generalização das correlações individuais e pode ser muito informativo para responder perguntas relacionadas a relação entre medidas psicológicas.

base_carprofeno %>% 
  select(starts_with("total_"), starts_with("vas_loc_")) %>% 
  DataExplorer::plot_correlation(df, type = 'continuous', cor_args = list("use" = "pairwise.complete.obs"))

Análise de Componentes Principais

Os escores gerados são combinações ponderadas dos itens e o objetivo é simplesmente explicar a variância nos itens.

Decisões que a gente toma ao realizar uma Análise de Componentes Principais

  1. Posso realizar ?

Bartlett de esferecidade - Testa se a matriz de correlação é uma matriz identidade. Se for, não há correlação entre os dados e isso previne de fazermos uma técnica de redução de dados (seja lá qual for). Para calcular esse coeficiente, é necessário diferentes passos intermediários e entre eles, o cálculo do determinante da matriz. Apesar do objetivo do curso não ser diretamente relacionado à matemática, alguns tópicos serão pormenorizados na medida da necessidade.

Assim, o determinante de uma matriz quadrada M é a associação de um número real único, chamado de determinante de M e podemos abreviar por det (M), que pode ser utilizado na resolução de sistemas lineares.

A fórmula do teste de Bartlett é a seguinte:

\[\chi = -[(N-1)-\frac{(2k+5)}{6}]*ln|Det(M)|\]

base_carprofeno %>% 
  select(w4_1:w4_11) %>% 
  psych::cortest.bartlett()
## R was not square, finding R from data
## $chisq
## [1] 504.8484
## 
## $p.value
## [1] 5.737049e-74
## 
## $df
## [1] 55
base_carprofeno %>% 
  select(w4_1:w4_11) %>% 
  psych::KMO(.)
## Kaiser-Meyer-Olkin factor adequacy
## Call: psych::KMO(r = .)
## Overall MSA =  0.89
## MSA for each item = 
##  w4_1  w4_2  w4_3  w4_4  w4_5  w4_6  w4_7  w4_8  w4_9 w4_10 w4_11 
##  0.87  0.79  0.92  0.92  0.89  0.86  0.94  0.85  0.92  0.92  0.94

Quantos componentes devo ter ?

base_carprofeno %>% 
  select(w4_1:w4_11) %>% 
  psych::scree()

Quais sao os autovalores ?

base_carprofeno %>% 
  select(w4_1:w4_11) %>% 
  psych::fa.parallel(cor = ,nfactors = 1, fa = "pc") %>% print()

## Parallel analysis suggests that the number of factors =  NA  and the number of components =  1 
## Call: psych::fa.parallel(x = ., fa = "pc", nfactors = 1)
## Parallel analysis suggests that the number of factors =  NA  and the number of components =  1 
## 
##  Eigen Values of 
## 
##  eigen values of factors
##  [1]  6.62  0.58  0.29  0.19 -0.02 -0.07 -0.08 -0.14 -0.17 -0.21 -0.37
## 
##  eigen values of simulated factors
## [1] NA
## 
##  eigen values of components 
##  [1] 6.98 1.07 0.82 0.57 0.38 0.34 0.24 0.19 0.17 0.14 0.09
## 
##  eigen values of simulated components
##  [1] 1.79 1.54 1.35 1.24 1.11 0.94 0.83 0.73 0.62 0.49 0.37
base_carprofeno %>% 
  select(w4_1:w4_11) %>% 
  psych::principal(., nfactors = 1)
## Principal Components Analysis
## Call: psych::principal(r = ., nfactors = 1)
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PC1   h2   u2 com
## w4_1  0.65 0.42 0.58   1
## w4_2  0.72 0.52 0.48   1
## w4_3  0.57 0.33 0.67   1
## w4_4  0.88 0.77 0.23   1
## w4_5  0.86 0.75 0.25   1
## w4_6  0.86 0.75 0.25   1
## w4_7  0.82 0.68 0.32   1
## w4_8  0.74 0.55 0.45   1
## w4_9  0.85 0.72 0.28   1
## w4_10 0.88 0.78 0.22   1
## w4_11 0.85 0.73 0.27   1
## 
##                 PC1
## SS loadings    6.98
## Proportion Var 0.63
## 
## Mean item complexity =  1
## Test of the hypothesis that 1 component is sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.09 
##  with the empirical chi square  47.99  with prob <  0.31 
## 
## Fit based upon off diagonal values = 0.98

Análise Fatorial

Existem mutias formas de nomear os traços latentes que supostamente exercem influência causal nas probabilidades ou processos de respostas aos itens. Na literatura, se encontra “dimensão”, “habilidade”, “domínio”, “construto”, fator“, etc. O nome”fator" tecnicamente é mais associado à técnica estatística do que a habilidade psicológica. No entanto, uma vez que procedimentos de Análise Fatorial são muito empregados em análises psicométricas, acabou que o termo fator tornou-se a primeira escolha quando alguém deseja falar sobre o traço latente subjacente ao processo de resposta.

Análise Fatorial exploratória (EFA)

Antes de qualquer análise, ter segurança dos dados é fundamental. Essa atenção deve ser redobrada quando se trabalha no ambiente da análise fatorial. Pequenas alterações na base (por exemplo, forma de tratar os missing cases ou erros de codificação) podem gerar erros enormes e que, quando detectados apenas em uma etapa posterior do trabalho, criam um ambiente de muita dificuldade analítica e operacional.

Assim, a base de uso será totalmente checada. Inicialmente, a codificação e os valores minimos e máximos de cada categoria serão averiguados.

ife_65 %>% summarytools::descr(., stats = "common", style = "grid", transpose = T) %>% 
  kable(digits = 2) %>% # Aprsentacao
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Mean Std.Dev Min Median Max N.Valid Pct.Valid
y1 0.65 0.67 0 1 2 3267 99.48
y10 0.96 0.76 0 1 2 3269 99.54
y11 0.39 0.60 0 0 2 3267 99.48
y12 0.90 0.73 0 1 2 3264 99.39
y13 0.69 0.60 0 1 2 3261 99.30
y14 0.78 0.73 0 1 2 3262 99.33
y15 0.90 0.68 0 1 2 3262 99.33
y16 1.08 0.73 0 1 2 3273 99.67
y17 0.83 0.65 0 1 2 3273 99.67
y18 0.84 0.74 0 1 2 3267 99.48
y19 0.80 0.72 0 1 2 3266 99.45
y2 0.63 0.62 0 1 2 3258 99.21
y20 0.32 0.54 0 0 2 3276 99.76
y21 0.88 0.71 0 1 2 3273 99.67
y22 1.17 0.71 0 1 2 3274 99.70
y23 0.88 0.71 0 1 2 3275 99.73
y24 0.70 0.68 0 1 2 3271 99.60
y25 0.90 0.70 0 1 2 3273 99.67
y26 1.00 0.74 0 1 2 3280 99.88
y27 0.78 0.61 0 1 2 3281 99.91
y28 0.70 0.68 0 1 2 3272 99.63
y29 0.44 0.67 0 0 2 3256 99.15
y3 0.72 0.67 0 1 2 3268 99.51
y30 0.37 0.63 0 0 2 3169 96.50
y31 0.73 0.62 0 1 2 3272 99.63
y32 0.83 0.78 0 1 2 3270 99.57
y33 0.83 0.70 0 1 2 3254 99.09
y34 0.86 0.64 0 1 2 3265 99.42
y35 0.57 0.63 0 0 2 3212 97.81
y36 0.77 0.68 0 1 2 3254 99.09
y37 0.69 0.68 0 1 2 3263 99.36
y38 0.81 0.63 0 1 2 3272 99.63
y39 0.88 0.74 0 1 2 3250 98.96
y4 0.55 0.66 0 0 2 3273 99.67
y40 0.84 0.67 0 1 2 3257 99.18
y41 0.70 0.67 0 1 2 3264 99.39
y42 0.92 0.68 0 1 2 3262 99.33
y43 0.94 0.62 0 1 2 3268 99.51
y44 0.77 0.71 0 1 2 3266 99.45
y45 0.53 0.66 0 0 2 3267 99.48
y46 0.35 0.56 0 0 2 3272 99.63
y47 0.83 0.68 0 1 2 3274 99.70
y48 0.59 0.63 0 1 2 3280 99.88
y49 0.96 0.65 0 1 2 3281 99.91
y5 0.42 0.60 0 0 2 3267 99.48
y50 0.77 0.71 0 1 2 3270 99.57
y51 1.06 0.65 0 1 2 3263 99.36
y52 0.83 0.70 0 1 2 3276 99.76
y53 0.65 0.63 0 1 2 3267 99.48
y54 0.89 0.75 0 1 2 3273 99.67
y55 0.62 0.67 0 1 2 3272 99.63
y56 0.60 0.70 0 0 2 3264 99.39
y57 0.72 0.74 0 1 2 3262 99.33
y58 0.98 0.74 0 1 2 3264 99.39
y59 0.85 0.68 0 1 2 3263 99.36
y6 0.27 0.49 0 0 2 3274 99.70
y60 0.75 0.79 0 1 2 3276 99.76
y61 0.69 0.75 0 1 2 3265 99.42
y62 0.70 0.67 0 1 2 3257 99.18
y63 0.40 0.59 0 0 2 3259 99.24
y64 0.98 0.68 0 1 2 3268 99.51
y65 0.81 0.66 0 1 2 3274 99.70
y7 0.83 0.52 0 1 2 3278 99.82
y8 1.08 0.71 0 1 2 3272 99.63
y9 0.56 0.61 0 0 2 3249 98.93

É possível notar que existem dados ausentes na maioria das variáveis trabalhadas, mas que os valores mínimos e máximos estão adequados. Ou seja, estão dentro do intervalo 0-2 que a escala permite. No entanto, como os dados são categóricos (ordinais), é necessário verificar se as categorias foram definidas. Em alguns casos, por descuido, pesquisadores podem colocar valores fracionários dentro do intervalo 0-2.

ife_65 %>% {alpha(.)$response.freq} %>% 
  kable(digits = 2) %>% # Aprsentacao
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
0 1 2 miss
y1 0.46 0.43 0.11 0.01
y2 0.45 0.47 0.08 0.01
y3 0.40 0.47 0.12 0.00
y4 0.54 0.37 0.09 0.00
y5 0.64 0.30 0.06 0.01
y6 0.76 0.22 0.02 0.00
y7 0.23 0.70 0.06 0.00
y8 0.21 0.49 0.29 0.00
y9 0.51 0.43 0.06 0.01
y10 0.31 0.42 0.27 0.00
y11 0.67 0.27 0.06 0.01
y12 0.32 0.45 0.23 0.01
y13 0.38 0.55 0.07 0.01
y14 0.40 0.42 0.18 0.01
y15 0.29 0.52 0.19 0.01
y16 0.23 0.47 0.31 0.00
y17 0.31 0.55 0.14 0.00
y18 0.37 0.43 0.20 0.01
y19 0.38 0.45 0.18 0.01
y20 0.72 0.25 0.04 0.00
y21 0.32 0.48 0.20 0.00
y22 0.18 0.46 0.35 0.00
y23 0.32 0.48 0.20 0.00
y24 0.43 0.45 0.12 0.00
y25 0.30 0.50 0.20 0.00
y26 0.28 0.45 0.27 0.00
y27 0.32 0.57 0.10 0.00
y28 0.42 0.45 0.12 0.00
y29 0.66 0.24 0.10 0.01
y30 0.71 0.21 0.08 0.04
y31 0.37 0.54 0.09 0.00
y32 0.40 0.37 0.23 0.00
y33 0.34 0.48 0.18 0.01
y34 0.29 0.57 0.14 0.01
y35 0.50 0.42 0.08 0.02
y36 0.37 0.49 0.14 0.01
y37 0.43 0.44 0.13 0.01
y38 0.31 0.57 0.12 0.00
y39 0.34 0.44 0.22 0.01
y40 0.32 0.53 0.15 0.01
y41 0.41 0.47 0.12 0.01
y42 0.27 0.53 0.19 0.01
y43 0.23 0.61 0.17 0.00
y44 0.40 0.44 0.17 0.01
y45 0.56 0.35 0.09 0.01
y46 0.70 0.26 0.05 0.00
y47 0.33 0.50 0.16 0.00
y48 0.49 0.44 0.08 0.00
y49 0.23 0.57 0.19 0.00
y50 0.40 0.44 0.16 0.00
y51 0.18 0.58 0.24 0.01
y52 0.35 0.47 0.18 0.00
y53 0.43 0.48 0.08 0.01
y54 0.34 0.43 0.23 0.00
y55 0.49 0.41 0.11 0.00
y56 0.53 0.34 0.13 0.01
y57 0.45 0.38 0.17 0.01
y58 0.28 0.46 0.26 0.01
y59 0.32 0.51 0.17 0.01
y60 0.47 0.31 0.22 0.00
y61 0.48 0.34 0.18 0.01
y62 0.42 0.46 0.12 0.01
y63 0.66 0.28 0.06 0.01
y64 0.24 0.54 0.22 0.00
y65 0.33 0.52 0.14 0.00
#caso opte por uma função purrr
#ife_65 %>% 
#  mutate_all(., as.factor) %>% 
#  map(., table)

Uma vez que tudo parece adequado, o tratamento dos casos ausentes é uma condição necessára e deve anteceder a análise exploratória. Evidentemente, existem muitas recomendações sobre o que fazer com dados ausentes (até mesmo não fazer nada). No entanto, esse assunto já foi trabalhado em aulas anteriores e, por não ser o foco de agora, iremos trabalhar com a base já consolidada, em que um processo de múltipla imputação foi performado. Essa base se chama ife_65_c. É possível visualizar na tabela seguinte que os valores estão adequados e nenhum caso ausente está presente.

ife_65_c %>% {alpha(.)$response.freq} %>% 
  kable(digits = 2) %>% # Aprsentacao
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
0 1 2 miss
y1 0.46 0.43 0.11 0
y2 0.45 0.47 0.08 0
y3 0.40 0.48 0.12 0
y4 0.54 0.37 0.09 0
y5 0.64 0.30 0.06 0
y6 0.76 0.22 0.02 0
y7 0.24 0.70 0.06 0
y8 0.21 0.49 0.29 0
y9 0.51 0.43 0.06 0
y10 0.31 0.42 0.27 0
y11 0.67 0.27 0.06 0
y12 0.32 0.45 0.23 0
y13 0.38 0.55 0.07 0
y14 0.40 0.42 0.18 0
y15 0.29 0.52 0.19 0
y16 0.23 0.47 0.31 0
y17 0.31 0.54 0.14 0
y18 0.37 0.43 0.20 0
y19 0.37 0.45 0.18 0
y20 0.72 0.25 0.04 0
y21 0.32 0.48 0.20 0
y22 0.18 0.46 0.35 0
y23 0.32 0.48 0.20 0
y24 0.43 0.45 0.12 0
y25 0.30 0.50 0.20 0
y26 0.28 0.45 0.27 0
y27 0.32 0.57 0.10 0
y28 0.42 0.45 0.12 0
y29 0.66 0.24 0.10 0
y30 0.71 0.21 0.08 0
y31 0.37 0.54 0.09 0
y32 0.40 0.37 0.23 0
y33 0.34 0.48 0.18 0
y34 0.29 0.57 0.14 0
y35 0.50 0.42 0.08 0
y36 0.37 0.49 0.14 0
y37 0.43 0.44 0.13 0
y38 0.31 0.57 0.12 0
y39 0.34 0.44 0.22 0
y40 0.32 0.53 0.15 0
y41 0.41 0.47 0.12 0
y42 0.27 0.53 0.19 0
y43 0.23 0.61 0.16 0
y44 0.40 0.44 0.17 0
y45 0.56 0.35 0.09 0
y46 0.70 0.26 0.05 0
y47 0.33 0.50 0.16 0
y48 0.49 0.44 0.08 0
y49 0.23 0.57 0.19 0
y50 0.40 0.44 0.16 0
y51 0.18 0.58 0.24 0
y52 0.35 0.48 0.18 0
y53 0.43 0.48 0.08 0
y54 0.34 0.43 0.23 0
y55 0.49 0.41 0.11 0
y56 0.53 0.34 0.13 0
y57 0.45 0.38 0.17 0
y58 0.28 0.45 0.26 0
y59 0.32 0.51 0.17 0
y60 0.47 0.31 0.22 0
y61 0.48 0.34 0.18 0
y62 0.42 0.47 0.12 0
y63 0.66 0.28 0.06 0
y64 0.24 0.54 0.22 0
y65 0.33 0.52 0.14 0

Isto posto, da mesma forma que foi feito durante a PCA, é necessário verificar o Índice de Bartlett e o KMO. Bartlett signficativo e KMO ≥ 0.6 trazem evidências de que as análises podem continuar para etapa exploratória e, em seguida, confirmatória.

bartlett.test(ife_65_c)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  ife_65_c
## Bartlett's K-squared = 3381.3, df = 64, p-value < 2.2e-16
KMO(ife_65_c)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = ife_65_c)
## Overall MSA =  0.97
## MSA for each item = 
##   y1   y2   y3   y4   y5   y6   y7   y8   y9  y10  y11  y12  y13  y14  y15 
## 0.96 0.97 0.97 0.97 0.97 0.95 0.98 0.97 0.97 0.97 0.96 0.96 0.98 0.97 0.98 
##  y16  y17  y18  y19  y20  y21  y22  y23  y24  y25  y26  y27  y28  y29  y30 
## 0.98 0.97 0.98 0.97 0.96 0.97 0.95 0.97 0.98 0.97 0.95 0.98 0.98 0.87 0.83 
##  y31  y32  y33  y34  y35  y36  y37  y38  y39  y40  y41  y42  y43  y44  y45 
## 0.97 0.97 0.94 0.97 0.97 0.97 0.98 0.96 0.94 0.96 0.95 0.98 0.96 0.98 0.98 
##  y46  y47  y48  y49  y50  y51  y52  y53  y54  y55  y56  y57  y58  y59  y60 
## 0.95 0.98 0.96 0.96 0.97 0.70 0.97 0.98 0.97 0.96 0.96 0.97 0.96 0.98 0.97 
##  y61  y62  y63  y64  y65 
## 0.98 0.97 0.98 0.87 0.96

É importante atentar que existem diferentes críticas e sugestões sobre a adequação de ambos os procedimentos nos mesmos dados e, se possível, qual o melhor formato dos dados para realizar os procedimentos. Há pesquisadores que argumentam que realizar uma EFA e uma CFA no mesmo conjunto de dados é aderente à uma lógica circular, há aqueles que defendem que isso é plenamente possível (e muito realizado) bem como há aqueles que julgam que é necessário dividir os dados de maneira aleatória em partes específicas para que um possa ser analizados pela EFA e outro pela CFA. Tenho por hábito seguir a última recomendação e fazer o particionamento dos dados; no entanto, por isso não ser uma regra (mas tão somente uma recomendação), aceitaria tranquilamente outras análises, desde que justificadas.

Esclarecido isso, a decisão de quantos fatores/dimensões devem ser mantidos no modelo é uma das mais dificeis e não há consenso, apenas recomendações que - eventualmente - convergem. É necessário conseguir equilibrar um modelo que seja acurado (e, portanto, com pouco erro), mas que preserve a simplicidade (portanto, seja parcimonioso). Existem muitas regras de decisão e aqui será possível comentar sobre o i. autovalor > 1, ii cotovelo (ou inflexão), iii Análise Paralela, iv o método de Hull (não abordado aqui), v proporção da variância explicada por fator, vi distância entre autovalores e vii critérios de ajustes (obtidos a posteriori).

Necessariamente, o modelo deve atender tanto a aspectos estatísticos, como teóricos. Particularmente, vejo com muita crítica (e ceticismo) decisões calcadas puramente em critérios estatísticos, mas entendo também que a manutenção de uma teoria é condicionada a critérios estatísticos. Do contrário, todo o rigor matemático seria puramente dispensável.

Posto isso, pela teoria original da escala na qual este instrumento foi baseado, se visava chegar a um índice global do funcionamento executivo e a 2 índices específicos a partir da investigação de 9 dimensões latentes: inibição, flexibilidade e controle emocional (que somados geravam o índice de regulação do comportamento) e iniciativa, memória operacional, planejamento/organização, organização do material, monitoramento relacionado a tarefas e monitoramento relacionados a comportamentos pessoais (que somados geravam o índice de metacognição). O índice global era composto pelos dois específicos.

Não obstante, neste instrumento que está sendo desenvolvido, apesar desta ligação teórica, não há um modelo específico que se deseja testar. Dessa forma, a análise fatorial exploratória pode ser conduzida com segurança, uma vez que os indicadores iniciais (Bartlett e kMO) já foram satisfatórios.

Uma primeira forma de verificar quantos fatores devem ser retidos é a partir do scree-plot, que pode ser traduzido como gráfico de sedimentação (ou gráfico de escarpas) e foi introduzido pelo Raymond Cattell (atenção, não é o James M. Cattell). O termo “scree” é bastante utilizado na geologia para indicar uma coleção de fragmentos de rochas quebradas na base de penhascos, montanhas, vulcões ou encostas de vales que se acumularam através da queda periódica de rochas nas faces adjacentes dos penhascos.

Esse gráfico sempre mostrará os autovalores em y e o número de fatores possíveis em x. Por definição, o máximo de fatores que podem ser retidos é igual ao máximo de itens que um instrumento possui. Nesse caso, 65. Já o autovalor tem a ver com o quanto da variância é explicado pelo fator. Por definição, é uma curva negativamente acelerada (convexa).

A observação do scree-plot oferece duas formas de tomar uma decisão. Primeiro, todos os fatores que estão acima ao autovalor 1 devem (podem!) ser mantido. Essa regra é chamada de Guttman-Kaiser. Repare que neste caso, teríamos 3 fatores.

scree(ife_65_c,pc = F, hline=TRUE)

Já o segundo critério é bem visual e é chamado de cotovelo. Este critério é baseado no ponto de inflexão, que é o local onde a linha dos pontos tem um formato platô. Neste exemplo ainda, do quarto fator em diante, a linha é quase que inteiramente plana (flat), indicando que devemos parar, de fato, no terceiro fator. Ou seja, se retem os fatores acima da linha plana.

Ainda de maneira próxima ao scree-plot, é possível tomar uma decisão com base na Análise Paralela de Horn. Esta análise compara os próprios autovalores (da amostra) com autovalores obtidos a partir de simulação levando em consideração o tamanho da amostra e o número de itens. Quando o valor observado é maior ao resultado da Análise paralela, isso corrobora a retenção do fator.

Por este método, mais de 14 fatores deveriam ser retidos, o que tem pouca adequação teórica e, além disso, passaria por problemas em uma etapa posterior de verificação de itens.

library(factorAnalysis)
ife_65_c %>% 
  screePlot(., method = "ml", n.iter=1)
## 
## Note: parallel analysis suggests 14 factors.

Um método mais recente é o de Hull e ele não será abordado aqui nesta seção. Entretanto, o programa “Factor” tem esta opção disponível e é gratuito.

É também possível fazer a retenção fatorial por quantidade de variância explicada por fator (es). Isso seria feito realizando diferentes análises fatoriais, apenas divergindo na quantidade de fatores extraídos e, em seguida, comparando as soluções neste critério. Por exemplo, neste conjunto de dados que agora está sendo trabalhado, com um fator, a proporção explicada é de 22%; já com 2 fatores, a proporção é de 26%. Por construção, a cada novo fator adicionado ao modelo, a proporção de variância explicada será maior, mas sob o custo de aumentar a complexidade interpretativa. Não há um ponto de corte bem definido em relação a quando parar.

fa(ife_65_c, 1)$Vaccounted
##                       MR1
## SS loadings    14.9037047
## Proportion Var  0.2292878
fa(ife_65_c, 2)$Vaccounted
## Loading required namespace: GPArotation
##                             MR2       MR1
## SS loadings           8.7279873 8.4670423
## Proportion Var        0.1342767 0.1302622
## Cumulative Var        0.1342767 0.2645389
## Proportion Explained  0.5075878 0.4924122
## Cumulative Proportion 0.5075878 1.0000000

No entanto, por similaridade, essa estratégia guarda relação com as distâncias dos autovalores e, nesse sentido, a retenção tecnicamente pode parar quando a distância dos autovalores entre as duas primeiras dimensões é três vezes maior do que entre a segunda e a terceira.

Finalmente, pelo avanço computacional, associado à diminuiçào do cuso, é simplesmente possível criar todas as soluções exploratórias possíveis, computar índices de ajustes que são mais relacionados com análises confirmatórias e, em seguida, escolher a melhor soluçào fatorial possível. Tecnicamente, esse procedimento é muito parecido com o descrito ainda pouco (variância explicada por fatores), mas tem a vantagem de abranger também outros indicadores. O drawback de se fazer isso ainda recai em algumas críticas pontuando que essa estratégia tem uma lógica circular (afinal, se testa e confirma ao memsmo tempo) e que existe uma dificuldade de separar o que seria análise exploratória e análise confirmatória. Entretanto, essas críticas tem pouca ressonância na área.

Esta última estrategia é melhor implementada no Mplus, que será utilizado em seguida. Até o momento, não há pacote no R que faça a AFE que consiga esta mesma automação dos procedimentos. Um ponto inconveniente que ocorre é que, apesar da aproximação numérica entre ambos os resultados, ainda não é possível ter convergência total nos valores, limitando um pouco a reprodutibilidade das análises (e seus achados).

fa(ife_65_c,
   cor = "poly",
   nfactors = 3, 
   fm = "ols",
   rotate = "geominQ")
print(efa_pais, cut = .3, sort = T)

Análise Fatorial Confirmatória (CFA)

Posto isso, uma vez definido que a solução com 3 fatores é adequada, é possível testa-la. Ao fazer isso, automaticamente estaremos migrando de um ambiente exploratório (EFA - data driven) para um ambiente confirmatório (CFA - theory driven). A divisão da base de dados em uma partição menor será feita para que a solução seja testada. Teoricamente, esta partição é “cega” aos ajustes e parâmetros previamente encontrados.

Entre as análises que costumeiramente são feitas no ambiente da CFA, temos algumas mais associadas à estrutura interna e outras mais associadas às consequências da testagem. Em relação à estrutura interna, temos os indicadores de ajuste / aderência, indices de modificação e aspectos de fidedignidade. Já em relação às consequências da testagem, vê-se a análise de invariância e de DIF, além da criação de escores fatoriais. É fundamental notar que essas características são puramente didáticas e não necessariamente compartilhada por outros docentes do tema. Isso dito, é possível continuar.

set.seed(123)
ife_65_650 <- ife_65_c %>% sample_n(., 650)

O pacote lavaan é a melhor escola para análise confirmatória e, por isso, será utilizado. Existem três etapas de codificação necessárias: (i) criar o modelo, (ii) rodar o modelo, (iii) testar o modelo (etapa diagnóstica) e (iv) ajustar o modelo, que pode ser feita a partir de índices de modificação ou, basicamente, do zero.

Pelos resultados previamente obtidos e com a decisão de manter aqueles itens com cargasa cruzadas em seus fatores principais, a codificação abaixo pode ser realizada.

library(lavaan)
## This is lavaan 0.6-5
## lavaan is BETA software! Please report any bugs.
## 
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
## 
##     cor2cov
mod_cfa_pais <- 'metacog1   =~ y12 + y26 + y8 + y1 + y17 + y20 + y10 + y47 + y48 + y60 + y55 + y6 + y7 + y57
regulacao   =~ y21 + y23 + y19 + y52 + y28 + y3 + y4 + y50 + y45 + y24 + y25 + y22 + y18 + y54 + y59 + y14 + y42 + y16 + y11 + y53 + y58 + y32
metacog2 =~ y30 + y41 + y31 + y29 + y35 + y38 + y37 + y2 + y40 + y13 + y46 + y43 + y62 + y44 + y9 + y27 + y33 + y39 + y65 + y34 + y36 + y56 + y5'

Agora, rodar o modelo deve ser feito.

cfa_pais <- cfa(mod_cfa_pais, #model name
                  data=ife_65_650, #dataset
                  estimator = 'WLSMV', #method for extracting factors
                  orthogonal=FALSE,
                  ordered=names(ife_65_650))

Após isso, é possível testar o modelo. É importante lembrar que as análises psicométricas e os eventuais modelos derivados dela são fundamentais tanto para descrever o conjunto de dados em questão, como para fazer previsões. É também importante atentar para uma questão de nomeação dos fenômenos. A palavra “dados” tanto se refere aos valores observados na base, como valores resultantes de sumários estatísticos ou estatísticas de testes. Nesse sentido, os dados vem do modelo e, isto posto, fica claro perceber que o diagnóstico do modelo seja uma das etapas mais importantes da modelagem psicométrica.

Em sentido psicométrico/estatístico, testar o modelo envolve tanto verificar sua adequação ou aderência aos dados tanto a partir de critérios de ajustes (em ingles Goodness of fit) do modelo como um todo, como inspecionar os resultados item a item.

Em relação aos critérios de ajuste Os ajustes gerais podem ser quebrados em índices absolutos e relativos e parte do texto de agora será exportado de um trabalho meu (Anunciação, 2018), bem como dos livros “The SAGE Encyclopedia of Educational Research, Measurement, and Evaluation”.

Índices absolutos determina o grau que o modelo hipotetizado prediz ou se ajusta aos dados observados. Esses indices não utilizam um modelo de base a priori para comparação. Eles provem uma medida derivada do ajuste do modelo aos dados e da matriz de covariância hipotética. Eles respondem à questão: “Será que o modelo proposto/hipotetizado provê um ajuste geral aos dados observados” ou “No geral, quão bem o modelo proposto/hipotetizado reproduz os dados observados?”

Entre os índices absolutos, há o Qui-quadrado (X2), o Goodness of Fit Index (GFI), o Root Mean Square of Approximation (RMSEA), o Standardized Root Mean Square Residual (SRMR) e os critérios de informação (AIC e BIC). Entre os índices relativos, os principais são o CFI e o TLI, que eventualmente são chamados de incrementais.

Já os índices relativos comparam a performance do modelo proposto/hipotetizado com um modelo nulo (modelo de base), que é estipulado que não existe correlação entre as varia’veis observadas. Os principais índices deste grupo são o NFI, CFI e o TLI.

Com isto explicitado, agora é possível fazer o diagnóstico do modelo. O output do lavaan pode ser bastante extenso, mas as descrições serão feitas pontualmente. Os ajustes serão analisados pragmáticamente de maneira similar àquela utilizada para publicação.

summary(cfa_pais, standardized=TRUE, fit.measures=TRUE, modindices=FALSE)
## lavaan 0.6-5 ended normally after 70 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of free parameters                        180
##                                                       
##   Number of observations                           650
##                                                       
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              4607.852    3716.879
##   Degrees of freedom                              1649        1649
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.679
##   Shift parameter                                          971.802
##     for the simple second-order correction 
## 
## Model Test Baseline Model:
## 
##   Test statistic                             85749.268   22817.662
##   Degrees of freedom                              1711        1711
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  3.982
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.965       0.902
##   Tucker-Lewis Index (TLI)                       0.963       0.898
##                                                                   
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.053       0.044
##   90 Percent confidence interval - lower         0.051       0.042
##   90 Percent confidence interval - upper         0.054       0.046
##   P-value RMSEA <= 0.05                          0.009       1.000
##                                                                   
##   Robust RMSEA                                                  NA
##   90 Percent confidence interval - lower                        NA
##   90 Percent confidence interval - upper                        NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.069       0.069
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
##   Standard errors                           Robust.sem
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   metacog1 =~                                                           
##     y12               1.000                               0.660    0.660
##     y26               0.994    0.048   20.628    0.000    0.656    0.656
##     y8                1.082    0.062   17.322    0.000    0.715    0.715
##     y1                0.957    0.065   14.832    0.000    0.632    0.632
##     y17               1.011    0.062   16.321    0.000    0.667    0.667
##     y20               1.058    0.071   14.913    0.000    0.699    0.699
##     y10               0.880    0.065   13.489    0.000    0.581    0.581
##     y47               0.935    0.061   15.245    0.000    0.617    0.617
##     y48               0.993    0.066   14.950    0.000    0.655    0.655
##     y60               0.860    0.064   13.418    0.000    0.568    0.568
##     y55               0.868    0.063   13.860    0.000    0.573    0.573
##     y6                0.752    0.080    9.349    0.000    0.497    0.497
##     y7                0.964    0.071   13.652    0.000    0.637    0.637
##     y57               0.802    0.069   11.685    0.000    0.529    0.529
##   regulacao =~                                                          
##     y21               1.000                               0.705    0.705
##     y23               0.978    0.044   22.380    0.000    0.690    0.690
##     y19               0.989    0.043   23.012    0.000    0.697    0.697
##     y52               0.916    0.043   21.229    0.000    0.646    0.646
##     y28               0.934    0.049   19.191    0.000    0.658    0.658
##     y3                0.959    0.047   20.243    0.000    0.676    0.676
##     y4                1.016    0.048   21.356    0.000    0.716    0.716
##     y50               0.860    0.048   17.879    0.000    0.606    0.606
##     y45               0.997    0.047   21.320    0.000    0.703    0.703
##     y24               0.878    0.046   19.047    0.000    0.619    0.619
##     y25               0.929    0.051   18.108    0.000    0.655    0.655
##     y22               0.802    0.051   15.802    0.000    0.565    0.565
##     y18               0.873    0.051   16.998    0.000    0.615    0.615
##     y54               0.753    0.053   14.254    0.000    0.530    0.530
##     y59               0.928    0.047   19.738    0.000    0.654    0.654
##     y14               0.911    0.049   18.743    0.000    0.642    0.642
##     y42               0.806    0.049   16.379    0.000    0.568    0.568
##     y16               1.114    0.049   22.936    0.000    0.785    0.785
##     y11               0.766    0.058   13.157    0.000    0.540    0.540
##     y53               0.855    0.055   15.677    0.000    0.603    0.603
##     y58               0.630    0.056   11.221    0.000    0.444    0.444
##     y32               0.773    0.055   14.036    0.000    0.545    0.545
##   metacog2 =~                                                           
##     y30               1.000                               0.369    0.369
##     y41               1.225    0.182    6.727    0.000    0.452    0.452
##     y31               1.645    0.216    7.631    0.000    0.607    0.607
##     y29               1.017    0.121    8.433    0.000    0.376    0.376
##     y35               1.631    0.213    7.641    0.000    0.602    0.602
##     y38               1.525    0.215    7.092    0.000    0.563    0.563
##     y37               1.838    0.240    7.668    0.000    0.679    0.679
##     y2                1.641    0.226    7.256    0.000    0.606    0.606
##     y40               1.399    0.199    7.038    0.000    0.517    0.517
##     y13               1.569    0.226    6.939    0.000    0.579    0.579
##     y46               1.988    0.262    7.584    0.000    0.734    0.734
##     y43               1.455    0.202    7.207    0.000    0.537    0.537
##     y62               1.662    0.225    7.385    0.000    0.613    0.613
##     y44               1.829    0.243    7.529    0.000    0.675    0.675
##     y9                1.352    0.194    6.963    0.000    0.499    0.499
##     y27               1.928    0.251    7.671    0.000    0.712    0.712
##     y33               0.959    0.153    6.270    0.000    0.354    0.354
##     y39               1.125    0.175    6.415    0.000    0.415    0.415
##     y65               1.183    0.181    6.530    0.000    0.437    0.437
##     y34               1.481    0.200    7.418    0.000    0.547    0.547
##     y36               1.355    0.184    7.374    0.000    0.500    0.500
##     y56               1.241    0.189    6.565    0.000    0.458    0.458
##     y5                1.715    0.219    7.831    0.000    0.633    0.633
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   metacog1 ~~                                                           
##     regulacao         0.339    0.023   14.622    0.000    0.730    0.730
##     metacog2          0.196    0.026    7.521    0.000    0.804    0.804
##   regulacao ~~                                                          
##     metacog2          0.183    0.025    7.323    0.000    0.704    0.704
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .y12               0.000                               0.000    0.000
##    .y26               0.000                               0.000    0.000
##    .y8                0.000                               0.000    0.000
##    .y1                0.000                               0.000    0.000
##    .y17               0.000                               0.000    0.000
##    .y20               0.000                               0.000    0.000
##    .y10               0.000                               0.000    0.000
##    .y47               0.000                               0.000    0.000
##    .y48               0.000                               0.000    0.000
##    .y60               0.000                               0.000    0.000
##    .y55               0.000                               0.000    0.000
##    .y6                0.000                               0.000    0.000
##    .y7                0.000                               0.000    0.000
##    .y57               0.000                               0.000    0.000
##    .y21               0.000                               0.000    0.000
##    .y23               0.000                               0.000    0.000
##    .y19               0.000                               0.000    0.000
##    .y52               0.000                               0.000    0.000
##    .y28               0.000                               0.000    0.000
##    .y3                0.000                               0.000    0.000
##    .y4                0.000                               0.000    0.000
##    .y50               0.000                               0.000    0.000
##    .y45               0.000                               0.000    0.000
##    .y24               0.000                               0.000    0.000
##    .y25               0.000                               0.000    0.000
##    .y22               0.000                               0.000    0.000
##    .y18               0.000                               0.000    0.000
##    .y54               0.000                               0.000    0.000
##    .y59               0.000                               0.000    0.000
##    .y14               0.000                               0.000    0.000
##    .y42               0.000                               0.000    0.000
##    .y16               0.000                               0.000    0.000
##    .y11               0.000                               0.000    0.000
##    .y53               0.000                               0.000    0.000
##    .y58               0.000                               0.000    0.000
##    .y32               0.000                               0.000    0.000
##    .y30               0.000                               0.000    0.000
##    .y41               0.000                               0.000    0.000
##    .y31               0.000                               0.000    0.000
##    .y29               0.000                               0.000    0.000
##    .y35               0.000                               0.000    0.000
##    .y38               0.000                               0.000    0.000
##    .y37               0.000                               0.000    0.000
##    .y2                0.000                               0.000    0.000
##    .y40               0.000                               0.000    0.000
##    .y13               0.000                               0.000    0.000
##    .y46               0.000                               0.000    0.000
##    .y43               0.000                               0.000    0.000
##    .y62               0.000                               0.000    0.000
##    .y44               0.000                               0.000    0.000
##    .y9                0.000                               0.000    0.000
##    .y27               0.000                               0.000    0.000
##    .y33               0.000                               0.000    0.000
##    .y39               0.000                               0.000    0.000
##    .y65               0.000                               0.000    0.000
##    .y34               0.000                               0.000    0.000
##    .y36               0.000                               0.000    0.000
##    .y56               0.000                               0.000    0.000
##    .y5                0.000                               0.000    0.000
##     metacog1          0.000                               0.000    0.000
##     regulacao         0.000                               0.000    0.000
##     metacog2          0.000                               0.000    0.000
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     y12|t1           -0.498    0.051   -9.674    0.000   -0.498   -0.498
##     y12|t2            0.731    0.054   13.470    0.000    0.731    0.731
##     y26|t1           -0.639    0.053  -12.044    0.000   -0.639   -0.639
##     y26|t2            0.597    0.053   11.361    0.000    0.597    0.597
##     y8|t1            -0.767    0.055  -13.988    0.000   -0.767   -0.767
##     y8|t2             0.560    0.052   10.750    0.000    0.560    0.560
##     y1|t1            -0.066    0.049   -1.332    0.183   -0.066   -0.066
##     y1|t2             1.206    0.065   18.646    0.000    1.206    1.206
##     y17|t1           -0.533    0.052  -10.290    0.000   -0.533   -0.533
##     y17|t2            1.033    0.060   17.209    0.000    1.033    1.033
##     y20|t1            0.502    0.052    9.751    0.000    0.502    0.502
##     y20|t2            1.751    0.089   19.613    0.000    1.751    1.751
##     y10|t1           -0.524    0.052  -10.136    0.000   -0.524   -0.524
##     y10|t2            0.672    0.053   12.573    0.000    0.672    0.672
##     y47|t1           -0.489    0.051   -9.520    0.000   -0.489   -0.489
##     y47|t2            0.988    0.059   16.747    0.000    0.988    0.988
##     y48|t1           -0.042    0.049   -0.862    0.389   -0.042   -0.042
##     y48|t2            1.437    0.073   19.703    0.000    1.437    1.437
##     y60|t1           -0.163    0.049   -3.291    0.001   -0.163   -0.163
##     y60|t2            0.767    0.055   13.988    0.000    0.767    0.767
##     y55|t1           -0.019    0.049   -0.392    0.695   -0.019   -0.019
##     y55|t2            1.264    0.067   19.004    0.000    1.264    1.264
##     y6|t1             0.667    0.053   12.497    0.000    0.667    0.667
##     y6|t2             2.023    0.111   18.302    0.000    2.023    2.023
##     y7|t1            -0.752    0.055  -13.766    0.000   -0.752   -0.752
##     y7|t2             1.517    0.076   19.842    0.000    1.517    1.517
##     y57|t1           -0.155    0.049   -3.134    0.002   -0.155   -0.155
##     y57|t2            0.915    0.057   15.927    0.000    0.915    0.915
##     y21|t1           -0.485    0.051   -9.443    0.000   -0.485   -0.485
##     y21|t2            0.904    0.057   15.787    0.000    0.904    0.904
##     y23|t1           -0.502    0.052   -9.751    0.000   -0.502   -0.502
##     y23|t2            0.915    0.057   15.927    0.000    0.915    0.915
##     y19|t1           -0.367    0.050   -7.273    0.000   -0.367   -0.367
##     y19|t2            0.963    0.058   16.478    0.000    0.963    0.963
##     y52|t1           -0.451    0.051   -8.825    0.000   -0.451   -0.451
##     y52|t2            0.951    0.058   16.341    0.000    0.951    0.951
##     y28|t1           -0.206    0.050   -4.152    0.000   -0.206   -0.206
##     y28|t2            1.299    0.068   19.190    0.000    1.299    1.299
##     y3|t1            -0.281    0.050   -5.637    0.000   -0.281   -0.281
##     y3|t2             1.256    0.066   18.955    0.000    1.256    1.256
##     y4|t1             0.116    0.049    2.351    0.019    0.116    0.116
##     y4|t2             1.365    0.070   19.478    0.000    1.365    1.365
##     y50|t1           -0.281    0.050   -5.637    0.000   -0.281   -0.281
##     y50|t2            1.020    0.060   17.078    0.000    1.020    1.020
##     y45|t1            0.143    0.049    2.899    0.004    0.143    0.143
##     y45|t2            1.317    0.068   19.278    0.000    1.317    1.317
##     y24|t1           -0.273    0.050   -5.480    0.000   -0.273   -0.273
##     y24|t2            1.167    0.064   18.370    0.000    1.167    1.167
##     y25|t1           -0.516    0.052   -9.982    0.000   -0.516   -0.516
##     y25|t2            0.825    0.056   14.790    0.000    0.825    0.825
##     y22|t1           -1.020    0.060  -17.078    0.000   -1.020   -1.020
##     y22|t2            0.379    0.051    7.506    0.000    0.379    0.379
##     y18|t1           -0.396    0.051   -7.817    0.000   -0.396   -0.396
##     y18|t2            0.869    0.057   15.364    0.000    0.869    0.869
##     y54|t1           -0.417    0.051   -8.205    0.000   -0.417   -0.417
##     y54|t2            0.793    0.055   14.354    0.000    0.793    0.793
##     y59|t1           -0.472    0.051   -9.211    0.000   -0.472   -0.472
##     y59|t2            0.945    0.058   16.273    0.000    0.945    0.945
##     y14|t1           -0.253    0.050   -5.090    0.000   -0.253   -0.253
##     y14|t2            0.945    0.058   16.273    0.000    0.945    0.945
##     y42|t1           -0.658    0.053  -12.346    0.000   -0.658   -0.658
##     y42|t2            0.898    0.057   15.717    0.000    0.898    0.898
##     y16|t1           -0.798    0.055  -14.427    0.000   -0.798   -0.798
##     y16|t2            0.485    0.051    9.443    0.000    0.485    0.485
##     y11|t1            0.446    0.051    8.748    0.000    0.446    0.446
##     y11|t2            1.529    0.077   19.853    0.000    1.529    1.529
##     y53|t1           -0.233    0.050   -4.699    0.000   -0.233   -0.233
##     y53|t2            1.395    0.071   19.583    0.000    1.395    1.395
##     y58|t1           -0.556    0.052  -10.673    0.000   -0.556   -0.556
##     y58|t2            0.667    0.053   12.497    0.000    0.667    0.667
##     y32|t1           -0.301    0.050   -6.027    0.000   -0.301   -0.301
##     y32|t2            0.736    0.054   13.544    0.000    0.736    0.736
##     y30|t1            0.629    0.053   11.893    0.000    0.629    0.629
##     y30|t2            1.426    0.072   19.675    0.000    1.426    1.426
##     y41|t1           -0.194    0.050   -3.917    0.000   -0.194   -0.194
##     y41|t2            1.247    0.066   18.905    0.000    1.247    1.247
##     y31|t1           -0.350    0.050   -6.962    0.000   -0.350   -0.350
##     y31|t2            1.385    0.071   19.549    0.000    1.385    1.385
##     y29|t1            0.489    0.051    9.520    0.000    0.489    0.489
##     y29|t2            1.327    0.069   19.320    0.000    1.327    1.327
##     y35|t1           -0.027    0.049   -0.549    0.583   -0.027   -0.027
##     y35|t2            1.395    0.071   19.583    0.000    1.395    1.395
##     y38|t1           -0.476    0.051   -9.289    0.000   -0.476   -0.476
##     y38|t2            1.222    0.065   18.752    0.000    1.222    1.222
##     y37|t1           -0.174    0.049   -3.526    0.000   -0.174   -0.174
##     y37|t2            1.256    0.066   18.955    0.000    1.256    1.256
##     y2|t1            -0.112    0.049   -2.273    0.023   -0.112   -0.112
##     y2|t2             1.437    0.073   19.703    0.000    1.437    1.437
##     y40|t1           -0.429    0.051   -8.438    0.000   -0.429   -0.429
##     y40|t2            1.027    0.060   17.144    0.000    1.027    1.027
##     y13|t1           -0.330    0.050   -6.572    0.000   -0.330   -0.330
##     y13|t2            1.437    0.073   19.703    0.000    1.437    1.437
##     y46|t1            0.524    0.052   10.136    0.000    0.524    0.524
##     y46|t2            1.623    0.082   19.852    0.000    1.623    1.623
##     y43|t1           -0.741    0.054  -13.618    0.000   -0.741   -0.741
##     y43|t2            1.014    0.060   17.013    0.000    1.014    1.014
##     y62|t1           -0.143    0.049   -2.899    0.004   -0.143   -0.143
##     y62|t2            1.214    0.065   18.699    0.000    1.214    1.214
##     y44|t1           -0.249    0.050   -5.012    0.000   -0.249   -0.249
##     y44|t2            1.067    0.061   17.528    0.000    1.067    1.067
##     y9|t1            -0.023    0.049   -0.470    0.638   -0.023   -0.023
##     y9|t2             1.542    0.078   19.862    0.000    1.542    1.542
##     y27|t1           -0.421    0.051   -8.283    0.000   -0.421   -0.421
##     y27|t2            1.327    0.069   19.320    0.000    1.327    1.327
##     y33|t1           -0.396    0.051   -7.817    0.000   -0.396   -0.396
##     y33|t2            0.963    0.058   16.478    0.000    0.963    0.963
##     y39|t1           -0.425    0.051   -8.360    0.000   -0.425   -0.425
##     y39|t2            0.788    0.055   14.281    0.000    0.788    0.788
##     y65|t1           -0.476    0.051   -9.289    0.000   -0.476   -0.476
##     y65|t2            1.067    0.061   17.528    0.000    1.067    1.067
##     y34|t1           -0.587    0.052  -11.208    0.000   -0.587   -0.587
##     y34|t2            1.014    0.060   17.013    0.000    1.014    1.014
##     y36|t1           -0.392    0.051   -7.739    0.000   -0.392   -0.392
##     y36|t2            1.020    0.060   17.078    0.000    1.020    1.020
##     y56|t1            0.046    0.049    0.941    0.347    0.046    0.046
##     y56|t2            1.152    0.063   18.256    0.000    1.152    1.152
##     y5|t1             0.314    0.050    6.261    0.000    0.314    0.314
##     y5|t2             1.542    0.078   19.862    0.000    1.542    1.542
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .y12               0.564                               0.564    0.564
##    .y26               0.569                               0.569    0.569
##    .y8                0.489                               0.489    0.489
##    .y1                0.601                               0.601    0.601
##    .y17               0.555                               0.555    0.555
##    .y20               0.512                               0.512    0.512
##    .y10               0.662                               0.662    0.662
##    .y47               0.619                               0.619    0.619
##    .y48               0.570                               0.570    0.570
##    .y60               0.678                               0.678    0.678
##    .y55               0.672                               0.672    0.672
##    .y6                0.753                               0.753    0.753
##    .y7                0.595                               0.595    0.595
##    .y57               0.720                               0.720    0.720
##    .y21               0.503                               0.503    0.503
##    .y23               0.525                               0.525    0.525
##    .y19               0.514                               0.514    0.514
##    .y52               0.583                               0.583    0.583
##    .y28               0.567                               0.567    0.567
##    .y3                0.543                               0.543    0.543
##    .y4                0.488                               0.488    0.488
##    .y50               0.633                               0.633    0.633
##    .y45               0.506                               0.506    0.506
##    .y24               0.617                               0.617    0.617
##    .y25               0.571                               0.571    0.571
##    .y22               0.681                               0.681    0.681
##    .y18               0.622                               0.622    0.622
##    .y54               0.719                               0.719    0.719
##    .y59               0.572                               0.572    0.572
##    .y14               0.588                               0.588    0.588
##    .y42               0.677                               0.677    0.677
##    .y16               0.383                               0.383    0.383
##    .y11               0.709                               0.709    0.709
##    .y53               0.637                               0.637    0.637
##    .y58               0.803                               0.803    0.803
##    .y32               0.703                               0.703    0.703
##    .y30               0.864                               0.864    0.864
##    .y41               0.796                               0.796    0.796
##    .y31               0.631                               0.631    0.631
##    .y29               0.859                               0.859    0.859
##    .y35               0.637                               0.637    0.637
##    .y38               0.683                               0.683    0.683
##    .y37               0.539                               0.539    0.539
##    .y2                0.633                               0.633    0.633
##    .y40               0.733                               0.733    0.733
##    .y13               0.664                               0.664    0.664
##    .y46               0.461                               0.461    0.461
##    .y43               0.712                               0.712    0.712
##    .y62               0.624                               0.624    0.624
##    .y44               0.544                               0.544    0.544
##    .y9                0.751                               0.751    0.751
##    .y27               0.493                               0.493    0.493
##    .y33               0.875                               0.875    0.875
##    .y39               0.828                               0.828    0.828
##    .y65               0.809                               0.809    0.809
##    .y34               0.701                               0.701    0.701
##    .y36               0.750                               0.750    0.750
##    .y56               0.790                               0.790    0.790
##    .y5                0.599                               0.599    0.599
##     metacog1          0.436    0.041   10.744    0.000    1.000    1.000
##     regulacao         0.497    0.033   14.864    0.000    1.000    1.000
##     metacog2          0.136    0.033    4.072    0.000    1.000    1.000
## 
## Scales y*:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     y12               1.000                               1.000    1.000
##     y26               1.000                               1.000    1.000
##     y8                1.000                               1.000    1.000
##     y1                1.000                               1.000    1.000
##     y17               1.000                               1.000    1.000
##     y20               1.000                               1.000    1.000
##     y10               1.000                               1.000    1.000
##     y47               1.000                               1.000    1.000
##     y48               1.000                               1.000    1.000
##     y60               1.000                               1.000    1.000
##     y55               1.000                               1.000    1.000
##     y6                1.000                               1.000    1.000
##     y7                1.000                               1.000    1.000
##     y57               1.000                               1.000    1.000
##     y21               1.000                               1.000    1.000
##     y23               1.000                               1.000    1.000
##     y19               1.000                               1.000    1.000
##     y52               1.000                               1.000    1.000
##     y28               1.000                               1.000    1.000
##     y3                1.000                               1.000    1.000
##     y4                1.000                               1.000    1.000
##     y50               1.000                               1.000    1.000
##     y45               1.000                               1.000    1.000
##     y24               1.000                               1.000    1.000
##     y25               1.000                               1.000    1.000
##     y22               1.000                               1.000    1.000
##     y18               1.000                               1.000    1.000
##     y54               1.000                               1.000    1.000
##     y59               1.000                               1.000    1.000
##     y14               1.000                               1.000    1.000
##     y42               1.000                               1.000    1.000
##     y16               1.000                               1.000    1.000
##     y11               1.000                               1.000    1.000
##     y53               1.000                               1.000    1.000
##     y58               1.000                               1.000    1.000
##     y32               1.000                               1.000    1.000
##     y30               1.000                               1.000    1.000
##     y41               1.000                               1.000    1.000
##     y31               1.000                               1.000    1.000
##     y29               1.000                               1.000    1.000
##     y35               1.000                               1.000    1.000
##     y38               1.000                               1.000    1.000
##     y37               1.000                               1.000    1.000
##     y2                1.000                               1.000    1.000
##     y40               1.000                               1.000    1.000
##     y13               1.000                               1.000    1.000
##     y46               1.000                               1.000    1.000
##     y43               1.000                               1.000    1.000
##     y62               1.000                               1.000    1.000
##     y44               1.000                               1.000    1.000
##     y9                1.000                               1.000    1.000
##     y27               1.000                               1.000    1.000
##     y33               1.000                               1.000    1.000
##     y39               1.000                               1.000    1.000
##     y65               1.000                               1.000    1.000
##     y34               1.000                               1.000    1.000
##     y36               1.000                               1.000    1.000
##     y56               1.000                               1.000    1.000
##     y5                1.000                               1.000    1.000

Inicialmente, o X2 foi de 3716.879, com 1649 de graus de liberdade e p valor significativo. O ideal é que o P-valor não seja significativo. No entanto, é bastante consolidado na literatura que o X2 é influenciado pelo tamanho da amostra. Quão maior a amostra, menor é o valor de P.

Em seguida, o CFI foi de 0.908 e o TLI de 0.898. Até o momento, estes resultados evidenciam marginalmente a adequação do modelo. Já o RMSEA foi de 0.044, com intervalo de confiança entre 0.042 e 0.046. A hipótese nula de que o P-valor é menor ou igual a 0.05 não foi rejeitada (repare que o P-valor foi de 1). Em conjunto, o diagnóstico até aqui apresenta que o modelo encontra-se aceitável.

Para verificar todos os índices, é necessário um comando suplementar:

fitmeasures(cfa_pais, fit.measures = "all")
##                          npar                          fmin 
##                       180.000                         3.545 
##                         chisq                            df 
##                      4607.852                      1649.000 
##                        pvalue                  chisq.scaled 
##                         0.000                      3716.879 
##                     df.scaled                 pvalue.scaled 
##                      1649.000                         0.000 
##          chisq.scaling.factor                baseline.chisq 
##                         1.679                     85749.268 
##                   baseline.df               baseline.pvalue 
##                      1711.000                         0.000 
##         baseline.chisq.scaled            baseline.df.scaled 
##                     22817.662                      1711.000 
##        baseline.pvalue.scaled baseline.chisq.scaling.factor 
##                         0.000                         3.982 
##                           cfi                           tli 
##                         0.965                         0.963 
##                          nnfi                           rfi 
##                         0.963                         0.944 
##                           nfi                          pnfi 
##                         0.946                         0.912 
##                           ifi                           rni 
##                         0.965                         0.965 
##                    cfi.scaled                    tli.scaled 
##                         0.902                         0.898 
##                    cfi.robust                    tli.robust 
##                            NA                            NA 
##                   nnfi.scaled                   nnfi.robust 
##                         0.898                            NA 
##                    rfi.scaled                    nfi.scaled 
##                         0.831                         0.837 
##                    ifi.scaled                    rni.scaled 
##                         0.902                         0.902 
##                    rni.robust                         rmsea 
##                            NA                         0.053 
##                rmsea.ci.lower                rmsea.ci.upper 
##                         0.051                         0.054 
##                  rmsea.pvalue                  rmsea.scaled 
##                         0.009                         0.044 
##         rmsea.ci.lower.scaled         rmsea.ci.upper.scaled 
##                         0.042                         0.046 
##           rmsea.pvalue.scaled                  rmsea.robust 
##                         1.000                            NA 
##         rmsea.ci.lower.robust         rmsea.ci.upper.robust 
##                            NA                            NA 
##           rmsea.pvalue.robust                           rmr 
##                            NA                         0.068 
##                    rmr_nomean                          srmr 
##                         0.069                         0.069 
##                  srmr_bentler           srmr_bentler_nomean 
##                         0.068                         0.069 
##                          crmr                   crmr_nomean 
##                         0.069                         0.070 
##                    srmr_mplus             srmr_mplus_nomean 
##                         0.068                         0.069 
##                         cn_05                         cn_01 
##                       246.719                       252.486 
##                           gfi                          agfi 
##                         0.957                         0.952 
##                          pgfi                           mfi 
##                         0.863                         0.102

Uma vez que tais resultados foram alcançados, é fundamental interpretar os itens e sua relação com fator proposto. Apesar da interpretação ter uma ambiente mais teórico, evidentemente, esta etapa também tem seus critérios. Comumente, vê-se a literatura indicando que apenas os itens com carga fatorial (λ) igual ou acima de 0.3 devem ser interpretados. Tecnicamente, esse valor de corte também serve para verificar a adequação do modelo. Isto posto, agora a carga fatorial dos itens será visualizada.

parameterEstimates(cfa_pais, standardized=TRUE) %>% 
  filter(op == "=~") %>%  #pegar os itens e seus valores
  select('Dimensao'=lhs, item=rhs, B=est, SE=se, Z=z, 'p-valor'=pvalue, Beta=std.all) %>% #organizar o dado e renomear 
  mutate(conteudo = case_when(
    item =="y1"~"Leave everything until the last minute.",
    item =="y2"~"It takes time to understand things.",
    item =="y3"~"Overreacts excessively to little problems.",
    item =="y4"~"Acts without thinking, has difficulty controlling his/her behavior and reactions.",
    item =="y5"~"When speaking, he/she doesn’t finish one subject and moves on to another.",
    item =="y6"~"Always arrives late to appointments or commitments.",
    item =="y7"~"Makes careless mistakes",
    item =="y8"~"Leaves the light on, door open or wet towels on top of the bed, even after being told several times.",
    item =="y9"~"It takes time to understand jokes.",
    item =="y10"~"It takes too long to do tasks such as bathing, changing clothes, and eating.",
    item =="y11"~"Reckless/fearless, gets involved in risky situations.",
    item =="y12"~"Messy, not able to keep his/her room, closet, or desk organized.",
    item =="y13"~"Not able to evaluate if a problem has been solved well.",
    item =="y14"~"Excessively restless, never stops.",
    item =="y16"~"Instructions need to be repeated many times to be obeyed.",
    item =="y17"~"Is lazy.",
    item =="y18"~"Is repetitive, speaks or asks the same things repeatedly.",
    item =="y19"~"Stubborn, everything has to be his/her way, inflexible.",
    item =="y20"~"Forgets to bring homework to school, even if they had done it.",
    item =="y21"~"“Explodes”/gets angry when he/she is contradicted.",
    item =="y22"~"Talks too much.",
    item =="y23"~"Gets angry for no reason.",
    item =="y24"~"He/She becomes upset with changes in plans or new situations to them.",
    item =="y25"~"Interrupts others, doesn’t know how to wait for his/her turn to talk.",
    item =="y26"~"Leaves his/her clothes spread around the house.",
    item =="y27"~"Even when knowing the answer, makes mistakes due to being careless, impulsive, or from a lack of attention.",
    item =="y28"~"Mood changes for no reason.",
    item =="y29"~"Not able to pay attention to movies or cartoons for prolonged periods.",
    item =="y30"~"Can’t pay attention to video games or computer games for a long time.",
    item =="y31"~"Not good at solving problems without help from another person.",
    item =="y32"~"Not able to wait for rewards, prefers to get 5 Reais today (5 Dollars) than wait a week to get 10 Reais (10 Dollars).",
    item =="y33"~"Doesn’t do a final check on his/her tasks or activities to look for possible mistakes.",
    item =="y34"~"Doesn’t think before speaking or acting.",
    item =="y35"~"Doesn’t perceive their own performance very well, leaves an exam thinking it went well, when in fact it didn’t.",
    item =="y36"~"Doesn’t notice that his/her behavior is bothering other people.",
    item =="y37"~"Doesn’t finish what they start and quits soon after encountering any difficulty.",
    item =="y38"~"Doesn’t know how to act/overcome new situations or when confronting a problem.",
    item =="y39"~"Doesn’t know how to keep a secret.",
    item =="y40"~"Doesn’t have a good notion of the time necessary to perform a determined task.",
    item =="y41"~"Doesn’t have creativity to solve day-to-day problems.",
    item =="y42"~"Doesn’t tolerate frustrations, doesn’t accept when something he/she wants goes wrong or doesn’t work.",
    item =="y43"~"Needs help from an adult to finish an activity.",
    item =="y44"~"Needs a “push” to start an activity, someone to take initiative for him/her.",
    item =="y45"~"Loses his/her control easier than others.",
    item =="y46"~"Misses deadlines to deliver homework or meet other commitments.",
    item =="y47"~"Loses their belongings or forgets where they put them.",
    item =="y48"~"When asked to go do something, he/she forgets what to do.",
    item =="y50"~"Wants to have fun and get attention from others at all times.",
    item =="y52"~"Resists accepting an alternative way to solve a problem, isn’t flexible.",
    item =="y53"~"Focuses on unimportant details and does not perceive “the big picture.”",
    item =="y54"~"Gets frustrated and cries easily.",
    item =="y55"~"If you ask him/her to get three things from someplace, they will forget to bring one of them.",
    item =="y56"~"If you make plans to pick them up at a certain time, they are never ready at the scheduled time.",
    item =="y57"~"Their notebooks, agendas and binders are always disorganized.",
    item =="y58"~"His/her moments of anger and crying are intense but end quickly.",
    item =="y59"~"He/she has difficulty waiting their turn.",
    item =="y60"~"Has difficulty getting ready for school on time and ends up being late if someone isn’t pushing them to get ready.",
    item =="y62"~"Has difficulty staying focused on homework and in the classroom.",
    item =="y65"~"Understands things very literally, has difficulty understanding expressions with double/idiomatic meanings.")) %>% 
  arrange(Dimensao,desc(Beta)) %>% #organizar do maior pro menor
  kable(.,digits = 3, format="html") %>% #apresentar
  kable_styling(position = "center", full_width = F, bootstrap_options = "striped")
Dimensao item B SE Z p-valor Beta conteudo
metacog1 y8 1.082 0.062 17.322 0 0.715 Leaves the light on, door open or wet towels on top of the bed, even after being told several times.
metacog1 y20 1.058 0.071 14.913 0 0.699 Forgets to bring homework to school, even if they had done it.
metacog1 y17 1.011 0.062 16.321 0 0.667 Is lazy.
metacog1 y12 1.000 0.000 NA NA 0.660 Messy, not able to keep his/her room, closet, or desk organized.
metacog1 y26 0.994 0.048 20.628 0 0.656 Leaves his/her clothes spread around the house.
metacog1 y48 0.993 0.066 14.950 0 0.655 When asked to go do something, he/she forgets what to do.
metacog1 y7 0.964 0.071 13.652 0 0.637 Makes careless mistakes
metacog1 y1 0.957 0.065 14.832 0 0.632 Leave everything until the last minute.
metacog1 y47 0.935 0.061 15.245 0 0.617 Loses their belongings or forgets where they put them.
metacog1 y10 0.880 0.065 13.489 0 0.581 It takes too long to do tasks such as bathing, changing clothes, and eating.
metacog1 y55 0.868 0.063 13.860 0 0.573 If you ask him/her to get three things from someplace, they will forget to bring one of them.
metacog1 y60 0.860 0.064 13.418 0 0.568 Has difficulty getting ready for school on time and ends up being late if someone isn’t pushing them to get ready.
metacog1 y57 0.802 0.069 11.685 0 0.529 Their notebooks, agendas and binders are always disorganized.
metacog1 y6 0.752 0.080 9.349 0 0.497 Always arrives late to appointments or commitments.
metacog2 y46 1.988 0.262 7.584 0 0.734 Misses deadlines to deliver homework or meet other commitments.
metacog2 y27 1.928 0.251 7.671 0 0.712 Even when knowing the answer, makes mistakes due to being careless, impulsive, or from a lack of attention.
metacog2 y37 1.838 0.240 7.668 0 0.679 Doesn’t finish what they start and quits soon after encountering any difficulty.
metacog2 y44 1.829 0.243 7.529 0 0.675 Needs a “push” to start an activity, someone to take initiative for him/her.
metacog2 y5 1.715 0.219 7.831 0 0.633 When speaking, he/she doesn’t finish one subject and moves on to another.
metacog2 y62 1.662 0.225 7.385 0 0.613 Has difficulty staying focused on homework and in the classroom.
metacog2 y31 1.645 0.216 7.631 0 0.607 Not good at solving problems without help from another person.
metacog2 y2 1.641 0.226 7.256 0 0.606 It takes time to understand things.
metacog2 y35 1.631 0.213 7.641 0 0.602 Doesn’t perceive their own performance very well, leaves an exam thinking it went well, when in fact it didn’t.
metacog2 y13 1.569 0.226 6.939 0 0.579 Not able to evaluate if a problem has been solved well.
metacog2 y38 1.525 0.215 7.092 0 0.563 Doesn’t know how to act/overcome new situations or when confronting a problem.
metacog2 y34 1.481 0.200 7.418 0 0.547 Doesn’t think before speaking or acting.
metacog2 y43 1.455 0.202 7.207 0 0.537 Needs help from an adult to finish an activity.
metacog2 y40 1.399 0.199 7.038 0 0.517 Doesn’t have a good notion of the time necessary to perform a determined task.
metacog2 y36 1.355 0.184 7.374 0 0.500 Doesn’t notice that his/her behavior is bothering other people.
metacog2 y9 1.352 0.194 6.963 0 0.499 It takes time to understand jokes.
metacog2 y56 1.241 0.189 6.565 0 0.458 If you make plans to pick them up at a certain time, they are never ready at the scheduled time.
metacog2 y41 1.225 0.182 6.727 0 0.452 Doesn’t have creativity to solve day-to-day problems.
metacog2 y65 1.183 0.181 6.530 0 0.437 Understands things very literally, has difficulty understanding expressions with double/idiomatic meanings.
metacog2 y39 1.125 0.175 6.415 0 0.415 Doesn’t know how to keep a secret.
metacog2 y29 1.017 0.121 8.433 0 0.376 Not able to pay attention to movies or cartoons for prolonged periods.
metacog2 y30 1.000 0.000 NA NA 0.369 Can’t pay attention to video games or computer games for a long time.
metacog2 y33 0.959 0.153 6.270 0 0.354 Doesn’t do a final check on his/her tasks or activities to look for possible mistakes.
regulacao y16 1.114 0.049 22.936 0 0.785 Instructions need to be repeated many times to be obeyed.
regulacao y4 1.016 0.048 21.356 0 0.716 Acts without thinking, has difficulty controlling his/her behavior and reactions.
regulacao y21 1.000 0.000 NA NA 0.705 “Explodes”/gets angry when he/she is contradicted.
regulacao y45 0.997 0.047 21.320 0 0.703 Loses his/her control easier than others.
regulacao y19 0.989 0.043 23.012 0 0.697 Stubborn, everything has to be his/her way, inflexible.
regulacao y23 0.978 0.044 22.380 0 0.690 Gets angry for no reason.
regulacao y3 0.959 0.047 20.243 0 0.676 Overreacts excessively to little problems.
regulacao y28 0.934 0.049 19.191 0 0.658 Mood changes for no reason.
regulacao y25 0.929 0.051 18.108 0 0.655 Interrupts others, doesn’t know how to wait for his/her turn to talk.
regulacao y59 0.928 0.047 19.738 0 0.654 He/she has difficulty waiting their turn.
regulacao y52 0.916 0.043 21.229 0 0.646 Resists accepting an alternative way to solve a problem, isn’t flexible.
regulacao y14 0.911 0.049 18.743 0 0.642 Excessively restless, never stops.
regulacao y24 0.878 0.046 19.047 0 0.619 He/She becomes upset with changes in plans or new situations to them.
regulacao y18 0.873 0.051 16.998 0 0.615 Is repetitive, speaks or asks the same things repeatedly.
regulacao y50 0.860 0.048 17.879 0 0.606 Wants to have fun and get attention from others at all times.
regulacao y53 0.855 0.055 15.677 0 0.603 Focuses on unimportant details and does not perceive “the big picture.”
regulacao y42 0.806 0.049 16.379 0 0.568 Doesn’t tolerate frustrations, doesn’t accept when something he/she wants goes wrong or doesn’t work.
regulacao y22 0.802 0.051 15.802 0 0.565 Talks too much.
regulacao y32 0.773 0.055 14.036 0 0.545 Not able to wait for rewards, prefers to get 5 Reais today (5 Dollars) than wait a week to get 10 Reais (10 Dollars).
regulacao y11 0.766 0.058 13.157 0 0.540 Reckless/fearless, gets involved in risky situations.
regulacao y54 0.753 0.053 14.254 0 0.530 Gets frustrated and cries easily.
regulacao y58 0.630 0.056 11.221 0 0.444 His/her moments of anger and crying are intense but end quickly.

Apesar de tabelas serem informativas, análises fatoriais se benefiam bastante da apresentação gráfica dos resultados. O pacote semplot é bastante versatil para esta finalidade e permite uma grande customização. Em outras palavras, o gráfico abaixo poderá ser alterado para que ele se torne mais facilmente compreendido à apresentação dos resultados.

library(semPlot)
## Registered S3 methods overwritten by 'BDgraph':
##   method    from
##   plot.sim  lava
##   print.sim lava
## Registered S3 methods overwritten by 'huge':
##   method    from   
##   plot.sim  BDgraph
##   print.sim BDgraph
semPaths(cfa_pais, title = FALSE, 
         label.cex = 2, #font - variables
         sizeLat = 7,  #font latent
         sizeMan = 4, #font - variables
         edge.label.cex = 1.2, #lambda font
         minimum = 0.1, 
         sizeInt = 0.8, 
         mar = c(1, 1, 1, 1), residuals = FALSE, 
         intercepts = FALSE, thresholds = FALSE, 
         layout = "circle2", 
         "std", 
         cut = 0.3,
         "hide", #hide latent estimates
         posCol = c("black", "dimgray"), #color of paths
         color = list(lat = rgb(173, 216, 230, maxColorValue = 255), 
                      man = rgb(240, 248, 255, maxColorValue = 255)))

Nesse caso, com adequação das evidências sobre a estrutura interna do instrumento, é possível também retornar aos indicadores previamente descritos sobre a fidedignidade (precisão, consistência). No momento anterior, foi visto que o estimador mais utilizado (Coeficiente Alfa) havia sido utilizado considerando que as variáveis eram contínuas e utilizando todo banco de dados. Uma vez que assumimos que as variáveis (os itens do instrumento) são categóricas e também derivamos fatores específicos a cada um dos itens, é importante recalcular os estimadores de fidedignidade de maneira a contemplar estas soluções alcançadas. Existem maneiras diversas de se fazer isso. No entanto, o pacote semtools tem uma função já pré-pronta com esta finalidade.

library(semTools)
## 
## ###############################################################################
## This is semTools 0.5-2.907
## All users of R (or SEM) are invited to submit functions or ideas for functions.
## ###############################################################################
## 
## Attaching package: 'semTools'
## The following object is masked from 'package:psych':
## 
##     skew
## The following object is masked from 'package:readr':
## 
##     clipboard
reliability(cfa_pais)
## The alpha and the average variance extracted are calculated from polychoric (polyserial) correlations, not from Pearson correlations.
##         metacog1 regulacao  metacog2     total
## alpha  0.8910086 0.9323082 0.9021495 0.9588834
## omega  0.7251088 0.8324708 0.7623360 0.8977993
## omega2 0.7251088 0.8324708 0.7623360 0.8977993
## omega3 0.7230065 0.8375541 0.7737475 0.8825007
## avevar 0.3886851 0.4026068 0.3052974 0.3613692

Pragmaticamente, esta etapa encerraria uma parte das análises psicométricas relacionadas à modelagem deste instrumento. A solução encontrada passa tanto pelos principais critérios estatísticos como tem sentido teórico (um fator de funções executivas quentes e dois fatores reunindo itens específicos associados às funções executivas frias, sendo um mais sofisticado do que o outro).

Eventualmente, existem mais análises psicométricas que podem (e, as vezes, devem ser feitas) antes de falar sobre evidências de validade de um instrumento. Por exemplo, um possível interesse do pesquisador pode ser a utilização dos resultados obtidos pelo processo de resposta ao instrumento para comparação de grupos a partir da criação de resultados / escores derivados dos resultados fatoriais (fscores). Se esta é a necessidade, torna-se fundamental investigar aspectos da invariância do instrumento, bem como se existe um funcionamento diferencial dos items (DIF). O DIF investiga se a função de resposta ao item é diferente para sujeitos de diferentes grupos que apresentam o mesmo nível da variável latente. Caso um instrumento apresente DIF, a comparação entre participantes/grupos torna-se mais difícil e é necessário ou excluir os itens com DIF ou realizar equiparação de escores. Posto isso, após tais análises feitas, a utilização do instrumento e a tomada de decisão com base nos resultados obtidos é mais segura.

Além disso, a realidade obtida neste instrumento não é necessariamente a mais frequente em Psicometria. É importante atentar que nem todos os instrumentos apresentam indicares iniciais bem comportados. Com bastante frequência, valores do qui-quadrado, RMSEA, CFI e TLI indicam que a estrutura testada tem pouca adequação empírica. Uma vez que isso ocorra, é necessário realizar ajustes. Frequentemente, isso é implementado pela análise dos ‘índices de modificação’ e, em alguns casos, pelo retorno à etapa exploratória (EFA) do instrumento, conforme recomendado pela Linda Muthen (aqui)[http://www.statmodel.com/discussion/messages/9/2605.html?1335209700] ou por um trabalh nosso publicado em 2019, que pode ser acessado em (DOI: 10.1590/1413-82712019240304). Em relação aos índices de modificação, é prudente atentar que a literatura é bastante conflitante em relação à aceitação de ajustes post-hoc de modelos psicométricos e eu me incluo nesta crítica.

No entanto, uma vez que o propósito deste handout é ser pedagógico, é necessário saber solicitar os índices de modificação do instrumento. Isso também é feito pelo ‘summary’ do lavaan, abaixo exposto.

modificationIndices(cfa_pais) %>% 
  select(lhs, op, rhs, mi) %>% 
  arrange(lhs,desc(mi)) %>% #organizar do maior pro menor 
  head(10) %>% # <- apresentar apenas 10 resultados, pode ser mudado!
  kable(.,digits = 3, format="html") %>% #apresentar
  kable_styling(position = "center", full_width = F, bootstrap_options = "striped")
lhs op rhs mi
metacog1 =~ y16 148.985
metacog1 =~ y46 105.903
metacog1 =~ y21 58.139
metacog1 =~ y41 53.268
metacog1 =~ y23 33.183
metacog1 =~ y31 27.737
metacog1 =~ y38 27.529
metacog1 =~ y30 27.382
metacog1 =~ y27 26.396
metacog1 =~ y52 22.903

Repare que todas as sugestões vem acompanhadas de uma métrica. Quando os autores decidem implementar as sugestões, é sugerido que apenas os MI > 11 sejam feitos, o que infica p < 0.001. Por sua vez, MI > 4 indicam p < 0.05 e é um critério mais leniente. A métrica do MI é relacionada ao Qui-quadrado do modelo. Por exemplo, especificamente em relação às sugestões do conjunto de dados que está sob análise, repare que o item 16 (“É preciso repetir várias vezes para obedecer a ordens”) pode também ser adicionao ao fator “Metacognição” e se fizer isso, o qui-quadrado cairá 148.985 (Sairá de 4607.852 para cerca de 4458.867). Essa sugestão já havia já aparecido na etapa de análise exploratória mas, como previamente exposto, não será feita.

Isto posto, as principais etapas da análise fatorial (exploratória e confirmatória) foram abordadas.