Methodology

Social scientists place a great deal of value on methodology yet most collect data that is frequently superficial and few make serious efforts to collect the best quality information from those they interview. A much discussed fallacy, the empiricist fallacy involves the assumption that what respondents tell their interviewer is either the truth (a beginner’s mistake) or the best information they can provide (an obvious error despite its commonality). Quick answers to questions posed are more likely to be either lies or efforts to enunciate some supposed fact that will satisfy the interviewer. Focus groups were developed to address some of these issues by getting groups of people to discuss and evaluate issues of general concern in greater depth.

Here I would like to add a methodology of use in focus group based research. One of the obstacles to eliciting local knowledge is the pronounced tendency in focus groups to allow important people to push consensus positions and many research assistants in my work across Africa have favored recording the consensus more assiduously than the alternative viewpoints. To facilitate the collection of a diversity of viewpoints and knowledge it helps to record a multiplicity of ideas and then ask each member of a focus group to rank these items in terms of importance. My custom has been to have separate focus groups segregated by age and gender and then collect individul rankings of issues for each group. Using a Binary Pairs ranking program makes it relatively easy to amalgamate all rankings e.g. all young men, all young or old women, all focus group members. This method provides considerably more useful information than simple analysis of notes from focus group discussions. The focus group elicits more thorough discussion but it has a tendency to devolve toward a consensus based on authority rather than providing a maximum of information or a diversity of opinion.

I have attached a Perl script that works on most computers for those who wish to pursue this methodology. Since the idea of binary pairs ranking was introduced by the Marquis de Condorcet in 1786 I think of it as his idea. The script takes a series of individual rankings and produces an overall ranked list using logic rather than arithmetic. The script takes two input files (a candidate file and a vote file/list of each voter rankings) and produces an output file giving the logical amalgamated rankings using a binary pairs calculation. Comments in the code provide formatting details for these files. Place files in same folder as the Perl program or provide paths for the files. Typical use of cardinal numbers and arithmetic can easily produce a second or lower ranked candidate being preferred by the majority of voters over the candidate ranked “first.” Logic and Binary Pairs suggest such a result is a travesty yet logic is more difficult than addition so it is a difficult sell to simple folk.

#!/usr/bin/env perl

#

# condorcet.pl (c) 2009 Geoffrey Park

#

# This perl script tabulates and ranks votes using a Condorcet method (binary pairs).

#

# See http://en.wikipedia.org/wiki/Condorcet_method

#

# * Input is a candidate file and a votefile.

#

# * The candidate file has one candidate per line, formatted as:

# abr=name

# where abr is a short, unique abreviation, and name is candidates' full name.

#

# * The vote file contains one vote per line.

# Each vote ranks several options in order of decreasing preference from left to right.

# Options are comma separated lists of candidate abreviations.

#

# Note: The candidate abreviations should be unique, and none should be a subset of another.

#

# For example:

# A,B,C,D

# D,C,B,A

# B,A,C,D

# …

my $nArgs = $#ARGV+1;

if($nArgs == 0)

my @candidates = ("A");

open(CANDIDATEFILE, $ARGV[0]) or die "Can't open $ARGV[0]: $!";

#read the candidate file:

my $nCandidates = 0;

print "nCandidates: nn";

while()

close CANDIDATEFILE;

@candidates[$nCandidates] = "";

print "nn";

print "Total ",$nCandidates," Candidates.n";

my @rank=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

my @votetab;

my @binarymtx;

open(VOTEFILE, $ARGV[1]) or die "Can't open $ARGV[1]: $!";

# initialize the matrices:

for(my $i=0;$i<$nCandidates*$nCandidates;$i++)

#read the vote file:

while()

close VOTEFILE;

#print totals matrix:

print "nTotals:n ";

for($i=0;$i<$nCandidates;$i++)

print "n";

for($i=0;$i<$nCandidates;$i++)

#calculate binary matrix:

for($i=0;$i<$nCandidates;$i++)

#print binary matrix:

print "nBinary:n ";

for($i=0;$i<$nCandidates;$i++)

print "n";

for($i=0;$i<$nCandidates;$i++)

#clear rank list:

for($i=0;$i<$nCandidates;$i++)

#count binary wins:

for($i=0;$i<$nCandidates;$i++)

#final ranking:

my @result;

for($i=0;$i<$nCandidates;$i++)

#remove trailing '=', so they only apear in ties:

foreach (@result)

#remove leading '>':

my $first = 1;

for($i=0;$i<$nCandidates;$i++)

print "nranking: ";

print @result;

print "n"