FANS Demo

This document calls functions from the FANS script suite to give you a sense of how to analyze data from the FANS/FAoNS questionnaire. The questionaire contains a large number of items detailing liking and experience of the participant concerning nonstandard sexual activities.

We very much welcome both code contributions and comments via our issue tracking system. Please note that to run the following code locally on your machine you first need the code from our repositiry, which you can get by running:

git clone https://github.com/TheChymera/FANS.git /your/desired/destination/path

This file is also included therein, meaning that after you get our code you can easily edit this file.

In the following we will walk you through what FANS can do.

Preliminary Considerents

IPython Imports

First off we want to make sure we can test our code and explore our data live via this document. In order to make IPython automtically reload all imported functions (in case we want to edit them without reloading the entire notebook) we are importing the autoreload cell magic and turning that feature on.

Additionally we will need support for plotting inside this documet. this functionality is provided by the %matplotlib inline cell magic.


In [1]:
%load_ext autoreload
%autoreload 2
%matplotlib inline

FANS Imports

First we need to import our function:


In [2]:
from FANS import fa

Data Import

The analysis function fa() from FANS.py is configured (via gen.cfg) to pull publicly available data from http://chymera.eu/data/FANS/. By default we will be using the latest.csv file (though we have older exports in the folder as well).

To specify the used file explicitly you would use fa(data_file="latest").

Data Cleansing

It has come to our attention, that while the FANS questionnaire provides a visual analogue scale (VAS) with a 100-point resolution, many participants do not adequately rate themselves and consistently stick to values such as 0, 50, and 100. Given the large number of items we find it reasonable to expect at least more than 7 unique response values for each participant.

We filter inadequate participant data via the clean parameter of our function. by default this is set to fa(clean=7)

Item Filtering

Due to the high number of items on the FANS questionnaire, mapping all of them in paralell is not feasible. Additionally, we inquire about both liking and experience. Analyzing these items together would be inadequate, as they correspond to diferent phenomena. To help us filter the items we analyze in any one fa() instance, we use the drop argument. This argument takes a list of strings, specifying sets of items, as defined in the default filters file. For instance, to drop "liking" items and passive behaviour items, you would use fa(drop=["liking", "passive"]). Items identified in the filter file as metadata are dropped by default, independently of the drop argument.

The filtering category "inconclusive" was created to exclude items which relate to women's clothing and the valence of which would be strongly contingent on sexual identity, which we do not analyze in detail here. The filtering category "overly detailed" excludes items where activity and passivity are harder to disentangle (e.g. the usage of sex toys).

Participant Filtering

The fa() function also allows filtering of participants, at present we can filter male, female, even-reply-ordinal, and odd-reply-ordinal participants. The latter two criteria are useful for obtaining roughly unbiased sub-groups for analysis and validation.

Analysis

For demonstrative purposes, and having not yet set up a function for a scree or variance test; we arbitrarily chose to examine 5-factor models.

Integral Question Set

Here we run the fa() function on all participants, excluding either all experience or all liking items, and items which are overly detailed or inconclusive.


In [8]:
fa(drop=["experience","inconclusive","overly detailed"], factors=5) #here we analyze only liking items



In [4]:
fa(drop=["liking","inconclusive","overly detailed"], factors=5) #here we analyze only experience items


In the above graphics we see that factors 1 and 2 are by far the clearest-cut, and indeed, they correspond accurately to the top/bottom, sadism/masochism, master/slave dichotomy. Interestingly, these factor structures do not indicate any top-sadist-master or bottom-masochism-slave difference.

Factor 3 corresponds roughly to exhibitionist tendencies, factor 4 to sensory deprivation and bondage, and factor 5 to "softer" and more commonplace fetishes.

The top/bottom, sadism/masochism, master/slave dichotomy, is particularly unsurprising, and may also have been disproportionately forced by the FANS questionnaire item set (it intentionally included an active/passive formulation for each activity). To better explore underlying factors leading to a preferred type of practices - rather than a preffered mode for all practices - we independently analyze active and passive items.

Active Items


In [5]:
fa(drop=["experience","inconclusive","overly detailed","passive"], factors=5)


Passive Items


In [6]:
fa(drop=["experience","inconclusive","overly detailed","active"], factors=5)