Skip to contents

This vignette walks through Leadership Trait Analysis (LTA) with leadeR, from computing trait scores to classifying leaders into Hermann’s typology.

Setup

library(leadeR)
library(data.table)

spacyr::spacy_initialize()
set.seed(02138)

own_ent <- "United States"
B <- 1000

jfk1 <- clean_text(jfk19610120)
jfk2 <- clean_text(jfk19610925)
jfk3 <- clean_text(jfk19630610)

Computing trait scores

All traits at once

get_lta() computes all eight LTA traits in one call and returns a one-row tibble per speech. Set bootstrap = TRUE to obtain bootstrap means and delta-method variances for the trait proportions.

res_lta <- data.table::rbindlist(
  lapply(c(jfk1, jfk2, jfk3), function(x)
    get_lta(own_entity = own_ent, text = x, bootstrap = TRUE, B = B))
)

print(res_lta)

The output includes:

  • Bootstrap means and variances for raw counts (e.g., meanP, varP, meanOP, varOP)
  • Trait proportions and their delta-method variances (e.g., Pp, varPp, D, varD, C, varC, Ta, varTa, Ss, varSs, Na, varNa, B, varB)

The seven trait proportions are:

Abbreviation Trait
Pp Need for power
B Belief in ability to control events
C Conceptual complexity
Ss Self-confidence
Ta Task orientation
D Distrust
Na Nationalism (in-group bias)

Individual traits

You can also compute traits one at a time:

res_nat     <- get_nat(own_entity = own_ent, text = jfk1, bootstrap = TRUE, B = B)
res_ctrl    <- get_ctrl(own_entity = own_ent, text = jfk1, bootstrap = TRUE, B = B)
res_power   <- get_power(own_entity = own_ent, text = jfk1, bootstrap = TRUE, B = B)
res_aff     <- get_aff(own_entity = own_ent, text = jfk1, bootstrap = TRUE, B = B)
res_dist    <- get_dist(own_entity = own_ent, text = jfk1, bootstrap = TRUE, B = B)
res_complex <- get_complex(text = jfk1, bootstrap = TRUE, B = B)
res_conf    <- get_conf(text = jfk1, bootstrap = TRUE, B = B)
res_task    <- get_task(text = jfk1, bootstrap = TRUE, B = B)

Leader typology

Using the per-speech LTA traits, type_lta() aggregates scores across speeches and classifies the leader into Hermann’s typology.

Aggregation methods

The way speech-level traits are aggregated matters for classification. type_lta() supports two approaches:

Simple mean (precision_weighted = FALSE, the default): Takes the arithmetic mean of each trait across speeches. All speeches contribute equally regardless of how precisely each trait was estimated.

Precision-weighted mean (precision_weighted = TRUE): Uses inverse-variance weighting via random-effects meta-analysis (metafor::rma() with REML). Speeches with lower bootstrap variance (i.e., more precisely estimated traits) receive higher weight. This requires that get_lta() was run with bootstrap = TRUE so that the variance columns (varPp, varB, etc.) are available.

# Simple mean
type_lta(res_lta)

# Precision-weighted
type_lta(res_lta, precision_weighted = TRUE)

Classification dimensions

type_lta() classifies the leader along three dimensions:

Constraint (Respect vs. Challenge): Based on need for power (Pp) and belief in control (B). A leader who scores below both thresholds respects constraints; otherwise, they challenge constraints.

Openness (Open vs. Closed): Based on conceptual complexity (C) and self-confidence (Ss). A leader is open to information if complexity exceeds self-confidence, or if both exceed their respective high thresholds.

Motivation toward world (four categories): Based on distrust (D) and nationalism (Na):

Distrust Nationalism Motivation
Low Low Cooperative
Low High Cooperative (in-group bias)
High Low Competitive (out-group focus)
High High Competitive

Leadership styles

Constraint, openness, and task orientation (Ta) map to one of eight leadership styles:

Constraint Openness Task orientation Style
Challenge Closed Problem Expansionistic
Challenge Closed Relationship Evangelistic
Challenge Open Problem Incremental
Challenge Open Relationship Charismatic
Respect Closed Problem Directive
Respect Closed Relationship Consultative
Respect Open Problem Reactive
Respect Open Relationship Accommodative
out_lta <- type_lta(res_lta, precision_weighted = TRUE)
out_lta[, c("constraint", "openness", "motivation_toward_world", "typology")]

Custom thresholds

All classification thresholds are configurable. The defaults correspond to the norming sample:

type_lta(
  res_lta,
  precision_weighted = TRUE,
  need_for_power  = 0.50,
  control         = 0.44,
  complex_high    = 0.56,
  confidence_high = 0.81,
  task            = 0.59,
  distrust        = 0.41,
  ingroup         = 0.42
)