Learn R Programming

QCA (version 1.1-2)

superSubset: Find Superset and Subset Relations

Description

This function finds all combinations of conditions among all possible combinations that optimize the fulfilment of the specified criteria set for a superset (necessity) or subset (sufficiency) relation to the outcome with respect to their complexity.

Usage

superSubset(data, outcome = "", neg.out = FALSE, conditions = c(""), 
            relation = "nec", incl.cut = 1, cov.cut = 0, 
            use.tilde = FALSE, use.letters = FALSE, ...)

Arguments

data
A data set of bivalent crisp or fuzzy set variables or multivalent crisp set variables.
outcome
The name of the outcome set.
neg.out
Logical, use negation of outcome set.
conditions
A vector of condition sets.
relation
The set relation of the conditions to the outcome, either "nec", "suf", "necsuf" or "sufnec".
incl.cut
The minimal inclusion score of the set relation.
cov.cut
The minimal coverage score of the set relation.
use.tilde
Logical, use tilde for negation with bivalent variables.
use.letters
Logical, use letters instead of set names.
...
Other arguments for backward compatibility.

Value

  • An object of class "ss", which is a list with the following components:
  • incl.covA data frame with the parameters of fit.
  • comsA data frame with the combination membership scores.

Details

This function returns a list of those of the $\prod_{j = 1}^{k}{(p_{j} + 1) - 1}$ potential value combinations, where $p_{j}$ is the number of values for condition variable $j$ and $k$ is the number of condition variables, that define minimal condition sets for the specified inclusion (consistency) and coverage score cut-offs with respect to an outcome. The following paragraphs describe the theoretical idea. If relation = "nec" (default), the function finds (combinations of) conditions that are supersets of (necessary for) the outcome. It starts with an initiation set, which is comprised of all $\sum_{j = 1}^{k}{p_{j}}$ simple condition sets. This set is expanded by incrementally forming set-theoretic intersections of a higher order as long as incl.cut and cov.cut are still met (the former always takes precedence over the latter). If suitable intersections exist, they will be returned, together with all their lower-order components. If none of the simple conditions or their negations in the initiation set passes incl.cut, set-theoretic unions instead of intersections are formed until incl.cut and cov.cut will have been met. Only the unions thus found will be returned, but not their components. Note that this approach for finding minimally necessary combinations differs from the one suggested by Bol and Luppi (2013). If relation = "suf", the function finds (combinations of) conditions that are subsets of (sufficient for) the outcome. The initiation set is comprised of all $\prod_{j = 1}^{k}{p_{j}}$ intersections of order $k$. This set is reduced by incrementally forming intersections of a lower order as long as incl.cut and cov.cut are still met. Only the intersections of the lowest order will be printed. For more details, see Thiem and Dusa (2013). For relation = "necsuf" and relation = "sufnec", incl.cut will be applied to each relation and cov.cut has no effect. The argument outcome specifies the outcome to be explained. Outcomes from multivalent variables require curly-bracket notation (X{value}). The logical argument neg.out controls whether outcome is to be explained or its negation. If outcome is from a multivalent variable, neg.out = TRUE has the effect that the union of all remaining values becomes the new outcome to be explained. The argument conditions specifies the condition variables. If omitted, all variables in data are used except outcome. The argument use.tilde only applies to bivalent set variables. If the conditions are already named with single letters, the argument use.letters has no effect. For backward compatibility, the logical argument PRI returns PRI (proportional reduction in inconsistency) scores (see Schneider and Wagemann 2012, pp. 241-249; Thiem and Dusa 2013, pp. 63-64, 78-79). However, note that direct tests on negated outcomes and/or conditions should be preferred.

References

Bol, Damien, and Francesca Luppi. 2013. Confronting Theories Based on Necessary Relations: Making the Best of QCA Possibilities. Political Research Quarterly 66 (1):205-10. Emmenegger, Patrick. 2011. Job Security Regulations in Western Democracies: A Fuzzy Set Analysis. European Journal of Political Research 50 (3):336-64. Hartmann, Christof, and Joerg Kemmerzell. 2010. Understanding Variations in Party Bans in Africa. Democratization 17 (4):642-65. Krook, Mona Lena. 2010. Women's Representation in Parliament: A Qualitative Comparative Analysis. Political Studies 58 (5):886-908. Schneider, Carsten Q., and Claudius Wagemann. 2012. Set-Theoretic Methods for the Social Sciences: A Guide to Qualitative Comparative Analysis (QCA). Cambridge: Cambridge University Press. Thiem, Alrik, and Adrian Dusa. 2013. Qualitative Comparative Analysis with R: A User's Guide. New York: Springer.

See Also

pof

Examples

Run this code
# csQCA using Krook (2010)
#-------------------------
data(d.Kro)
head(d.Kro)

# find all minimally necessary combinations with an inclusion score 
# of at least 0.9 and coverage score of at least 0.65 
Kro.ss <- superSubset(d.Kro, outcome = "WNP", incl.cut = 0.9, 
  cov.cut = 0.65)
Kro.ss

# Venn diagram of combinations;
# first extract membership scores
head(Kro.coms <- Kro.ss$coms)

require(VennDiagram)
vn.Kro.nec <- venn.diagram(
 x = list(
  "WNP" = which(d.Kro$WNP == 1),
  "wm+LP" = which(Kro.coms[, 1] == 1),
  "WS+LP" = which(Kro.coms[, 2] == 1),
  "ES+LP" = which(Kro.coms[, 3] == 1)),
 filename = NULL,
 cex = 2.5, cat.cex = 2, cat.pos = c(-10, 10, 0, 0),
 cat.dist = c(0.25, 0.25, 0.12, 0.12),
 fill = gray(c(0.3, 0.5, 0.7, 0.9))
)
grid.draw(vn.Kro.nec)

# mvQCA using Hartmann and Kemmerzell (2010)
#-------------------------------------------
data(d.HK)
head(d.HK)

# find all minimally necessary combinations with perfect inclusion
HK.ss <- superSubset(d.HK, outcome = "PB", 
  conditions = c("C", "F", "T", "V"))
HK.ss

# combination membership scores for all cases (only first ten lines)
HK.ss$coms[1:10, , drop = FALSE]

# fsQCA using Emmenegger (2011)
#------------------------------
data(d.Emm)
head(d.Emm)

# find all minimally sufficient combinations with an inclusion score 
# of at least 0.9 and coverage score of at least 0.4; also return 
# PRI (proportional reduction in inconsistency) scores 
Emm.ss <- superSubset(d.Emm, outcome = "JSR", relation = "suf", 
  incl.cut = 0.9, cov.cut = 0.4, PRI = TRUE)
Emm.ss

# same criteria, but for the negation of the outcome
Emm.ss.n <- superSubset(d.Emm, outcome = "JSR", neg.out = TRUE, 
  relation = "suf", incl.cut = 0.9, cov.cut = 0.4, use.tilde = TRUE)
Emm.ss.n

# plot all four combinations
head(Emm.coms <- Emm.ss.n$coms)
par(mfrow = c(2, 2))
for(i in 1:4){
 plot(Emm.coms[, i], 1 - d.Emm$JSR, pch = 19, ylab = "~JSR",
  xlab = names(Emm.coms)[i], xlim = c(0, 1), ylim = c(0, 1),
  main = paste("Combination", print(i)))
 mtext(paste(
  "Inclusion = ", round(Emm.ss.n$incl.cov$incl[i], 3),
  "; Coverage = ", round(Emm.ss.n$incl.cov$cov[i], 3)), 
  cex = 0.7, line = 0.4)
 abline(h = 0.5, lty = 2, col = gray(0.5))
 abline(v = 0.5, lty = 2, col = gray(0.5))
 abline(0, 1)
}

Run the code above in your browser using DataLab