Data Collection Tool
The Data Collection Tool enables participants to draw CAMs. It is constructed to support large-scale online-studies to gather CAM data of many participants (several hundred participants would be no problem).
Asking participants to draw CAMs from scratch may be an ambitious task and participants may not even draw a CAM regarding your intended issue (like your intended topic). Here it might help to predefine concepts to help your participants to draw the intended CAM. Moreover, it may be that researchers would like to control what is being displayed or even possible to do (i.e., draw ambivalent concepts) while drawing CAMs. For example, it be the case that you fear that a large number of possible features would be too demanding (cognitively or from a time perspective) for your participants, you can easily disable certain features, like the ability to draw unidirectional relations or inhibiting connections.
To this end, a "researcher view" of the CAM board was implemented. There, it is possible to create, position and fix (i.e., impossibility to move a concept) elements. Once the structure is ready, click on “export” to create a CAM.json including all the different elements as well as the configuration of the project (see in detail Set up study).
Define your config file
Within the administrative panel, after you have logged in, you can click on the "Data Collection (researcher view)" button at the top. After you have drawn your default CAM, which should be presented to the participants (see details in Set up study), you can click on the "gear symbol" (top left) to define the configuration of your CAM study.
Parameter you can change using the user interface:
Parameter | Meaning | Possible values |
---|---|---|
#MinNumNodes | Number of concepts a participant needs to draw before she / he is can save the CAM. |
1-501 |
#MaxNumWords | Maximum number of words allowed for each concept. | 1-52 |
#MaxLengthChars | Maximum number of characters allowed for each concept. | 30-300 |
#enableArrows | If ON possible to draw arrows / directed connections. | ON / OFF |
#BidirectionalDefault | Only makes sense if #enableArrows is set to ON, as default the drawn connection is bidirectional. |
ON / OFF |
#OnlyStraightCon | If ON possible to draw supporting connections. | ON / OFF |
#enableAmbivalent | If ON possible to draw ambivalent concepts. | ON / OFF |
#cameraFeature | If ON a splotlight feature is included to move the drawing screen. If participants move their mouse to the edges the drawing screen is moved to the respective side. |
ON / OFF |
#fullScreen | If ON study is set to fullscreen mode and paradata is collected (defocus, focus events). |
ON / OFF |
#setLanguage | Set the language of the interface of the data collection tool: |
English, German, Spanish, Chinese |
1Maxmimum number is restricted because the drawing space is limited. In the future, 3D environments will be implemented.
2It is highly recommended to set this value to 1-3 if you are aiming to summarize / aggregate the CAM data. Instruct participants to avoid writing sentences and to draw instead multiple concepts.
Remark: It is not recommended to write directly into the config file. Certain configurations are set to default values and should not be changed. By programming your CAM on scratch you are able to set reminders to program even adaptive designs.
Data-structure of CAMs
The CAM itself is a Java Script object which is temporarily stored on the client-side. Every CAM, concept or connector is a Java Script class, whereby the constructor is initializing a single instance of that respective class. Within the arrays nodes
and connectors
, all the drawn (or deleted) concepts (nodes) respective connectors (edges) are stored.
In the following, all the parameters of the constructor of the CAM, concept and connector is explained:
Cognitive-Affective Map has the following data structure when initialized, whereby the single parameters are explained below (in the browser console call "CAM"):
constructor() {
this.idCAM = uuid.v4();
this.creator = uuid.v4();
this.projectCAM = config.CAMproject;
this.defocusCAM = null;
this.date = (new Date).getTime();
this.nodes = [];
this.connectors = [];
this.currentID = null;
this.currentNode = null;
this.hasSelectedNode = false;
this.currentConnector = null;
this.hasSelectedConnector = false;
this.readyToMove = false;
this.isIncoming = false;
}
Parameter | Meaning | Application |
---|---|---|
idCAM | Random character string (ID) that is assigned by the data collection tool to the CAM. |
Unique identifier. |
creator | Character string that is stored by the researcher. |
Unique ID to identify participants between study parts. |
projectCAM | Name of current project. | internal (information not needed) |
defocusCAM | Array which stores defocus events, when #fullScreen is set to TRUE |
Check if a participant left fullscreen during the CAM study part. |
date | Date of CAM initialization. | Starting point of drawing the CAM. |
nodes | Array which stores all concepts. | Array includes visible and deleted concepts. |
connectors | Array which stores all connectors. | Array includes visible and deleted connectors. |
currentID | Get currrent ID of (open dialog) element. | internal |
currentNode | Get focused concepts. | internal NULL if no concept is clicked on. |
hasSelectedNode | TRUE if participant focused a concept. |
internal |
currentConnector | Get focused connectors. | internal NULL if no connector is clicked on. |
hasSelectedConnector | TRUE if participant focused a connector. |
internal |
readyToMove | TRUE if concept (single click) is ready to move. |
internal to validate the process of moving concepts |
isIncoming | internal (tried out WebSocket) | internal to enable simultaneous collaboration |
Concepts (nodes) drawn in CAM have the following data structure, whereby the single parameters are explained below (in the browser console call "CAM.nodes"):
constructor(value, text, position, isDraggable = true, isDeletable = true, isTextChangeable = true) {
this.id = uuid.v4();
this.value = value;
this.text = text;
this.comment = "";
this.position = position;
this.isActive = true;
this.date = (new Date).getTime();
this.kind = "Node";
this.isSelected = false;
this.isConnectorSelected = false;
this.isDraggable = isDraggable;
this.isDeletable = isDeletable;
this.hasElementMoved = false;
this.eventLog = [];
this.isTextChangeable = isTextChangeable;
}
Parameter | Meaning | Application |
---|---|---|
id | Random character string that is assigned by the data collection tool for each drawn concept. |
Unique identifier. |
value | Valence given by the participant ranging from [-3,3]. |
To compute the average valence of a CAM. |
text | Text written by the participant. | Get meaning of drawn concept. |
comment | Comment given by the participant. | Support interpretation of drawn concept. |
position | {x:,y:} coordinate of the concept. |
To compute the distance between concepts. |
isActive | TRUE statement if concept was not deleted. |
All deleted concepts are not visible and marked by a FALSE statement. |
date | Date of creation. | Trace the sequence of the drawing process. |
kind | Type of element. | internal |
isSelected | If current concept is selected. | internal |
isConnectorSelected | If connector adjacent to concept is selected. | internal |
isDraggable | If concept is moveable. | Defined by researcher in advance. |
isDeletable | If concept is deletable. | Defined by researcher in advance. |
hasElementMoved | Controls if the element has been moved or just selected. |
internal |
eventLog | Every interaction with the concept is recorded. |
Create animated videos of drawing process. |
isTextChangeable | If text of concept is changeable. | Defined by researcher in advance. |
Connectors (edges) drawn in CAMs have the following data structure, whereby the single parameters are explained below (in the browser console call "CAM.connectors"):
constructor(isDeletable = true) {
this.id = uuid.v4();
this.value = null;
this.source = null;
this.target = null;
this.agreement = null;
this.isActive = null;
this.date = (new Date).getTime();
this.kind = "Connector";
this.isSelected = false;
this.intensity = IncreaseSliderIntensity;
this.isDeletable = isDeletable;
this.isOver = false;
this.isBidirectional = true;
this.eventLog = [];
}
Parameter | Meaning | Application |
---|---|---|
id | Random character string that is assigned by the data collection tool for each drawn connector. |
Unique identifier. |
value | Strength of connector given by the participant ranging from [-3,3]. |
Compute network indicators of weighted network and check type of connection. |
source | Outgoing connection of a concept to a target. | internal (indicate a directional relationship) |
target | Incoming connection of a concept from a source. | internal |
agreement | Shape of connecting line (solid = strengthening connections, dashed = inhibitory connections). |
Solid lines have positive values [1,3], dashed lines have negative values [-3,-1] |
isActive | TRUE statement if connector was not deleted. |
All deleted connectors are not visible and marked by a FALSE statement. |
date | Date of creation. | Trace the sequence of the drawing process. |
kind | Type of element. | internal |
isSelected | If current connector is selected. | internal |
intensity | Thickness of line. | internal defined by global variable "IncreaseSliderIntensity" |
isDeletable | If concept is deletable. | Defined by researcher in advance. |
isOver | If mouse if hovering over connection. | internal to highlight connection |
isBidirectional | TRUE if connection is bidirectional. |
To differentiate between uni- and bidirectional connections. |
eventLog | Every interaction with the connector is recorded. |
Create animated videos of drawing process. |
Implemented features
The following features are implemented to increase data quality:
- a participant cannot save the CAM if any of the configurations regarding
#MinNumNodes
,#MaxNumWords
and#MaxLengthChars
is violated - by applying the breadth-first search algorithm it is prevented that participants can save CAMs with disconnected components (cluster of concepts)
- the predefined concepts cannot be moved if
isDraggable
is set to FALSE, cannot be deleted ifisDeletable
is set to FALSE and text cannot be changed ifisTextChangeable
is set to FALSE - the predefined connectors cannot be deleted if
isDeletable
is set to FALSE
=> If a participant violates any of the configurations a pop-up informs the participants what she / he has done wrong.
Using the Java Script library Cytoscape all kinds of additional real-time pre- or post-processing analysis are possible in real-time and it is possible to implement adaptive study designs (see example study section).
Future features
Multiple extensions of the data collection tool are currently tested: currently we are implementing simultaneous collaboration, as such that more than one person can work on the identical CAM at the same time. Tweaking the software it was already possible to run sequential collaboration studies, whereby a CAM is consecutively changed. A graphical database (e.g. using Neo4j) was recently implemented. Using Neo4j queries can be made directly on summarized CAM data, e.g., “How often was the concept "own car" associated with "flexibility"?”. Finally 3D visualizations for large CAMs are set up (e.g. using Unity also virtual reality experiment would be possible).
If you are missing a specific feature for your study and do not know how to implement it, we are happy to hear from you: cam.contact@drawyourminds.de