## ----echo=FALSE, message=FALSE------------------------------------------------
library(plspm)
options(width = 80)

## ----install_plpsm, eval=FALSE------------------------------------------------
# # installation
# install.packages("plspm")

## ----load_plspm, eval=FALSE---------------------------------------------------
# # load package 'plspm'
# library("plspm")

## ----devel_plspm, eval=FALSE--------------------------------------------------
# # load devtools
# library(devtools)
# 
# # then download 'plspm' using 'install_github'
# install_github("gastonstat/plspm")
# 
# # finally, load it with library()
# library(plspm)

## ----load_russett-------------------------------------------------------------
# load data set
data(russett)

## ----head_russett, size='small'-----------------------------------------------
# take a look at the data
head(russett)

## ----rus_path_diagram, fig.width=6, fig.height=4, out.width='.6\\linewidth', out.height='.4\\linewidth', fig.align='center', fig.pos='h', fig.cap='Path diagram of the inner model', echo=FALSE----
# path matrix
AGRIN = c(0, 0, 0)
INDEV = c(0, 0, 0)
POLINS = c(1, 1, 0)
rus_path = rbind(AGRIN, INDEV, POLINS)

# plot the path matrix
#op = par(mar = rep(0,4))
#innerplot(rus_path)
#par(op)

## ----path_matrix--------------------------------------------------------------
# path matrix (inner model realtionships)
AGRIN = c(0, 0, 0)
INDEV = c(0, 0, 0)
POLINS = c(1, 1, 0)
rus_path = rbind(AGRIN, INDEV, POLINS)

# add optional column names
colnames(rus_path) = rownames(rus_path)

# how does it look like?
rus_path

## ----innerplot_rus_path, fig.width=5, fig.height=3.5, out.width='.65\\linewidth', out.height='.4\\linewidth', fig.align='center', fig.pos='h', echo=c(1,3), eval=TRUE----
# plot the path matrix
op = par(mar = rep(0,4))
innerplot(rus_path)
par(op)

## ----rus_blocks---------------------------------------------------------------
# list indicating what variables are associated with what latent variables
rus_blocks = list(1:3, 4:5, 6:11)

## ----rus_blocks_str, tidy=FALSE-----------------------------------------------
# list indicating what variables are associated with what latent variables
rus_blocks = list(
  c("gini", "farm", "rent"),
  c("gnpr", "labo"),
  c("inst", "ecks", "death", "demostab", "demoinst", "dictator"))

## ----rus_modes----------------------------------------------------------------
# all latent variables are measured in a reflective way
rus_modes = rep("A", 3)

## ----plspm_russet-------------------------------------------------------------
# run plspm analysis
rus_pls = plspm(russett, rus_path, rus_blocks, modes = rus_modes) 

# what's in rus_pls?
rus_pls

## ----path_coefs---------------------------------------------------------------
# path coefficients
rus_pls$path_coefs

## ----inner_model--------------------------------------------------------------
# inner model
rus_pls$inner_model

## ----apply_summary_ruspls, eval=FALSE-----------------------------------------
# # summarized results
# summary(rus_pls)

## ----rus_pls_innerplot, fig.width=4.5, fig.height=3, out.width='.7\\linewidth', out.height='.4\\linewidth', fig.align='center', fig.pos='h', echo=c(1,3), eval=TRUE----
# plot the results (inner model)
op = par(mar = rep(0, 4))
plot(rus_pls)
par(op)

## ----rus_pls_loadings_plot, fig.width=6, fig.height=2.5, out.width='1\\linewidth', out.height='.45\\linewidth', fig.align='center', fig.pos='h', echo=c(1,3), eval=TRUE----
# plot the loadings of the outer model
op = par(mar = rep(0, 4))
plot(rus_pls, what = "loadings", arr.width = 0.1)
par(op)

## ----rus_pls_weights_plot, fig.width=6, fig.height=2.5, out.width='1\\linewidth', out.height='.45\\linewidth', fig.align='center', fig.pos='h', echo=c(1,3), eval=TRUE----
# plot the weights of the outer model
op = par(mar = rep(0, 4))
plot(rus_pls, what = "weights", arr.width = 0.1)
par(op)

## ----rus_pls_xloads_plot, eval=FALSE, tidy=FALSE------------------------------
# # load ggplot2 and reshape
# library(ggplot2)
# library(reshape)
# 
# # reshape crossloadings data.frame for ggplot
# xloads = melt(rus_pls$crossloadings, id.vars = c("name", "block"),
#               variable_name = "LV")
# 
# # bar-charts of crossloadings by block
# ggplot(data = xloads,
#        aes(x = name, y = value, fill = block)) +
#   geom_hline(yintercept = 0, color = "gray75") +
#   geom_hline(yintercept = c(-0.5, 0.5), color = "gray70", linetype = 2) +
#   geom_bar(stat = 'identity', position = 'dodge') +
#   facet_wrap(block ~ LV) +
#   theme(axis.text.x = element_text(angle = 90),
#         line = element_blank()) +
#   ggtitle("Crossloadings")

## ----rus_pls_xloads_ggplot, fig.width=8, fig.height=6, out.width='1\\linewidth', out.height='.75\\linewidth', fig.align='center', fig.pos='h', echo=FALSE, message=FALSE----
# load ggplot2 and reshape
library(ggplot2)
library(reshape)

# reshape crossloadings data.frame for ggplot
xloads = melt(rus_pls$crossloadings, id.vars = c("name", "block"),
              variable_name = "LV")

# bar-charts of crossloadings by block
ggplot(data = xloads,
       aes(x = name, y = value, fill = block)) +
  geom_hline(yintercept = 0, color = "gray75") + 
  geom_hline(yintercept = c(-0.5, 0.5), color = "gray70", linetype = 2) +   
  geom_bar(stat = 'identity', position = 'dodge') +
  facet_wrap(block ~ LV) +
  theme(axis.text.x = element_text(angle = 90),
        line = element_blank(),
        plot.title = element_text(size=12)) +
  ggtitle("Crossloadings")

## ----load_russb---------------------------------------------------------------
# load data set
data(russb)

## ----head_russb, size='small'-------------------------------------------------
# take a look at the data
head(russb)

## ----scaling_russb------------------------------------------------------------
# defining the quantification constraints for each manifest variable  
russb_scaling = list(c("num", "num", "ord"),
                    c("ord", "ord"),
                    c("ord", "ord", "ord", "nom"))

# defining the blocks of manifest variables 
russb_blocks = list(
   c("gini", "farm", "rent"),
   c("gnpr", "labo"),
   c("inst", "ecks", "death", "demo"))

## ----echo=FALSE, message=FALSE------------------------------------------------
# path matrix (inner model realtionships)
AGRIN = c(0, 0, 0)
INDEV = c(0, 0, 0)
POLINS = c(1, 1, 0)
rus_path = rbind(AGRIN, INDEV, POLINS)
# add optional column names
colnames(rus_path) = rownames(rus_path)

# all latent variables are measured in a reflective way
rus_modes = rep("A", 3)

## ----russb_nmpls--------------------------------------------------------------
# running the model 
russb_nmpls = plspm(russb, path = rus_path, blocks = russb_blocks,
              scaling = russb_scaling, modes = rus_modes,
              scheme = "CENTROID")

## ----quantivar,  eval=TRUE----------------------------------------------------
head(russb_nmpls$manifests)

## ----quantiplot_agr, fig.width=6, fig.height=2.5, out.width='1\\linewidth', out.height='.45\\linewidth', fig.align='center', fig.pos='h'----
par(mar = rep(0,4))
quantiplot(russb_nmpls, lv = "AGRIN")
par(op)

