Romney is an R package for classical cultural consensus
analysis (CCA). It implements three models:
The basic idea of cultural consensus analysis is simple: if a group shares a common cultural model, then people who know more of that shared culture should agree with one another more often. From patterns of agreement alone, we can estimate:
install.packages("Romney")To install the development version from GitHub:
# install.packages("pak")
pak::pak("wernerhertzog/Romney")Version 0.1.1 is under development and has not yet been released on CRAN.
In the classical approach introduced by Romney, Weller, and Batchelder, we begin with a respondent-by-item matrix. Each row is a person and each column is a question, item, rating, or judgment. The analysis then:
When there is one dominant shared cultural model, the first factor should be much stronger than the second, and first-factor competences should mostly be positive.
Use the formal model when each item has a discrete set of possible answers and respondents choose one answer per item.
Examples:
hot or
coldFor two respondents \(i\) and \(j\), let \(p_{ij}\) be the proportion of items on which they gave the same answer, and let \(m\) be the number of possible response options. The formal model uses a guessing-corrected agreement score:
\[ a_{ij} = \frac{m p_{ij} - 1}{m - 1} \]
The model assumes that respondents either know an answer or guess uniformly among the possible options. It uses estimated competence to calculate the probability of each answer and select the most probable cultural answer key.
Use the informal model when responses are ordered or numeric rather than categorically correct/incorrect.
Examples:
Here, agreement is not about exact matches in categories. Instead, it is about whether respondents vary together across items. Agreement is measured by Pearson correlation between respondents:
\[ a_{ij} = \mathrm{cor}(x_i, x_j) \]
where \(x_i\) and \(x_j\) are the vectors of responses given by respondents \(i\) and \(j\).
In plain language: if two people place items in a similar order, or give similarly high and low ratings across items, they are in stronger consensus.
The estimated cultural answer key is the competence-weighted mean response for each item. Here, competence measures agreement with the shared response pattern rather than the probability of knowing an answer.
Use the covariance model when the data are binary yes/no or
true/false and you want the classical binary covariance procedure used
in UCINET.
Examples:
For each pair of respondents, the binary data can be summarized in a \(2 \times 2\) table with counts \(n_{11}\), \(n_{10}\), \(n_{01}\), and \(n_{00}\). The covariance model uses a covariance-style agreement score:
\[ a_{ij} = \frac{n_{11} n_{00} - n_{10} n_{01}} {n (n - 1)\pi(1-\pi)} \]
where \(n\) is the number of jointly observed items used for that pair and \(\pi\) is the assumed proportion of “yes” or “true” items in the cultural answer key. The default is 0.5.
Unlike exact-match agreement, covariance takes account of each respondent’s tendency to say yes or no. The answer key is estimated by a competence-weighted vote for each item.
The main outputs of classical consensus analysis are:
A common rule of thumb is that a strong one-culture solution has:
These are guidelines, not proof of a single shared culture. Interpretation also depends on the cultural domain and the study’s ethnographic context.
The factor statistics are sums of squared loadings, called
“eigenvalues” in UCINET. They are distinct from the
eigenvalues of the original agreement matrix.
On the three included synthetic datasets, Romney closely
reproduces the classical consensus results from UCINET
6.832. Agreement matrices match at its printed precision, categorical
answer keys match exactly, and ordinal answer estimates differ by less
than 0.001. Small differences remain in competence estimates and factor
statistics.
The repository includes the CSV datasets, original
UCINET logs, and scripts for repeating the comparisons. See
the validation report for the
full results and methodology.
The models follow the classical consensus framework also implemented
in ANTHROPAC.
library(Romney)
x <- simulate_consensus_data(
n_respondents = 20,
n_questions = 40,
n_answers = 4,
competence = 0.75,
seed = 1
)
fit <- consensus(x$responses, method = "formal", answer_levels = 1:4)
print(fit)
fit$competence[1:5, 1]
fit$answer_key$key[1:10]See the methods
vignette for details on the models, assumptions, and diagnostics.
Use citation("Romney") for the package citation.