This package is a companion R package for the Book ” Basic and Advanced Psychometrics in R” [work in Progress]
This package includes data-frames and some interesting functions to create publication-friendly summary tables for factor analysis, confirmatory factor analysis and item analysis.
You can install the development version of tabledown from GitHub with:
# install.packages("devtools")
::install_github("masiraji/tabledown") devtools
IRT analysis is highly depended on visual representation of the model
parameters. mirt
package provides lots of useful functions
to conduct IRT analysis. tabledown
package offers
ggplot2
based plotting options using mirt
package based model parameters to facilitate the customization of the
plots.
Let’s create a APA publication focused ggplot theme for our plots:
library(ggplot2)
#Creating a custom theme to be used for the plots
=theme_bw()+
apathemetheme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 10),
axis.title.x = element_text(size = 10),
axis.title.y = element_text(size = 10),
plot.title = element_text(size = 10),
legend.text = element_text(size = 10),
legend.title=element_blank(),
axis.line.x = element_line(color='black'),
axis.line.y = element_line(color='black'),
panel.border = element_rect(color = "black",
fill = NA,
size = 1))
#Create a data frame for your IRT analysis
<- tabledown::FFMQ.CFA %>% dplyr::select(item1, item6 , item11 , item15 , item20 , item26 , item31 , item36)
data
#Conduct the IRT analysis using mirt package
<- mirt::mirt(data, model = 1, itemtype = 'graded',
model SE = TRUE, Se.type = 'MHRM',
technical = list(NCYCLES = 10000))
tabledown
offers ggicc
function to create
ggplot2
based Item Characteristic Curve. ggicc
function takes three arguments (a) model: your IRT model (B) item number
(C) Theta range: ggicc
use a symmetric theta range. Theta =
6 will plot the ICC with a theta range of -6 to 6.
<- tabledown::ggicc(model, 2, 6)+apatheme icc
tabledown
offers ggiteminfo
function to
create ggplot2
based item information curve. The arguments
for ggiteminfo
are similar to the arguments
ofggicc
function
<- tabledown::ggiteminfo(model, 2, 6)+apatheme+geom_area()+aes(fill = "#E64B3599")+theme(legend.position = "none") iic
tabledown
also offers ggitestinfo
and
ggitestinfo_se
function to create ggplot2
based test information curve. ggitestinfo_se
will give you
a test information plot with standard error of measurement. The
arguments for ggiteminfo
are similar to the arguments
ofggicc
function
<- tabledown::ggtestinfo_se(data, model)+apatheme+ labs(title = "Test Information Curve")+geom_area(fill = "blue", alpha=.5) tic
Commonly it is very difficult to create a publication friendly table that summaries all necessary information of a factor analysis. This example will help you in that pursuit with the help of fac.tab() function
library(tabledown)
library(tidyverse)
library(psych)
library(papaja)
Load the data from tabledown package
data <- tabledown::Rotter[, 11:31]
Create a correlational matrix to compute factor analysis
correlations <- psych::polychoric(data, correct = 0)
fa.5F.1 <- psych::fa(r=correlations$rho, nfactors = 5, fm= "pa",rotate ="varimax",
residuals = TRUE, SMC = TRUE, n.obs =428)
table <- tabledown::fac.tab(fa.5F.1, .3, complexity = F)
papaja::apa_table(table, caption= "A Beautiful Table describing the Fator analysis Output ")
When reporting the confirmatory factor analysis results, modern psychometrics suggest fitting several possible structural models of the latent construct and reporting the fit indices for them. lavaan package does a fantastic job doing the confirmatory factor analysis. Here we will see how to create a publication friendly summary of fit indices from several fitted models using cfa.tab.multi() function.
{Load required packages}
library(tabledown)
library(tidyverse)
library(lavaan)
library(papaja)
load the data
data <- tabledown::FFMQ.CFA
First CFA model
FF.model.Original <- "Observe =~ item1 + item6 + item11 + item15 +item20 + item26 + item31 + item 36
Describe =~ item2 + item7 + Ritem12 + Ritem16 + Ritem22 + item27 +
item32 + item37
Awareness =~ Ritem5 + Ritem8 + Ritem13 + Ritem18 + Ritem23 + Ritem28 + Ritem34 + Ritem38
Nonjudge =~ Ritem3 + Ritem10 + Ritem14 + Ritem17 + Ritem25 + Ritem30+ Ritem35 + Ritem39
Nonreact =~ item4 + item9 + item19 + item21 + item24 + item29 + item33 "
fit.original <- lavaan::cfa(FF.model.Original, data = data, estimator = "MLR", mimic = "Mplus")
Second CFA Model
FF.model.Cor <- "Observe =~ item1 + item6 + item11 + item15 +item20 + item26 + item31 + item 36
Describe =~ item2 + item7 + item27 + item32 + item37
Awareness =~ Ritem5 + Ritem8 + Ritem13 + Ritem18 + Ritem23 +Ritem28 + Ritem34
Nonjudge =~ Ritem10 + Ritem14 + Ritem25 + Ritem30+ Ritem35
Nonreact =~ item4 + item9 + item19 + item21 + item24 + item29 + item33
Ritem28 ~~ Ritem34
Ritem23 ~~ Ritem34"
fit.Cor <- lavaan::cfa(FF.model.Cor, data = data, estimator = "MLR", mimic = "Mplus")
Third CFA Model
FF.short <- "Observe =~ item36 + item26 +item20 + item11
Describe =~ item2 + item7 + item27 + item32
Awareness =~ Ritem8 + Ritem13 + Ritem23 + Ritem28
Nonjudge =~ Ritem10 + Ritem25 + Ritem30 + Ritem35
Nonreact =~ item9 + item19 + item21 + item24"
fit.short <- lavaan::cfa(FF.short, data = data, estimator = "MLR", mimic = "Mplus")
# Creating Summary table of fit indices from three fitted model (lavaan class objects)
table <- cfa.tab.multi(fit.original, fit.Cor, fit.short, robust = TRUE)
papaja::apa_table(table, caption= "A Beautiful Table describing the Fit Indices of Three Fitted Model ")
In psychometrics conducting item-analysis is very common. psych packages have provided enough tools to run the item analysis smoothly. Here we will create a publication friendly summary table of item analysis with all necessary information using function des.tab()
library(tabledown)
library(tidyverse)
library(psych)
data <- tabledown::Rotter[, 11:31]
table <- des.tab(data) papaja::apa_table(table, caption= "A Beautiful Table Summarizing the Output of Item Analysis ")