---
title: "Confirmatory Factor Analysis"
author: "Statsomat.com"
date: "`r format(Sys.time(), '%d %B %Y')`"
output:
  pdf_document:
    latex_engine: xelatex
    toc: true
    toc_depth: 2
bibliography: ["references.bib"]
params:
  data: NA
  filename: NA
  fencoding: NA
  decimal: NA
  enc_guessed: NA
  vars1: NA
  model: NA
  direction: NA
header-includes:
   - \usepackage{xcolor}
   - \setmainfont[BoldFont=FiraSans-Bold, Extension=.otf]{FiraSans-Regular}
   - \usepackage{booktabs}
   - \usepackage{longtable}
   - \usepackage{float}
---


```{r, dev="cairo_pdf", results="asis", echo = FALSE}
# Check model syntax 
msyntax <- TRUE
model <- params$model
modelsplit <- unlist(strsplit(model, split="\n"))
modelsplit <- gsub(" ", "", modelsplit, fixed = TRUE)
modelsplit <- modelsplit[modelsplit != ""]
for (i in 1:length(modelsplit)){
  if (grepl("=~",modelsplit[i])==FALSE && grepl("~~",modelsplit[i])==FALSE && grepl("~1",modelsplit[i])==FALSE &&
      grepl("#",modelsplit[i])==FALSE){
    cat("Error: Only model lines containing following lavaan model syntax operators are allowed: =\\~,\\~\\~,\\~1", fill=TRUE)
    msyntax <- FALSE
    break
  } 
}
```     


```{r child = 'report_kernel.Rmd', eval=msyntax}
```


```{r include=FALSE}
if (exists("eval5")) eval_code <- eval5 else eval_code <- FALSE
```
  

```{r, results="asis", eval=eval_code, echo=FALSE}
cat("\n# R Packages", fill=TRUE)
cat("To run the code you need to install following R packages:", fill=TRUE)
cat("\\newline ")
cat("R version:", paste0(R.Version()[c("major","minor")], collapse = "."), fill=TRUE)
cat("\\newline ")
cat("Package data.table, version:", paste0(packageVersion("data.table")), fill=TRUE)
cat("\\newline ")
cat("Package corrplot, version:", paste0(packageVersion("corrplot")), fill=TRUE)
cat("\\newline ")
cat("Package knitr, version:", paste0(packageVersion("knitr")), fill=TRUE)
cat("\\newline ")
cat("Package lavaan, version:", paste0(packageVersion("lavaan")), fill=TRUE)
cat("\\newline ")
cat("Package semPlot, version:", paste0(packageVersion("semPlot")), fill=TRUE)
cat("\\newline ")
cat("Package semTools, version:", paste0(packageVersion("semTools")), fill=TRUE)
cat("\\pagebreak")
```


\pagestyle{empty} 


```{r, results="asis", eval=eval_code, echo=FALSE}
cat("\n# R Code ", fill=TRUE)
```


```{r, results="asis", eval=eval_code, echo=FALSE}
cat("\\textcolor{blue}{Instructions ")
cat("\\newline ")  
cat("If not already available, please install R, RStudio and the requiered packages listed on the previous page. Copy the code below, paste it carefully in a new R Script within RStudio. For a seamless copy \\& paste process, open the PDF report in a browser. Change the path to your data in the line} ")
cat("`filepath <- ...` ") 
cat("\\textcolor{blue}{For Windows users, avoid using paths containing spaces. Run the code. Explore the results (numerical results in the Console, plots in the Plots tab). }")
```

<style>
pre.whites {
    background-color: #ffffff !important;
}
</style>

```{whites, eval=FALSE, echo = eval_code}
# Import required libraries
suppressPackageStartupMessages(library(data.table))
suppressPackageStartupMessages(library(knitr))
suppressPackageStartupMessages(library(lavaan))
suppressPackageStartupMessages(library(semPlot))
suppressPackageStartupMessages(library(semTools))
suppressPackageStartupMessages(library(corrplot))
```


```{r, results="asis", eval=eval_code, echo=FALSE}
cat("\\# `Define the path to your data (please remark the forward slash)`")
cat("\\newline ")  
cat("`filepath <-")
cat(paste0("\"C:/",params$filename[1],"\"`"))
```


```{r, results="asis", eval=eval_code, echo=FALSE}
if (params$decimal == "auto"){
  cat("\\# `Upload the data`")
  cat("\\newline ")  
 datainput1 <- fread(params$filename$datapath, header = "auto", sep="auto", dec=".", encoding = "UTF-8", data.table = FALSE, na.strings = "")
  
   # Probably comma as decimal
  colnames <- sapply(datainput1, function(col) is.numeric(col) & Negate(is.integer)(col))
  if (sum(colnames) == 0L){
    cat(paste0("`df <- fread(filepath, header =\"auto\", sep =\"auto\", dec =\",\", encoding =\"UTF-8\", data.table = FALSE, na.strings = \"\")`"))
    
  } else {
    cat(paste0("`df <- fread(filepath, header =\"auto\", sep =\"auto\", dec =\".\", encoding =\"UTF-8\", data.table = FALSE, na.strings = \"\")`"))
  }
  
} else {
  cat("\\# `Upload the data`")
  cat("\\newline ")
  cat(paste0("`df <- fread(filepath, header = \"auto\", sep =\"auto\", dec = \"", params$decimal,"\", encoding =  \"UTF-8\", data.table = FALSE, na.strings = \"\")`"))
  
}
```

```{r child = 'report_code_common.Rmd', eval=eval_code}
```
