Experiment data (non-video)

What data can I access?

You can access: - response data from responses for which you have confirmed consent in the Consent Manager - account, demographic, and child data from those responses: you will see these accounts under ‘Manage Participants’; if some siblings but not others have participated in one of your studies and you have confirmed consent, you will only see those siblings.

Accessing experiment data

You can see and download collected responses either via the Lookit experimenter interface or using the API.

A researcher with edit permissions for a particular study can download session data in JSON or CSV format via the Experimenter interface. A session record in a Postgres database is created each time a participant starts the study, and includes a timestamp, account information, condition assignment, the sequence of frames the participant actually saw, and frame-specific information for each frame (included in an ‘expData’ structure which is a JSON object with keys corresponding to frame nicknames as defined in the study definition JSON). Each frame type may save different data, e.g. form responses; frames that record webcam video include the video filename(s). The data captured by a particular frame are listed in the frame documentation at http://lookit.github.io/ember-lookit-frameplayer, under ‘Methods’ > ‘serializeContent’. Additionally, event data is captured for each frame and included under an eventTimings key within the frame data JSON, minimally including a timestamped event when the user proceeds to the next frame. These events are listed under ‘Events’ in the documentation.

Structure of session data

The data saved when a subject participates in a study varies based on how that experiment is defined. For concreteness, let’s start by looking at an example of the data you can download about a single session. (The eventTimings objects have been shortened to show just a single event.)

{
    "response": {
        "id": 1190,
        "uuid": "d96b3ba5-6806-4c09-86e2-77456163eb5a",
        "sequence": [
            "0-video-config",
            "1-video-consent",
            "2-instructions",
            "3-mood-survey",
            "4-pref-phys-videos",
            "5-exit-survey"
        ],
        "conditions": {
            "4-pref-phys-videos": {
                "showStay": 18,
                "startType": 21
            }
        },
        "exp_data": {
            "3-mood-survey": {
                "active": "4",
                "rested": "1",
                "healthy": "2",
                "eventTimings": [
                    {
                        "eventType": "exp-mood-questionnaire:nextFrame",
                        "timestamp": "2018-07-06T23:56:06.459Z"
                    }
                ]
            },
            "0-video-config": {
                "eventTimings": [
                    {
                        "pipeId": "",
                        "videoId": "videoStream_0f620873-2847-4eeb-9854-df7898934c17_0-video-config_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921299537_405",
                        "eventType": "exp-video-config:recorderReady",
                        "timestamp": "2018-07-06T23:54:59.548Z",
                        "streamTime": null
                    }
                ]
            },
            "2-instructions": {
                "eventTimings": [
                    {
                        "eventType": "exp-physics-intro:nextFrame",
                        "timestamp": "2018-07-06T23:55:53.530Z"
                    }
                ]
            },
            "1-video-consent": {
                "videoId": "videoStream_0f620873-2847-4eeb-9854-df7898934c17_1-video-consent_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921346557_292",
                "videoList": [
                    "videoStream_0f620873-2847-4eeb-9854-df7898934c17_1-video-consent_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921346557_292"
                ],
                "eventTimings": [
                    {
                        "pipeId": "",
                        "videoId": "videoStream_0f620873-2847-4eeb-9854-df7898934c17_1-video-consent_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921346557_292",
                        "eventType": "exp-video-consent:recorderReady",
                        "timestamp": "2018-07-06T23:55:46.558Z",
                        "streamTime": 0
                    }
                ]
            },
            "5-exit-survey": {
                "feedback": "",
                "birthDate": "2018-07-03T04:00:00.000Z",
                "useOfMedia": "private",
                "withdrawal": false,
                "eventTimings": [
                    {
                        "eventType": "exp-exit-survey:nextFrame",
                        "timestamp": "2018-07-06T23:57:02.201Z"
                    }
                ],
                "databraryShare": "no"
            },
            "4-pref-phys-videos": {
                "videoId": "videoStream_0f620873-2847-4eeb-9854-df7898934c17_4-pref-phys-videos_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921371545_923",
                "videoList": [
                    "videoStream_0f620873-2847-4eeb-9854-df7898934c17_4-pref-phys-videos_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921371545_923"
                ],
                "videosShown": [
                    "https://s3.amazonaws.com/lookitcontents/exp-physics-final/stimuli/stay/webm/sbs_stay_near_mostly-on_book_c2_green_NN.webm",
                    "https://s3.amazonaws.com/lookitcontents/exp-physics-final/stimuli/stay/webm/sbs_stay_mostly-on_near_book_c2_green_NN.webm"
                ],
                "eventTimings": [
                    {
                        "pipeId": "",
                        "videoId": "videoStream_0f620873-2847-4eeb-9854-df7898934c17_4-pref-phys-videos_d96b3ba5-6806-4c09-86e2-77456163eb5a_1530921371545_923",
                        "eventType": "exp-video-physics:recorderReady",
                        "timestamp": "2018-07-06T23:56:11.549Z",
                        "streamTime": 0
                    }
                ]
            }
        },
        "global_event_timings": [],
        "completed": true
    },
    "study": {
        "id": 12,
        "uuid": "0f620873-2847-4eeb-9854-df7898934c17"
    },
    "participant": {
        "id": 3047,
        "uuid": "31692a6c-df1e-47e1-8ad0-e2780d095c05",
        "nickname": "Kim"
    },
    "child": {
        "id": 3749,
        "uuid": "470a0d33-77ee-4dd5-a64e-ec7231f23913",
        "name": "ExperimenterChild",
        "birthday": "2018-02-05",
        "gender": "f",
        "age_at_birth": "30",
        "additional_information": "Test child"
    }
}

There are four top-level keys in this data: response, study, participant, and child. Study, participant, and child information should be fairly self-explanatory: which study does this response pertain to, which family account created the response, and which child was participating. (The child key age_at_birth refers to gestational age in weeks at birth.) The response data contains information concerning this particular session: when it happened, what condition the child was assigned to, events that happened as the family proceeded through the study, etc. The response properties are described below:

  • id: short unique ID for the response
  • uuid: long unique ID for the response (should be used as primary identifier)
  • sequence: The sequence of frames the subject actually saw (after running randomization, etc.). Does not include frames skipped if they left early. The frame names follow the pattern <order>-<frame.id>, where <order> is the order in the overall sequence where this frame appeared, and <frame.id> is the identifier of the frame as defined in the ‘frames’ property of the experiment structure.
  • conditions: An object containing information about conditions to which the subject was assigned in any frames that do randomization (choice frames). Keys are in the format <order>-<frame.id> corresponds with the <order> from the ‘sequence’ of the original experiment structure, and the <frame.id> again corresponds with the identifier of the frame as defined in the ‘frames’ property of the experiment structure. Data will be stored in conditions for the first frame created by a randomizer (top-level only for now, i.e. not from nested randomizers). Values are objects containing mappings from condition names to their values for this session. The data stored by a particular randomizer can be found under methods: conditions in the randomizer documentation
  • global_event_timings: A list of events recorded during the study, not tied to a particular frame. Currently used for recording early exit from the study; an example value is:
[
            {
                "exitType": "manualInterrupt",
                "eventType": "exitEarly",
                "timestamp": "2018-07-06T23:56:55.282Z",
                "lastPageSeen": 10
            }
]
  • completed: A true/false flag indicating whether or not the participant submitted the last frame of the study. Note that this may not line up with your notion of whether the participant completed the study, in two ways: first, completed will be true even if the participant leaves early, as long as they submit the exit survey which they skip to when pressing F1. Second, completed will be false if they don’t submit that exit survey, even if they completed all of the important experimental parts of the study.
  • exp_data: A JSON object containing the data collected by each frame in the study. More on this to follow.

Interpreting exp_data

Here’s an example of data collected during a session (note: not all fields are shown):

{
    "sequence": [
        "0-intro-video",
        "1-survey",
        "2-exit-survey"
    ],
    "conditions": {
        "1-survey": {
            "parameterSet": {
                "QUESTION1": "What is your favorite color?",
                "QUESTION2": "What is your favorite number?"
            },
            "conditionNum": 0
        }
    },
    "exp_data": {
        "0-intro-video": {
            "eventTimings": [{
                "eventType": "nextFrame",
                "timestamp": "2016-03-23T16:28:20.753Z"
            }]
        },
        "1-survey": {
            "formData": {
                "name": "Sam",
                "favPie": "pecan"
            },
            "eventTimings": [{
                "eventType": "nextFrame",
                "timestamp": "2016-03-23T16:28:26.925Z"
            }]
        },
        "2-exit-survey": {
            "formData": {
                "thoughts": "Great!",
                "wouldParticipateAgain": "Yes"
            },
            "eventTimings": [{
                "eventType": "nextFrame",
                "timestamp": "2016-03-23T16:28:32.339Z"
            }]
        }
    }
}

exp_data is an object with three keys that correspond with the frame names from ‘sequence’. Each of the associated values has an eventTimings property. This is a place to collect user-interaction events during an experiment, and by default contains the ‘nextFrame’ event which records when the user progressed to the next frame in the ‘sequence’. You can see which events a particular frame records by looking at the ‘Events’ tab in its frame documentation. Events recorded by a frame that does video recording will include additional information, for instance to indicate when relative to the video stream this event happened.

The other properties besides ‘eventTimings’ are dependent on the frame type. You can see which other properties a particular frame type records by looking at the parameters of the serializeContent method under the ‘Methods’ tab in its frame documentation.