Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
set.seed(12345)
library(ggforce)
library(kableExtra)
library(ggplot2)
library(knitr)
## ----setup--------------------------------------------------------------------
library(circumplex)
## ----model, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
angles <- c(90, 135, 180, 225, 270, 315, 360, 45)
alabel <- c("PA", "BC", "DE", "FG", "HI", "JK", "LM", "NO")
# Create plot ------------------------------------------------------------------
ggplot2::ggplot() +
# Require plot to be square and remove default styling
ggplot2::coord_fixed() +
ggplot2::theme_void() +
# Expand the axes multiplicatively to fit the labels
ggplot2::scale_x_continuous(expand = c(0.10, 0)) +
ggplot2::scale_y_continuous(expand = c(0.10, 0)) +
# Draw line segments corresponding to the octants
ggplot2::geom_segment(
ggplot2::aes(
x = 0,
y = 0,
xend = 5 * cos(angles[c(1, 3, 5, 7)] * pi / 180),
yend = 5 * sin(angles[c(1, 3, 5, 7)] * pi / 180)
),
color = "gray60",
linewidth = 1
) +
# Draw inner labels for the octant angles
ggplot2::geom_label(
ggplot2::aes(
x = 3 * cos(angles * pi / 180),
y = 3 * sin(angles * pi / 180),
label = sprintf("%d\u00B0", angles)
),
size = 5,
color = "black",
label.size = NA,
hjust = "center",
vjust = "center"
) +
# Draw the circle
ggforce::geom_circle(ggplot2::aes(x0 = 0, y0 = 0, r = 5),
color = "gray50", linewidth = 1.5
) +
# Draw outer labels for octant abbreviations
ggplot2::geom_label(
ggplot2::aes(
x = 5.1 * cos(angles * pi / 180),
y = 5.1 * sin(angles * pi / 180),
label = alabel
),
size = 5,
color = "black",
label.size = NA,
hjust = "outward",
vjust = "outward"
)
## ----column, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
data("jz2017")
rmat <- stats::cor(jz2017[c("NARPD", PANO())], method = "pearson")
r <- rmat[2:9, 1]
# Format data for plotting
dat_r <- data.frame(Scale = factor(PANO()), r = r)
# Create column plot
ggplot2::ggplot(dat_r, ggplot2::aes(x = .data$Scale, y = .data$r)) +
ggplot2::geom_hline(yintercept = 0, linewidth = 1.25, color = "darkgray") +
ggplot2::geom_col(position = ggplot2::position_dodge(.9), fill = "red") +
ggplot2::scale_y_continuous(limits = c(-0.02, 0.5)) +
ggplot2::labs(title = "Scores") +
ggplot2::theme(
axis.title = ggplot2::element_blank(),
panel.grid.major = ggplot2::element_line(linewidth = 1.0),
panel.grid.minor.y = ggplot2::element_line(linewidth = 0.5),
panel.grid.minor.x = ggplot2::element_blank()
)
## ----path, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
dat_r <- data.frame(
Scale = factor(PANO()),
est = r,
Angle = octants()
)
dat_r <- dat_r[order(dat_r$Angle), ]
# Plot correlations as connected point ranges with 95% CI ranges
ggplot2::ggplot(dat_r, ggplot2::aes(x = .data$Angle, y = .data$est)) +
ggplot2::geom_hline(yintercept = 0, linewidth = 1.25, color = "darkgray") +
ggplot2::geom_point(size = 3, color = "red") +
ggplot2::geom_path(linewidth = 1.25, color = "red") +
ggplot2::geom_label(ggplot2::aes(label = Scale), nudge_y = 0.075) +
ggplot2::scale_x_continuous(
breaks = octants(),
expand = c(0.05, 0),
labels = function(x) sprintf("%.0f\U00B0", x)
) +
ggplot2::scale_y_continuous(
limits = c(-0.02, 0.5)
) +
ggplot2::labs(title = "Scores by Angle") +
ggplot2::theme(
axis.title = ggplot2::element_blank(),
plot.margin = ggplot2::unit(c(10, 30, 10, 10), "points"),
panel.grid.major = ggplot2::element_line(linewidth = 1.0),
panel.grid.minor.y = ggplot2::element_line(linewidth = 0.5),
panel.grid.minor.x = ggplot2::element_blank()
)
## ----curve, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
# Calculate SSM parameters
sp <- ssm_parameters(r, octants())
# Create function for SSM cosine model
f <- function(x) {
sp$Elev + sp$Ampl * cos((x - sp$Disp) * pi / 180)
}
# Plot correlations along with SSM cosine model
ggplot2::ggplot(dat_r, ggplot2::aes(x = .data$Angle, y = .data$est)) +
ggplot2::geom_hline(yintercept = 0, linewidth = 1.25, color = "darkgray") +
ggplot2::geom_point(size = 3) +
ggplot2::geom_path(linewidth = 1.25) +
ggplot2::stat_function(fun = f, linewidth = 2, color = "red") +
ggplot2::scale_x_continuous(
breaks = octants(),
expand = c(0.01, 0),
labels = function(x) sprintf("%.0f\U00B0", x)
) +
ggplot2::scale_y_continuous(
limits = c(-0.02, 0.5)
) +
ggplot2::labs(title = "Cosine Curve Estimated by SSM") +
ggplot2::theme(
axis.title = ggplot2::element_blank(),
plot.margin = ggplot2::unit(c(10, 30, 10, 10), "points"),
panel.grid.major = ggplot2::element_line(linewidth = 1.0),
panel.grid.minor.y = ggplot2::element_line(linewidth = 0.5),
panel.grid.minor.x = ggplot2::element_blank()
)
## ----residuals, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
# Plot correlations as path, SSM cosine model, and differences
ggplot2::ggplot(dat_r, ggplot2::aes(x = .data$Angle, y = .data$est)) +
ggplot2::geom_hline(yintercept = 0, linewidth = 1.25, color = "darkgray") +
ggplot2::stat_function(fun = f, linewidth = 2, color = "gray20") +
ggplot2::geom_point(size = 5.5, color = "black") +
ggplot2::geom_path(linewidth = 1.25, color = "black") +
ggplot2::geom_segment(
ggplot2::aes(
x = .data$Angle,
xend = .data$Angle,
y = .data$est,
yend = f(.data$Angle)
),
linewidth = 4,
linetype = "solid",
color = "red"
) +
ggplot2::scale_x_continuous(
breaks = octants(),
expand = c(0.01, 0),
labels = function(x) sprintf("%.0f\U00B0", x)
) +
ggplot2::scale_y_continuous(
limits = c(-0.02, 0.475)
) +
ggplot2::labs(title = sprintf("Fit = %.2f", sp[[6]])) +
ggplot2::theme(
axis.title = ggplot2::element_blank(),
plot.margin = ggplot2::unit(c(10, 30, 10, 10), "points"),
panel.grid.major = ggplot2::element_line(linewidth = 1.0),
panel.grid.minor.y = ggplot2::element_line(linewidth = 0.5),
panel.grid.minor.x = ggplot2::element_blank()
)
## ----elev, echo = FALSE, out.width = "100%"-----------------------------------
knitr::include_graphics("VIG1-e.gif")
## ----ampl, echo = FALSE, out.width = "100%"-----------------------------------
knitr::include_graphics("VIG1-a.gif")
## ----disp, echo = FALSE, out.width = "100%"-----------------------------------
knitr::include_graphics("VIG1-d.gif")
## ----jz2017-------------------------------------------------------------------
data("jz2017")
head(jz2017)
## ----iipsc, echo = FALSE, fig.width = 7.5, fig.height = 4, out.width = "100%"----
angles <- c(90, 135, 180, 225, 270, 315, 360, 45)
flabel <- c(
"Domineering",
"Vindictive",
"Cold",
"Socially\nAvoidant",
"Nonassertive",
"Easily\nExploited",
"Overly\nNurturant",
"Intrusive"
)
alabel <- c("PA", "BC", "DE", "FG", "HI", "JK", "LM", "NO")
# Create plot ------------------------------------------------------------------
ggplot2::ggplot() +
# Require plot to be square and remove default styling
ggplot2::coord_fixed() +
ggplot2::theme_void() +
# Expand both axes multiplicatively to fit the labels
ggplot2::scale_x_continuous(expand = c(0.30, 0)) +
ggplot2::scale_y_continuous(expand = c(0.10, 0)) +
# Draw line segments corresponding to the octants
ggplot2::geom_segment(
ggplot2::aes(
x = 0,
y = 0,
xend = 5 * cos(angles * pi / 180),
yend = 5 * sin(angles * pi / 180)
),
color = "gray60",
linewidth = 0.5
) +
# Draw inner labels for the octant abbreviations
ggplot2::geom_label(
ggplot2::aes(
x = 3.75 * cos(angles * pi / 180),
y = 3.75 * sin(angles * pi / 180),
label = alabel
),
size = 5,
color = "gray40",
label.size = NA,
hjust = "center",
vjust = "center"
) +
# Draw inner labels for the octant angles
ggplot2::geom_label(
ggplot2::aes(
x = 2 * cos(angles * pi / 180),
y = 2 * sin(angles * pi / 180),
label = sprintf("%d\u00B0", angles)
),
size = 4,
color = "gray50",
label.size = NA,
hjust = "center",
vjust = "center"
) +
# Draw the circle
ggforce::geom_circle(
ggplot2::aes(x0 = 0, y0 = 0, r = 5),
color = "gray50",
size = 1.5
) +
# Draw outer labels for the octant names
ggplot2::geom_label(
ggplot2::aes(
x = 5.1 * cos(angles * pi / 180),
y = 5.1 * sin(angles * pi / 180),
label = flabel
),
size = 5,
color = "black",
label.size = NA,
hjust = "outward",
vjust = "outward"
)
## ----analyze------------------------------------------------------------------
results <- ssm_analyze(
data = jz2017,
scales = c("PA", "BC", "DE", "FG", "HI", "JK", "LM", "NO"),
angles = c(90, 135, 180, 225, 270, 315, 360, 45)
)
## ----summary1a----------------------------------------------------------------
summary(results)
## ----summary1b----------------------------------------------------------------
results2 <- ssm_analyze(data = jz2017, scales = PANO(), angles = octants())
summary(results2)
## ----table1, echo = FALSE-----------------------------------------------------
ssm_table(results2, render = FALSE) %>%
knitr::kable(caption = circumplex:::dcaption(results2)) %>%
kableExtra::kable_styling(full_width = TRUE, font_size = 14)
## ----plot1, fig.width = 7.2, fig.height = 4, out.width = "100%"---------------
ssm_plot_circle(results2)
## ----plot2, fig.width = 7.2, fig.height = 4, out.width = "100%"---------------
ssm_plot_curve(results2)
## ----summary2-----------------------------------------------------------------
results3 <- ssm_analyze(
data = jz2017,
scales = PANO(),
angles = octants(),
measures = "NARPD"
)
summary(results3)
## ----table2, echo = FALSE-----------------------------------------------------
ssm_table(results3, render = FALSE) %>%
knitr::kable(caption = circumplex:::dcaption(results3)) %>%
kableExtra::kable_styling(full_width = TRUE, font_size = 14)
## ----plot3, fig.width = 7.5, fig.height = 4, out.width = "100%"---------------
ssm_plot_circle(results3)
## ----plot4, fig.width = 7.5, fig.height = 4, out.width = "100%"---------------
ssm_plot_curve(results3)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.