CSIV Scoring - R
 

Home Up

#### Circumplex Scales of Interpersonal Values – how to compute scale scores (and other indices) ####

library(dplyr)

## Compute raw CSIV octant scores ##
YourData <- YourData %>%
 mutate(PA = (item01 + item09 + item17 + item25 + item33 + item41 + item49 + item57) / 8, # PA = Agentic
        BC = (item04 + item12 + item20 + item28 + item36 + item44 + item52 + item60) / 8, # BC = Agentic & Uncommunal
        DE = (item07 + item15 + item23 + item31 + item39 + item47 + item55 + item63) / 8, # DE = Uncommunal
        FG = (item02 + item10 + item18 + item26 + item34 + item42 + item50 + item58) / 8, # FG = Unagentic & Uncommunal
        HI = (item05 + item13 + item21 + item29 + item37 + item45 + item53 + item61) / 8, # HI = Unagentic
        JK = (item08 + item16 + item24 + item32 + item40 + item48 + item56 + item64) / 8, # JK = Unagentic & Communal
        LM = (item03 + item11 + item19 + item27 + item35 + item43 + item51 + item59) / 8, # LM = Communal
        NO = (item06 + item14 + item22 + item30 + item38 + item46 + item54 + item62) / 8) # NO = Agentic & Communal
## Compute scores for the overall bipolar X (communal) and Y (agentic) vectors.
YourData <- YourData %>%
 mutate(AGENTIC = 0.25 * (PA - HI + (0.707 * (BC + NO - FG - JK))),
       COMMUNAL = 0.25 * (LM - DE + (0.707 * (NO + JK - FG - BC))))

### The above commands are all you need to do the basic scoring
### The code below offer examples of how to compute additional scores or indices

## Compute "Structural Summary" Parameters ##
YourData <- YourData %>%
 mutate(
  # Compute "vector length" or "amplitude" (AMP)
  AMP = sqrt(AGENTIC^2 + COMMUNAL^2),
  # Compute overall mean or "response elevation" (ELE)
  ELE = (PA + BC + DE + FG + HI + JK + LM + NO)/8,
  # Compute Sum of Squared Deviations (SStot)
  SStot = ((PA - ELE)^2 + (BC - ELE)^2 + (DE - ELE)^2 + (FG - ELE)^2 +
  (HI - ELE)^2 + (JK - ELE)^2 + (LM - ELE)^2 + (NO - ELE)^2),
  # Compute Circumplex Goodness-of-Fit (R-squared)
  R2 = (4 * (AMP^2)) / SStot
 )
# Compute Angular Displacement or Circumplex Angle (ANG)
YourData <- YourData %>%
 mutate(ANG = ifelse(AGENTIC > 0 & COMMUNAL > 0, 000 + atan(AGENTIC/COMMUNAL) * (180 / pi),
  ifelse(AGENTIC > 0 & COMMUNAL < 0, 180 + atan(AGENTIC/COMMUNAL) * (180 / pi),
  ifelse(AGENTIC < 0 & COMMUNAL > 0, 360 + atan(AGENTIC/COMMUNAL) * (180 / pi),
  ifelse(AGENTIC < 0 & COMMUNAL < 0, 180 + atan(AGENTIC/COMMUNAL) * (180 / pi), NA)))))

## Compute z-scores
YourData <- YourData %>%
 mutate(
  # First, insert the means (M) and standard deviations (SD) from a relevant comparison sample
  # The Ms and SDs below are from a sample of 1,200 University of Idaho undergraduates
  M_PA <- 2.53,
  M_BC <- 1.38,
  M_DE <- 1.10,
  M_FG <- 1.66,
  M_HI <- 1.77,
  M_JK <- 2.67,
  M_LM <- 2.83,
  M_NO <- 2.93,
  SD_PA <- 0.63,
  SD_BC <- 0.71,
  SD_DE <- 0.70,
  SD_FG <- 0.78,
  SD_HI <- 0.75,
  SD_JK <- 0.71,
  SD_LM <- 0.69,
  SD_NO <- 0.57,
  M_AGENTIC <- 0.30,
  M_COMMUNAL <- 1.46,
  SD_AGENTIC <- 0.65,
  SD_COMMUNAL <- 0.74,
  # Then compute z-scores
  zPA = (PA - M_PA) / SD_PA,
  zBC = (BC - M_BC) / SD_BC,
  zDE = (DE - M_DE) / SD_DE,
  zFG = (FG - M_FG) / SD_FG,
  zHI = (HI - M_HI) / SD_HI,
  zJK = (JK - M_JK) / SD_JK,
  zLM = (LM - M_LM) / SD_LM,
  zNO = (NO - M_NO) / SD_NO,
  zAGENTIC = (AGENTIC - M_AGENTIC) / SD_AGENTIC,
  zCOMMUNAL = (COMMUNAL - M_COMMUNAL) / SD_COMMUNAL
 )

# Compute ipsative octant scale scores
YourData <- YourData %>%
 mutate(
  iPA = PA - ELE,
  iBC = BC - ELE,
  iDE = DE - ELE,
  iFG = FG - ELE,
  iHI = HI - ELE,
  iJK = JK - ELE,
  iLM = LM - ELE,
  iNO = NO - ELE
 )