This RMarkdown tutorial replicates the core analyses in Pan and Xu (2025): “Gauging preference stability under authoritarianism”. The replication, conducted by Jinwen Wu, a predoctoral fellow at Stanford University, is guided by Professor Yiqing Xu. The RMarkdown summarizes the main data analyses from the article; please refer to the original paper and its replication materials for a comprehensive understanding of the ideas presented.

Click the Code button at the top right and select Show All Code to reveal all code used in this RMarkdown. Click Show in paragraphs to reveal the code used to generate a finding.


The study examines whether individuals living under authoritarian rule develop stable and constrained policy preferences. Drawing on three surveys conducted in China—including two longitudinal datasets of urban adults and college students—the authors measure attitudes across six policy domains: political liberalism, market economy, nationalism, traditionalism, social equality, and minority accommodation. They assess within-person stability over one-month and one-year intervals. Factor analyses confirm that preferences are multidimensional and internally coherent. Cross-wave comparisons reveal substantial intertemporal stability across all domains, with levels comparable to those observed in competitive electoral democracies. Taken together, the findings suggest that—even under extensive propaganda, censorship, and information control—authoritarian regimes face meaningful limits arising from citizens’ durable and structured preferences.

1 Conceptual Framework

A large body of research argues that authoritarian regimes seek to prevent the formation of independent and durable belief systems by propaganda, censorship, and educational control. By controlling information flows, autocrats aim to keep preferences malleable, limiting coordinated opposition and preserving policy flexibility (Kitschelt 1992; Tavits and Letki 2009; Whitefield 2002; Svolik 2012; Weeks 2008). This view predicts instability in political preferences, with people’s attitudes shifting in response to political pressures, propaganda campaigns, or changes in the state’s messaging.

In contrast, political psychology emphasizes intrinsic cognitive motivations that encourage individuals to develop internally structured preferences, independent of political context. People seek certainty, threat reduction, and social identification; these motivations anchor attitudes in ways that produce coherent, multidimensional belief systems (Jost et al. 2003). If such mechanisms operate under authoritarian rule, preferences should remain stable even when the regime actively attempts to shape them.

Empirical work in authoritarian contexts has documented that citizens often hold multidimensional and constrained preferences—for example, cleavages between religious and secular orientations (Blaydes and Linzer 2012), economic divides in Russia (O’Loughlin, Tuathail, and Kolossov 2006), and structured issue positions in China (A. X. Wu 2013; J. Wu and Meng 2017). However, almost all prior studies rely on cross-sectional data.

By collecting and analyzing three surveys—including two longitudinal surveys tracking individuals over month-long and year-long intervals—the authors directly test whether structured preferences persist over time in an authoritarian context.

2 Data & Design

2.1 Sample

The authors use three surveys from China for this study. The authors select China as a unlikely case for preference stability for three reasons: China lacks electoral competition, maintains stringent media and civic controls, and invests heavily in shaping educational curricula and digital information flows. If stable and structured preferences emerge even under these conditions, it would imply that the psychological cognitive stability outweigh authoritarian attempts to manage opinion.

The sampling strategy targets two important populations—urban adults and college students—who are central to China’s information networks, highly exposed to digital and traditional propaganda, and influential in political communication. The study design provides independent samples collected in distinct settings as shown in the table below.

Sample Design Waves Usage in the Study
2018 Urban Adult Survey (Sample 1) Urban adults in China; online panel with quota sampling on age, gender, education, and region. July–September 2018; Wave 1: 1,438 respondents; Wave 2 recontacted 2 months later. Validate dimensionality and construct indices of constrained policy preferences.
2019 Urban Adult Survey (Sample 2) Urban adults in China; online panel from a different vendor using similar quota targets. January–February 2019; Wave 1: 891 respondents; Wave 2 recontacted 1 month later. Main sample for estimating short-term preference stability and intertemporal predictability.
2019 College Student Panel (Sample 3) Chinese first-year undergraduates in the U.S. (377) and China (615); all finished high school in mainland China. September 2019–September 2020; surveys every 6 months; analyses use Wave 1 and Wave 3. Test year-long stability during the freshman–sophomore transition and the COVID-19 disruption period.

Adapted from Table 1 in the article.

All datasets are provided in .dta format and housed in the “data” folder of the replication materials. In the

2.2 Measurement

Policy Domain

To evaluate preference stability, the authors examine six preference domains that capture the major ideological cleavages. These domains reflect areas where the regime has clear stakes, where public attitudes may impose political constraints, and where prior work has documented meaningful variation:

  • Political Liberalism: Views on political institutions, media regulation, and personal freedoms. These attitudes directly relate to the CCP’s control over political expression and thus represent a core area of potential contestation.
  • Market Economy: Preferences regarding state intervention, resource allocation, price controls, and the role of state-owned enterprises. These questions connect to debates over China’s mixed economy and ongoing tension between state-led development and market liberalization.
  • Nationalism: Attitudes toward national identity, sovereignty, and relations with the West. Nationalism has been a key pillar of CCP legitimacy and a central target of propaganda efforts.
  • Traditionalism: Beliefs about traditional Chinese values and cultural norms, which resonate with the regime’s emphasis on social harmony and moral governance.
  • Social Equality: Views on redistribution, income inequality, and gender equality. These questions tap into socioeconomic grievances that may shape support for regime policies.
  • Ethnic Accommodation: Preferences related to the treatment of ethnic minorities, especially in sensitive areas like Xinjiang. Given international scrutiny and domestic salience, this domain captures an important dimension of contemporary Chinese political attitudes.

Although they cannot rule it out, the authors do not find that the responses are severely impacted by preference falsification. Samples 1 and 2 contain all six domains; Sample 3 includes four (political liberalism, market economy, nationalism, traditionalism), with items selected for demonstrated stability.

Constraint and Stability

For each domain, responses are averaged to form additive indices, following pre-specified liberal–conservative orientations. The authors assess preference constraint through cross-domain correlations and factor analyses, which confirm a multidimensional but structured belief system. They measure intertemporal stability by correlating domain indices across waves (one-month for Sample 2; one-year for Sample 3). Intertemporal predictability is assessed by correlating partial indices in Wave 1 with full indices in Wave 2, which evaluates whether items within a domain are driven by a common latent factor.

3 Replicating the Main Findings

3.1 Installing Packages

Several R packages are required for the data analysis and visualization. The code chunk below checks for all required packages and installs the missing ones.

Packages:“haven”, “psych”, “corrplot”, “GGally”, “ggplot2”, “patchwork”, “ggpubr”, “kableExtra”, “dplyr”, “RColorBrewer”, “gridExtra”, “lavaan”, “Amelia”.

options(repos = c(CRAN = "https://cran.r-project.org"))

packages <- c("haven", "psych", "corrplot", "GGally", "ggplot2", "patchwork", "ggpubr", "kableExtra", "dplyr",  "RColorBrewer", "gridExtra", "lavaan", "Amelia")
for (pkg in packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
  library(pkg, character.only = TRUE)
}

3.2 Preference Structure

Consistent with previous research, the authors find that political preferences are structured and multidimensionally constrained.

The conventional left–right scale may not capture people’s political preference. As shown in Sample~2, most respondents considered themselves “centrist,” followed by 17% who did not know their preferences.

The table below reports people’sself-identification on a Left–Right Scale

Extreme Left Left Left Leaning Centrist Right Leaning Right Extreme Right Don’t Know Total
Count 7 19 105 556 46 7 2 149 891
Percentage 0.8 2.1 11.8 62.4 5.2 0.8 0.2 16.7 100

Replicating Table A4 in the appendix.

Figures below show the results from the component and factor analyses.

library(psych)

## Sample 1
sample_1 <- as.data.frame(haven::read_dta("data/sample1.dta"))
question.list <- list(paste0("s1_",1:14),  # poli
                      paste0("s2_",1:14),  # econ
                      paste0("s3_",1:14),  # nati
                      paste0("s4_",1:7),   # trad
                      paste0("s5_",1:7),   # equi
                      paste0("s6_",1:7))   # ethn
qs <- unlist(question.list)

d1 <- sample_1[, qs]
d1$id <- 1:nrow(d1)
set.seed(123)
pdf(NULL)        # open null device → nothing printed
out1 <- scree(d1[, 1:63])
dev.off()        # close the null device

fv1  <- out1$fv   # factor eigenvalues
pcv1 <- out1$pcv  # principal components

## Sample 2
sample_2 <- as.data.frame(haven::read_dta("data/sample2.dta"))
d2 <- sample_2[, qs]
d2$id <- 1:nrow(d2)
set.seed(123)
pdf(NULL)
out2 <- scree(d2[, 1:63])
dev.off()

fv2  <- out2$fv
pcv2 <- out2$pcv

## Two-panel scree plots
par(mfrow = c(1, 2), mar = c(5, 4, 1, 1), oma = c(2.5, 0, 0, 0))

## (a) Sample 1
plot(1, type = "n", ylim = c(-0.5, 7), xlim = c(1, 63),
     xlab = "", ylab = "", axes = FALSE)
mtext("i'th Principal Component or Factor", 1, 2.5, cex = 1.2)
mtext("Eigenvalues of Components and Factors", 2, 2.5, cex = 1.2)
abline(h = 1, col = "#AAAAAA50", lwd = 4, lty = 1)
abline(h = seq(-1, 20, 0.5), col = "#AAAAAA50")
abline(v = seq(0, 64, by = 2), col = "#AAAAAA50")
lines(fv1,  col = "gray30", lwd = 2, lty = 3)          # Factor
points(fv1, pch = 1, col = "gray30", cex = 1.1)
lines(pcv1, col = 1,       lwd = 2)                    # PC
points(pcv1, pch = 16, col = 1, cex = 1.2)
axis(1, at = seq(0, 60, 10), cex.axis = 1)
axis(2, at = 0:10,         cex.axis = 1)
legend("topright", c("Principal Component", "Factor"),
       pch = c(16, 1), col = c(1, "gray30"), bty = "n", cex = 1.5)
box()

## (b) Sample 2
plot(1, type = "n", ylim = c(-0.5, 7), xlim = c(1, 63),
     xlab = "", ylab = "", axes = FALSE)
mtext("i'th Principal Component or Factor", 1, 2.5, cex = 1.2)
mtext("Eigenvalues of Components and Factors", 2, 2.5, cex = 1.2)
abline(h = 1, col = "#AAAAAA50", lwd = 4, lty = 1)
abline(h = seq(-1, 20, 0.5), col = "#AAAAAA50")
abline(v = seq(0, 64, by = 2), col = "#AAAAAA50")
lines(fv2,  col = "gray30", lwd = 2, lty = 3)
points(fv2, pch = 1, col = "gray30", cex = 1.1)
lines(pcv2, col = 1,       lwd = 2)
points(pcv2, pch = 16, col = 1, cex = 1.2)
axis(1, at = seq(0, 60, 10), cex.axis = 1)
axis(2, at = 0:10,         cex.axis = 1)
legend("topright", c("Principal Component", "Factor"),
       pch = c(16, 1), col = c(1, "gray30"), bty = "n", cex = 1.5)
box()

## panel labels under the two plots
mtext("(a) Sample 1", side = 1, line = 1, adj = 0.25, outer = TRUE, cex = 1.3)
mtext("(b) Sample 2", side = 1, line = 1, adj = 0.75, outer = TRUE, cex = 1.3)

Replicating Figure A5 in the appendix.

The eigenvalues decline gradually after the first few components, with no clear elbow. The pattern suggests that respondents’ policy preferences are strongly multidimensional. No single factor, or small set of factors can explains most of the variation in their ideological orientations.

Figure 1 presents the distributions of the constructed policy-domain indices: each histogram on the diagonal shows how respondents score on a given dimension, the off-diagonal scatterplots display the relationships between pairs of domains, and the upper panels report the corresponding correlation coefficients.

##########################################
## Matrix plot: Sample 1 (Figure 1a)
##########################################
col <- RColorBrewer::brewer.pal(9, "PuBu")[8]

sample_1 <- haven::read_dta("data/sample1.dta")

###### Index ######
M <- as.data.frame(sample_1[,paste0("index_",c("poli","econ","nati","trad","equi","ethn"))])
for (i in 1:ncol(M)) {M[,i] <- as.numeric(M[,i])}

colnames(M) <- c("Politically\nLiberal","Pro-Market","Nationalistic", 
                 "Traditionalist","Pro-Social\nEquality","Accommodating\nMinorities")

## Raw distribution
colnames(M) <- c("Politically Liberal","Pro-Market","Nationalistic",  
                 "Traditionalist","Pro-Social Equality","Accommodating Minorities")

p_1a <- ggpairs(M,lower = list(continuous = wrap("points", alpha = 1, size=0, colour = col)),
             upper = list(continuous = wrap("cor", size = 5, colour = 1)))  +
  theme(axis.text = element_text(size = 14, vjust = 1, color = "black"),
        axis.title =element_text(size=18, face="bold")) + theme_bw()
print(p_1a)

Replicating Figure 1a in the article.

Figure 1a analyzes the 2018 Urban Adult Survey, Sample 1. Each domain has meaningful variation, and responses are not concentrated at extremes. The six domains are empirically separable: items within each domain exhibit tighter distributions compared with items across domains.

Figure 1b repeats the same set of plots for the 2019 Urban Adult Survey, Sample 2.

##########################################
## Matrix plot: Sample 2 (Figure 1b)
##########################################
###### Index ######
M <- as.data.frame(sample_2[,paste0("index_",c("poli","econ","nati","trad","equi","ethn"))])
for (i in 1:ncol(M)) {M[,i] <- as.numeric(M[,i])}

## Raw distribution
colnames(M) <- c("Politically Liberal","Pro-Market","Nationalistic",  
  "Traditionalist","Pro-Social Equality","Accommodating Minorities")
p_1b <- ggpairs(M,lower = list(continuous = wrap("points", alpha = 1, size=0, colour = col)),
             upper = list(continuous = wrap("cor", size = 5, colour = 1)))  +
    theme(axis.text = element_text(size = 14, vjust = 1, color = "black"),
          axis.title =element_text(size=18, face="bold")) + theme_bw()
print(p_1b)

Replicating Figure 1b in the article.

The consistent pattern between Figures 1a and 1b all support the multidimensional structure of people’s political preference.

3.3 Stability

Figure 2 reports intertemporal stability (red) and predictability (light blue) for Sample 2, where urban adults are recontacted after one month. For each policy domain, the x-axis shows the number of items used, and the y-axis shows the distribution of correlations across all possible item combinations; the dots mark the median correlations.

###########################################
## Stability and Predictability (Figure 2)
###########################################
load("output/s_temporal.RData")  # object `predict`

dimnames <-  c("nati", "poli", "econ", "trad", "equi", "ethn")
labels   <- c("Nationalism",
              "Political Liberalism", 
              "Market Economy",
              "Traditionalism", 
              "Social Equality",
              "Minority Accommodation")

xpos <- c(rep(7.5, 3), rep(4, 3))
ypos <- rep(1, 6)
size <- rep(6, 6)

mycol.fill   <- c("#E41A1C", "#A6CEE3")
mycol.border <- c("#CB181D", "#045A8D")
labs         <- c("Stability", "Predictability")
dodge        <- 0.95

plots <- vector("list", length(dimnames))

for (i in seq_along(dimnames)) {
  
  df <- predict[[i]]
  
  mat <- df[, c(1, 2)]
  colnames(mat) <- c("nitems", "corr")
  mat$type <- "Stability"
  
  mat_p <- df[, c(1, 3)]
  colnames(mat_p) <- c("nitems", "corr")
  mat_p$type <- "Predictability"
  
  mat <- rbind(mat, mat_p)
  mat$type <- factor(mat$type, levels = labs)
  mat$corr <- abs(mat$corr)
  
  p <- ggplot(mat, aes(x = nitems, y = corr)) +
    geom_violin(aes(fill = type, colour = type),
                alpha = 0.8,
                position = position_dodge(dodge),
                size = 0.5,
                scale = "width") +
    stat_summary(aes(group = type, colour = type),
                 fun = median,
                 geom = "point",
                 size = 2,
                 position = position_dodge(dodge)) +
    theme_bw() +
    xlab("# Items") +
    ylab("Correlation") +
    ylim(0, 1) +
    scale_colour_manual(values = mycol.border) +
    scale_fill_manual(values   = mycol.fill) +
    annotate("text",
             label = labels[i],
             x = xpos[i],
             y = ypos[i],
             hjust = 0.5,
             vjust = 1,
             size  = size[i]) +
    theme(
      legend.title      = element_blank(),
      legend.background = element_rect(fill = NA),
      legend.position = if (i <= 3) c(0.75, 0.20) else c(0.70, 0.15)
    ) +
    guides(fill = guide_legend(
      keywidth  = 0.25,
      keyheight = 0.1,
      default.unit = "inch"
    ))
  
  plots[[i]] <- p
}

## Print in a 2×3 layout in R Markdown
grid.arrange(grobs = plots, ncol = 3, nrow = 2)

Replicating Figure 2 in the article.

The figure shows that 1) responses on political liberalism, market economy, nationalism, traditionalism, and minority accommodation are relatively stable over time, and 2) both stability and predictability rise as more items are included. Preferences related to social and economic equality are the least stable: even when all seven items are used, correlations rise only slightly above 0.50. By design, survey questions in this domain do not load on a single latent factor—for example, support for gender quotas and opposition to tax cuts for the wealthy may draw on different considerations—so combining them does not increase stability in the way observed for the other domains. Aside from it, most domains reach predictability above 0.60 with only four to five items. When all items are used (14 for political liberalism, market economy, and nationalism; 7 for traditionalism), stability reaches roughly 0.75.

Next, the authors examine intertemporal stability with 2019 College Student Panel, Sample 3.

Figure 3 displays scatterplots comparing each respondent’s scores in Wave 1 (x-axis) and Wave 3 (y-axis) across four policy domains: political liberalism, market economy, nationalism, and traditionalism. Each point represents one individual observed at both time points. If preferences are perfectly stable, points would lie on the 45-degree dashed line; the closer the cloud clusters to this line, the higher the stability. The printed correlation coefficient in each panel summarizes this association. Standardizing the indices does not change correlations—it simply ensures that all domains are plotted on comparable scales.

##########################################
## Figure 3 (Temporal Stability)
##########################################
## Load data (Sample 3)
sample_3 <- read_dta("data/sample3.dta")

## Construct standardized indices for Waves 1 and 3
dat <- sample_3 %>%
  mutate(
    r1_index_poli =  r1_liberalism_1 - r1_liberalism_2 + r1_liberalism_3 - r1_liberalism_4,
    r3_index_poli =  r3_liberalism_1 - r3_liberalism_2 + r3_liberalism_3 - r3_liberalism_4,
    r1_index_econ =  r1_free_market_1 - r1_free_market_2 + r1_free_market_3 +
                     r1_free_market_4 - r1_free_market_5,
    r3_index_econ =  r3_free_market_1 - r3_free_market_2 + r3_free_market_3 +
                     r3_free_market_4 - r3_free_market_5,
    r1_index_nati =  r1_nationalism_1 - r1_nationalism_2 + r1_nationalism_3 +
                     r1_nationalism_4 + r1_nationalism_5,
    r3_index_nati =  r3_nationalism_1 - r3_nationalism_2 - r3_nationalism_3 +
                     r3_nationalism_4 + r3_nationalism_5,
    r1_index_trad = -r1_traditionalism_1 + r1_traditionalism_2 + r1_traditionalism_3 -
                     r1_traditionalism_4 - r1_traditionalism_5,
    r3_index_trad = -r3_traditionalism_1 + r3_traditionalism_4 + r3_traditionalism_2 -
                     r3_traditionalism_3 - r3_traditionalism_5
  ) %>%
  mutate(across(matches("^r[13]_index_"),
                ~ (. - mean(., na.rm = TRUE)) / sd(., na.rm = TRUE)))

## Plot settings
col  <- brewer.pal(9, "PuBu")[8]
lims <- c(-4, 4)

## 2×2 layout
par(mfrow = c(2, 2), mar = c(4, 4, 1, 1))

make_panel <- function(var, label) {
  v1 <- paste0("r1_index_", var)
  v2 <- paste0("r3_index_", var)
  r  <- cor(dat[[v1]], dat[[v2]], use = "pairwise.complete.obs")
  plot(jitter(dat[[v1]]),
       jitter(dat[[v2]]),
       xlim   = lims,
       ylim   = lims,
       col    = col,
       xlab   = paste(label, "(Wave 1)"),
       ylab   = paste(label, "(Wave 3)"),
       cex.lab = 1.2)
  abline(a = 0, b = 1, col = 2, lty = 2, lwd = 2)
  text(x = lims[1] + 0.3, y = lims[2] - 0.2,
       labels = sprintf("Correlation = %.3f", r),
       cex = 1.1, adj = c(0, 1))
}

make_panel("poli", "Political Liberalism")
make_panel("econ", "Pro-Market")
make_panel("nati", "Nationalism")
make_panel("trad", "Traditionalism")

Replicating Figure 3 in the article.

The figure shows substantial one-year stability in all four domains. Correlations range from 0.59 (political liberalism) to 0.67 (nationalism and traditionalism).

Sample 3 tracks college students during a period when preferences typically shift—between the first and second year of college—and during the disruptions of COVID-19. Despite these pressures, preferences in political institutions, economic policy, national identity, and traditional values remain highly consistent.

3.4 Stability, Education, and Knowledge

Figure 4 examines how preference stability varies by education and political knowledge using Sample 2 (urban adults recontacted after one month).

Panel (a) compares respondents with a college degree or above to those without; panel (b) compares respondents with high versus low political knowledge. In both panels, each point represents the estimated intertemporal stability for one policy domain, and the vertical bars are 95% confidence intervals.

d <- sample_2[sample_2$wave2 == 1, ]

## Functions to compute stability and bootstrap CIs
getStab <- function(s) {
  dims <- c("poli", "econ", "nati", "trad", "equi", "ethn")
  out  <- numeric(length(dims))
  for (i in seq_along(dims)) {
    var1 <- paste0("index_",  dims[i])
    var2 <- paste0("index2_", dims[i])
    out[i] <- cor(s[[var1]], s[[var2]], use = "pairwise.complete.obs")
  }
  out
}

getStab.boot <- function(s, nboot = 1000) {
  n      <- nrow(s)
  store  <- matrix(NA_real_, nrow = 6, ncol = nboot)
  for (b in seq_len(nboot)) {
    store[, b] <- getStab(s[sample.int(n, n, replace = TRUE), ])
  }
  est <- getStab(s)
  se  <- apply(store, 1, sd)
  out <- cbind(
    cor = est,
    ci1 = est - 1.96 * se,
    ci2 = est + 1.96 * se
  )
  rownames(out) <- c("poli", "econ", "nati", "trad", "equi", "ethn")
  out
}

## Stability by education and knowledge
stab.hedu  <- getStab.boot(d[d$eduyr >= 16, ])
stab.ledu  <- getStab.boot(d[d$eduyr < 16, ])
stab.hknow <- getStab.boot(d[d$knowledge >= 4, ])
stab.lknow <- getStab.boot(d[d$knowledge < 4, ])

mycol   <- brewer.pal(3, "Set1")[c(1, 2)]
dim.lab <- c("Political\nLiberalism", "Market\nEconomy",
             "Nationalism", "Traditionalism",
             "Social\nEquality", "Minority\nAccommodation")

## Two panels: 2 rows, 1 column
par(mfrow = c(2, 1), mar = c(5, 5, 3, 8), xpd = NA)

########################################
## Panel (a): Stability by education
########################################

plot(1, type = "n", xlab = "", ylab = "",
     axes = FALSE, xlim = c(0.5, 6.5), ylim = c(0, 1))
box()

mtext("(a) Stability by Education", side = 3, line = 1.2, cex = 1.3, adj = 0)

axis(2)
axis(1, at = 1:6, tick = FALSE, labels = dim.lab, line = 1, cex.axis = 0.95)

mtext("Intertemporal Stability", 2, line = 3, cex = 1.3)

for (i in 1:6) lines(c(i, i) - 0.1, stab.hedu[i, 2:3], lwd = 3, col = mycol[1])
for (i in 1:6) lines(c(i, i) + 0.1, stab.ledu[i, 2:3], lwd = 3, lty = 2, col = mycol[2])

points(1:6 - 0.1, stab.hedu[, 1], pch = 16, cex = 1.6, col = mycol[1])
points(1:6 + 0.1, stab.ledu[, 1], pch = 17, cex = 1.6, col = mycol[2])

legend("bottomleft",
       pch = c(16, 17), col = mycol, lty = c(1, 2),
       legend = c("College or above", "Below college"),
       bty = "n", cex = 1.0, lwd = 3)


########################################
## Panel (b): Stability by political knowledge
########################################

plot(1, type = "n", xlab = "", ylab = "",
     axes = FALSE, xlim = c(0.5, 6.5), ylim = c(0, 1))
box()

mtext("(b) Stability by Political Knowledge", side = 3, line = 1.2, cex = 1.3, adj = 0)

axis(2)
axis(1, at = 1:6, tick = FALSE, labels = dim.lab, line = 1, cex.axis = 0.95)

mtext("Intertemporal Stability", 2, line = 3, cex = 1.3)

for (i in 1:6) lines(c(i, i) - 0.1, stab.hknow[i, 2:3], lwd = 3, col = mycol[1])
for (i in 1:6) lines(c(i, i) + 0.1, stab.lknow[i, 2:3], lwd = 3, lty = 2, col = mycol[2])

points(1:6 - 0.1, stab.hknow[, 1], pch = 16, cex = 1.6, col = mycol[1])
points(1:6 + 0.1, stab.lknow[, 1], pch = 17, cex = 1.6, col = mycol[2])

legend("bottomleft",
       pch = c(16, 17), col = mycol, lty = c(1, 2),
       legend = c("High political knowledge", "Low political knowledge"),
       bty = "n", cex = 1.0, lwd = 3)

Replicating Figure 4 in the article.

The figure shows that stability is consistently higher among respondents with more education and greater political knowledge. For political liberalism, market economy, and nationalism—the three domains with 14 items each—those with higher education or higher political knowledge exhibit notably stronger month-to-month correlations.

The differences are statistically significant at the 5% level for political liberalism and market economy. In contrast, traditionalism, social equality, and minority accommodation do not show meaningful differences by education or knowledge.

4 Summary

This RMarkdown replicates the central analyses in Pan & Xu (2025) and demonstrates three core findings. First, political preferences in China are multidimensional and internally structured. Second, these preferences show substantial intertemporal stability. Stability generally strengthens as more items are included within each domain. Third, stability varies systematically by education and political knowledge: more sophisticated respondents exhibit stronger and more consistent attitudes. The results all suggest that people living in authoritarian regimes hold durable, organized political preferences.

Reference

Blaydes, Lisa, and Drew A Linzer. 2012. “Elite Competition, Religiosity, and Anti-Americanism in the Islamic World.” American Political Science Review 106 (02): 225–43.
Jost, John T, Jack Glaser, Arie W Kruglanski, and Frank J Sulloway. 2003. “Political Conservatism as Motivated Social Cognition.” Psychological Bulletin 129 (3): 339.
Kitschelt, Herbert. 1992. “The Formation of Party Systems in East Central Europe.” Politics & Society 20 (1): 7–50.
O’Loughlin, John, Gearóid Ó Tuathail, and Vladimir Kolossov. 2006. “The Geopolitical Orientations of Ordinary Russians: A Public Opinion Analysis.” Eurasian Geography and Economics 47 (2): 129–52.
Pan, Jennifer, and Yiqing Xu. 2025. “Replication Data for: Gauging Preference Stability Under Authoritarianism.” Research and Politics Dataverse: https://doi.org/10.7910/DVN/ZMXNER.
Svolik, Milan. 2012. The Politics of Authoritarian Rule. Cambridge: Cambridge University Press.
Tavits, Margit, and Natalia Letki. 2009. “When Left Is Right: Party Ideology and Policy in Post-Communist Europe.” American Political Science Review 103 (04): 555–69.
Weeks, Jessica. 2008. “Autocratic Audience Costs: Regime Type and Signaling Resolve.” International Organization 62: 354.
Whitefield, Stephen. 2002. “Political Cleavages and Post-Communist Politics.” Annual Review of Political Science 5 (1): 181–200.
Wu, Angela Xiao. 2013. “Ideological Polarization over a China-as-Superpower Mindset: An Exploratory Charting of Belief Systems Among Chinese Internet Users, 2008-2011.” International Journal of Communication 8: 2243–72.
Wu, Jason, and Tianguang Meng. 2017. “The Nature of Ideology in Urban China.” 21st Century China Center Research Paper, no. 2017-08.