## ---- echo = FALSE, message = FALSE, output = 'hide'--------------------------
library(knitr)
library(kableExtra)
library(PROsetta)
library(dplyr)

## ----loadData, echo = FALSE---------------------------------------------------
d <- data_dep

## ----cfg, results = "hide", message = FALSE, eval = FALSE---------------------
#  fp <- system.file("data-raw", package = "PROsetta")
#  d <- loadData(
#    response  = "dat_DeCESD_v2.csv",
#    itemmap   = "imap_DeCESD.csv",
#    anchor    = "anchor_DeCESD.csv",
#    input_dir = fp)

## ---- eval = FALSE------------------------------------------------------------
#  file.edit(system.file("data-raw", "dat_DeCESD_v2.csv", package = "PROsetta"))

## ---- eval = FALSE------------------------------------------------------------
#  file.edit(system.file("data-raw", "imap_DeCESD.csv", package = "PROsetta"))

## ---- eval = FALSE------------------------------------------------------------
#  file.edit(system.file("data-raw", "anchor_DeCESD.csv", package = "PROsetta"))

## ----freq---------------------------------------------------------------------
freq_table <- runFrequency(d)
head(freq_table)

## ---- fig.align = "center", fig.width = 7, fig.height = 7---------------------
plot(d, scale = "combined", title = "Combined scale")

## ----eval = FALSE-------------------------------------------------------------
#  plot(d, scale = 1, title = "Scale 1") # not run
#  plot(d, scale = 2, title = "Scale 2") # not run

## ----desc---------------------------------------------------------------------
desc_table <- runDescriptive(d)
head(desc_table)

## ----alpha, cache = TRUE------------------------------------------------------
classical_table <- runClassical(d)
summary(classical_table$alpha$combined)

## ----alpha2, cache = TRUE, eval = FALSE---------------------------------------
#  classical_table <- runClassical(d, scalewise = TRUE)
#  classical_table$alpha$combined # alpha values for combined scale
#  classical_table$alpha$`1`      # alpha values for each scale, created when scalewise = TRUE
#  classical_table$alpha$`2`      # alpha values for each scale, created when scalewise = TRUE

## ----omega, cache = TRUE, eval = FALSE----------------------------------------
#  classical_table <- runClassical(d, scalewise = TRUE, omega = TRUE)
#  classical_table$omega$combined # omega values for combined scale
#  classical_table$omega$`1`      # omega values for each scale, created when scalewise = TRUE
#  classical_table$omega$`2`      # omega values for each scale, created when scalewise = TRUE

## ----eval = FALSE-------------------------------------------------------------
#  classical_table <- runClassical(d, scalewise = TRUE, omega = TRUE, nfactors = 5) # not run

## ----cfa, cache = FALSE, results = 'hide'-------------------------------------
out_cfa <- runCFA(d, scalewise = TRUE)

## ---- eval = FALSE------------------------------------------------------------
#  out_cfa <- runCFA(d, scalewise = TRUE, std.lv = TRUE) # not run

## -----------------------------------------------------------------------------
out_cfa$combined
out_cfa$`1`
out_cfa$`2`

## -----------------------------------------------------------------------------
lavaan::summary(out_cfa$combined, fit.measures = TRUE, standardized = TRUE, estimates = FALSE)

## ---- eval = FALSE------------------------------------------------------------
#  lavaan::summary(out_cfa$`1`, fit.measures = TRUE, standardized = TRUE, estimates = FALSE) # not run
#  lavaan::summary(out_cfa$`2`, fit.measures = TRUE, standardized = TRUE, estimates = FALSE) # not run

## ----calib, cache = TRUE, results = 'hide', error = TRUE, message = FALSE-----
out_calib <- runCalibration(d, technical = list(NCYCLES = 1000))

## ----calib2, cache = TRUE, results = 'hide', error = TRUE, message = FALSE----
out_calib <- runCalibration(d, technical = list(NCYCLES = 10))

## ----calib3, cache = TRUE, results = 'hide', error = TRUE, message = FALSE----
out_calib <- runCalibration(d, fixedpar = TRUE)

## ----mirt_coef, cache = TRUE--------------------------------------------------
mirt::coef(out_calib, IRTpars = TRUE, simplify = TRUE)

## ----mirt_plot, cache = TRUE, eval = FALSE, results = 'hide'------------------
#  mirt::itemfit(out_calib, empirical.plot = 1)
#  mirt::itemplot(out_calib, item = 1, type = "info")
#  mirt::itemfit(out_calib, "S_X2", na.rm = TRUE)

## ---- fig.align = 'center', fig.width = 7, fig.height = 7---------------------
plotInfo(
  out_calib, d,
  scale_label = c("PROMIS Depression", "CES-D", "Combined"),
  color = c("blue", "red", "black"),
  lty = c(1, 2, 3))

## ----fixedpar, cache = TRUE, results = 'hide', message = FALSE----------------
out_link_fixedpar <- runLinking(d, method = "FIXEDPAR")

## -----------------------------------------------------------------------------
out_link_fixedpar$ipar_linked

## ----sl, cache = TRUE, results = 'hide', error = TRUE, message = FALSE--------
out_link_sl <- runLinking(d, method = "SL", technical = list(NCYCLES = 1000))
out_link_sl

## -----------------------------------------------------------------------------
out_link_sl$ipar_linked

## -----------------------------------------------------------------------------
out_link_sl$constants

## -----------------------------------------------------------------------------
rsss_fixedpar <- runRSSS(d, out_link_fixedpar)
rsss_sl       <- runRSSS(d, out_link_sl)
round(rsss_fixedpar$`2`, 3)

## ----eqp_raw, cache = TRUE, results = 'hide', message = FALSE-----------------
out_equate <- runEquateObserved(
  d, scale_from = 2, scale_to = 1,
  eq_type = "equipercentile", smooth = "loglinear")

## -----------------------------------------------------------------------------
out_equate$concordance

## ----eqp_dir, cache = TRUE, results = 'hide', message = FALSE-----------------
out_equate_tscore <- runEquateObserved(
  d, scale_from = 2, scale_to = 1,
  type_to = "tscore", rsss = rsss_fixedpar,
  eq_type = "equipercentile", smooth = "loglinear")

## -----------------------------------------------------------------------------
out_equate_tscore$concordance

## ---- fig.align = 'center', fig.width = 7, fig.height = 7---------------------
plot(
  rsss_fixedpar$`2`$raw_2,
  rsss_fixedpar$`2`$tscore,
  xlab = "CES-D Summed Score",
  ylab = "PROMIS Depression T-score",
  type = "l", col = "blue")
lines(
  out_equate_tscore$concordance$raw_2,
  out_equate_tscore$concordance$tscore_1,
  lty = 2, col = "red")
grid()
legend(
  "topleft",
  c("Fixed-Parameter Calibration", "Equipercentile Linking"),
  lty = 1:2, col = c("blue", "red"), bg = "white"
)

## -----------------------------------------------------------------------------
scores <- getScaleSum(d, 2)
head(scores)

## ---- message = FALSE---------------------------------------------------------
eap_promis <- getTheta(d, out_link_fixedpar$ipar_linked, scale = 1)$theta
head(eap_promis)

## -----------------------------------------------------------------------------
t_promis <- data.frame(
  prosettaid = eap_promis$prosettaid,
  t_promis = round(eap_promis$theta_eap * 10 + 50, 1)
)
head(t_promis)

## -----------------------------------------------------------------------------
scores <- merge(scores, t_promis, by = "prosettaid")
head(scores)

## ---- message = FALSE---------------------------------------------------------
eap_cesd <- getTheta(d, out_link_fixedpar$ipar_linked, scale = 2)$theta
t_cesd_pattern <- data.frame(
  prosettaid = eap_cesd$prosettaid,
  t_cesd_pattern = round(eap_cesd$theta_eap * 10 + 50, 1)
)
scores <- merge(scores, t_cesd_pattern, by = "prosettaid")
head(scores)

## ---- message = FALSE---------------------------------------------------------
rsss_eap <- data.frame(
  raw_2 = rsss_fixedpar$`2`$raw_2,
  t_cesd_rsss = round(rsss_fixedpar$`2`$tscore, 1)
)
scores <- merge(scores, rsss_eap, by = "raw_2")
head(scores)

## ---- message = FALSE---------------------------------------------------------
rsss_eqp <- data.frame(
  raw_2 = out_equate_tscore$concordance$raw_2,
  t_cesd_eqp = round(out_equate_tscore$concordance$tscore_1, 1)
)
scores <- merge(scores, rsss_eqp, by = "raw_2")
head(scores)

## -----------------------------------------------------------------------------
# Reference score: IRT pattern scoring of Scale 1
c_pattern <- compareScores(
  scores$t_promis, scores$t_cesd_pattern) ## IRT response pattern EAP to T-score
c_rsss <- compareScores(
  scores$t_promis, scores$t_cesd_rsss)    ## IRT summed score EAP to T-score
c_eqp <- compareScores(
  scores$t_promis, scores$t_cesd_eqp)     ## Equipercentile summed score to T-score

stats           <- rbind(c_pattern, c_rsss, c_eqp)
rownames(stats) <- c("IRT Pattern", "IRT RSSS", "Equipercentile")
stats