frscore | R Documentation |
Calculate fit-robustness scores for a set of cna
solutions/models
frscore(
sols,
dat = NULL,
normalize = c("truemax", "idealmax", "none"),
maxsols = 50,
verbose = FALSE,
print.all = FALSE,
comp.method = c("causal_submodel", "is.submodel")
)
sols |
Character vector of class "stdAtomic" or "stdComplex" (as generated by |
dat |
A |
normalize |
String that determines the method used in
normalizing the scores. |
maxsols |
Integer determining the maximum number of unique solution
types found in |
verbose |
Logical; if |
print.all |
Logical, controls the number of entries printed when
printing the results. If |
comp.method |
String that determines how the models in |
frscore()
implements fit-robustness scoring as introduced in Parkkinen and Baumgartner (2021). The function calculates the
fit-robustness scores of Boolean solutions/models output by the cna()
function of the cna package. The solutions are given to frscore()
as a character vector sols
obtained by reanalyzing
a data set repeatedly, e.g. with rean_cna()
, using different consistency and coverage
thresholds in each analysis.
For multi-valued
models, the range of admissible values for the factors featured
in the models must be provided via the argument dat
, which accepts a data
frame, configTable
, or a list of factor-value ranges as its value,
in the same manner as cna::full.ct()
.
Typically, one would use the data set that the models in sols
were inferred from, and this is what is done automatically when
frscore()
is called within frscored_cna()
. When the models in sols
are binary, dat
should be left to its default value NULL
,
and will in any case be ignored.
The fit-robustness scores can be normalized in two ways. In the default setting normalize = "truemax"
, the score of each sols[i]
is divided by the maximum score obtained by an element of sols
. In case of normalize = "idealmax"
, the score is normalized not by an actually obtained
maximum but by an idealized maximum, which is calculated by assuming that all solutions of equal
complexity in sols
are identical and that for every sols[i]
of a given complexity, all less complex
elements of sols
are its submodels and all more complex elements of sols
are its supermodels.
When normalization is applied, the normalized score is shown in its own column norm.score
in
the results. The raw scores are shown in the column score
.
If the size of the consistency and coverage interval scanned in the reanalysis series generating sols
is large or there are many model ambiguities, sols
may contain so many different types of solutions/models that robustness cannot be calculated for all of them in reasonable time. In that case, the argument maxsols
allows for capping the number of solution types to be included in the scoring (defaults to 50). frscore()
then selects the most frequent solutions/models in sols
of each complexity level until maxsols
is reached and only scores the thus selected elements of sols
.
If the argument verbose
is set to TRUE
, frscore()
also prints a list indicating for each sols[i]
how many raw score points it receives from which elements of sols
. The verbose list is ordered with decreasing fit robustness scores.
A named list where the first element is a data frame containing the unique solution/model types and their scores. Rest of the elements contain additional information about the submodel relations among the unique solutions types and about how the function was called.
V.P. Parkkinen and M. Baumgartner (2021), “Robustness and Model Selection in Configurational Causal Modeling,” Sociological Methods and Research, doi:10.1177/0049124120986200.
Basurto, Xavier. 2013. “Linking Multi-Level Governance to Local Common-Pool Resource Theory using Fuzzy-Set Qualitative Comparative Analysis: Insights from Twenty Years of Biodiversity Conservation in Costa Rica.” Global Environmental Change 23 (3):573-87.
rean_cna()
, cna()
,
causal_submodel()
, is.submodel()
# Artificial data from Parkkinen and Baumgartner (2021)
sols1 <- rean_cna(d.error, attempt = seq(1, 0.8, -0.1))
sols1 <- do.call(rbind, sols1)
frscore(sols1$condition)
# Real fuzzy-set data from Basurto (2013)
sols2 <- rean_cna(d.autonomy, type="fs", ordering = list("EM", "SP"),
strict = TRUE, maxstep = c(3,3,9))
sols2 <- do.call(rbind, sols2)$condition # there are 217 solutions
# At the default maxsols only 50 of those solutions are scored.
frscore(sols2)
# By increasing maxsols the number of solutions to be scored can be controlled.
frscore(sols2, maxsols = 100)
# Multi-valued data/models (data from Hartmann and Kemmerzell (2010))
# Short reanalysis series, change `attempt` value to mimick a more realistic use case
sols3 <- rean_cna(d.pban, outcome = "PB=1", attempt = seq(0.8, 0.7, -0.1), type = "mv")
sols3 <- do.call(rbind, sols3)$condition
# For mv data, frscore() needs the data to determine admissible factor values
frscore(sols3, dat = d.pban)
# Changing the normalization
frscore(sols2, normalize = "none")
frscore(sols2, normalize = "truemax")
frscore(sols2, normalize = "idealmax")
# verbose
frscore(sols2, maxsols = 20, verbose = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.