Data Quality & Limitations

The data-quality signals that SMAAT records, where they are shown, and the limits to consider when interpreting them. Most of these views are on the study's Quality and Burden tabs.

The Quality Centre

Open a study and select the Quality tab. The page, labelled Quality Centre and headed Data & Compliance Quality, has four tabs: Compliance, Missing Data, Data Quality and Change Log. The tab is available to the study author and to project collaborators with data access. Plan-dependent parts follow the plan of the study author.

Quality Centre of a study with the Compliance, Missing Data, Data Quality and Change Log tabs, summary cards for average compliance, at-risk participants, surveys sent and surveys completed, and a per-participant compliance table.
The Quality tab, opened on the Compliance tab, with summary cards and the per-participant compliance table.

Compliance tab

Compliance (the share of prompts a participant answers) is summarised in four cards: Avg compliance, At-risk participants, Surveys sent and Surveys completed. On this tab, a participant's compliance is the number of survey notifications with the status Completed divided by the number of survey notifications sent in the selected period. Announcements are not counted. The average is the mean of the participants' rates.

The per-participant table requires the Basic plan or above. Buttons select the period (7 days, 14 days, 30 days, All time; default 14 days). Participants below the At-risk below percentage count as at risk. It starts at the study's Compliance Alerts threshold (70 % if none was saved) and can be changed on the page, and Show at-risk only limits the table to them. The columns are Participant, Status, Enrolled, Last active, Sent, Done, Compliance and a 7-day trend with one dot per day: 80 % or more, 60 to 79 %, below 60 %, or no surveys that day.

Two compliance measures: the Compliance tab counts a prompt as answered once its survey is completed. The Complied column of the response export is stricter: it is true only when the server received the response within the response window of the notification schedule (see Offline operation).

Missing data and notification status

Every scheduled prompt is stored as a notification record with a status: Scheduled, Sent, Delivered, Opened or Completed, or Failed to deliver or Canceled. When a prompt is completed or canceled, or when its response window has closed, SMAAT assigns it one outcome that explains the result: Completed, Started, not completed, Delivery failed (server), Not delivered to device, Dismissed, Ignored, Ignored after reminders, App error, Canceled or Pending.

The Missing Data tab shows the study-wide figures (Total prompts, Completed, Response rate, Delivery issues, Pending) and a chart of prompts by outcome, a daily chart of Completed, Missed and Pending prompts, and a per-participant table (Participant, Prompts, Completed, Missed, Pending, Response rate, Issues). Each row links to the participant's prompt timeline.

Sent means that the push service accepted the message. Delivered is set by a receipt check that runs between 15 minutes and 24 hours after sending: it means that the push receipt reported the message as handed over to Apple's or Google's push notification service. It does not confirm that the message reached the phone or that the participant saw it.

Note: whether a notification was received or dismissed on the phone can be reported only when the operating system allows it. This is usually not possible while the app is fully closed, and dismissal reporting works mainly on iOS. The distinction between Dismissed and Ignored is therefore a best-effort classification.
App errors: if the app is terminated during a survey (crash, force-quit or low memory), SMAAT detects the abnormal termination on the next launch and records the prompt as App error, so that a technical failure is not counted as a deliberate non-response.

Offline operation and timestamp integrity

The app works offline. Surveys can be opened and completed without a connection; responses and sensor data are held in a queue on the phone and uploaded when a connection is available.

Each response carries timestamps from two clocks: the device time of the events (start, completion and each answer) and the server time of arrival. Compliance is decided with the server clock: a response counts as complied when the server receives it within the response window after the notification was sent. Responses that no window applies to (self-initiated surveys, geofence and place-visit triggers, and schedules without a response window) count as complied, with a window of 0. An incorrect device clock therefore cannot change compliance. A survey that was completed on time while offline but uploaded after the window closed is marked as not complied, and its ResponseTimeS includes the upload delay. Compare CompletedAt (device clock) with the notification time if offline completion matters for your analysis.

Sync delay is not tampering. A response collected offline and uploaded hours later has a large gap between its device completion time and the server arrival time. SMAAT measures clock skew (the difference between the device clock and the server clock) separately, using a device timestamp taken at the moment of upload, so offline uploads are not flagged. Each response is classified as OK, Clock skew, Inconsistent (internally impossible timestamps, for example completed before started) or Unverified (an older app version that does not report the upload time).

The Data Quality tab of the Quality Centre shows these results in the Timestamp integrity card (Verified OK, Clock skew, Inconsistent, Unverified, Max clock offset). The card counts all datasets, including those excluded from analysis, but it is shown only while at least one dataset is included. The long-format export contains the underlying columns ClientSentAt, ClockOffsetS, SyncDelayS and TimeIntegrity. Flagged responses stay in the dataset; to exclude them, clear Include in Analysis on the Data Overview tab.

Screening for careless responding

Besides the timestamp card, the Data Quality tab contains three screening aids. They use the datasets included in analysis. They flag submissions but do not exclude any data.

  • Completion Time Distribution: the time from the first to the last answered question of each submission, as a histogram (from under 10 seconds to over 5 minutes) with the median. When at least five submissions have timing information, submissions at or below the 10th percentile are flagged as Suspiciously fast and those at or above the 90th percentile as Unusually slow.
  • Response Pattern Analysis: submissions with at least three Likert, choice, slider or number answers are checked for straight-lining (the same answer to every item) and for low answer variety (few distinct answers among five or more items).
  • Dropout Funnel: how many participants completed at least one survey, at least two, the median number and the 75th-percentile number of surveys, and the maximum; and how many were active in the last 7 days.
Plans: on the Free plan, each of these tables shows its first five rows. The Quality Centre cannot decrypt data, so for encrypted responses the completion time and answer pattern cannot be assessed and are marked as unknown or encrypted.

Mid-study changes: versioning and change log

A study can be changed while it is running. Each answer stores the question text as it was shown to the participant, so later edits do not rewrite past responses. The order of the screens as presented to the participant, including randomised order, is also stored with each response; it is available in the Data Explorer as the column _screen_order and is not part of the file exports.

Each survey also has a version number. A structural change to a survey while the study is Active increases the version, and each response records the version it was collected under. The Change Log tab lists who changed what and when, with the labels Survey edited (with the version change), Config changed and Status changed.

Tip: edits made while the study is a Draft are not versioned; the version starts at 1 when the study goes live. To analyse versions separately, use the SurveyVersion column. It is included in the long-format CSV and the Responses sheet of the Excel export, but not in the JSON, wide-format CSV or SPSS exports.

Participant burden: the Burden Centre

The Burden tab of a study (labelled Burden Centre and headed What this study asks of participants) estimates the time and effort a design asks of each participant. It combines survey length, prompt frequency, study duration and passive sensing, and compares the result with published benchmarks for experience sampling (ESM) studies, in which participants answer short surveys several times a day in daily life. Ecological momentary assessment (EMA) is another name for the same method. A badge in the heading summarises the severity of the findings. The estimate is available for draft studies; measured values are added once responses arrive.

Burden Centre of a study with the Overview, Breakdown, What-if and Evidence and Export tabs, headline figures for time per day, prompts per day, study length and total commitment, and a list of findings.
The Burden tab, Overview: estimated burden per participant, projected compliance and findings ranked by severity.
  • Overview: time per day, prompts per day, study length and total commitment estimated from the protocol, schedule and sensor configuration; a projected compliance looked up from published EMA studies (a benchmark, not a model of this study); a burden profile per dimension; and findings ranked by severity. Once responses arrive, Planned against observed compares the estimate with measured time per prompt, minutes per day and compliance.
  • Breakdown: each survey's contribution to the daily total and, with data, measured completion times (median, 90th percentile), compliance across study days and burden per participant.
  • What-if: change prompts per day, items per prompt and study length to see the effect on time per day, total commitment, total prompts, projected compliance and the findings. The study itself is not changed.
  • Evidence & Export: the time-commitment text for participants, which the study author can add to the informed consent with Add to informed consent (it is appended to the nature, purpose and duration section and shown on the join screen of the app); a burden statement for ethics applications or pre-registration, with Copy text and Download (Markdown file); the thresholds applied; and the sources, among them Wrzus & Neubauer (2023) and Eisele et al. (2022).

AI conversational item: data handling

The conversational (AI) question type is disabled by default. No data are sent to an AI provider unless a provider key is configured for the study and a survey contains such an item. Conversations are stored under the same protections as other responses.

Third-party processing: generating replies and extracting structured answers requires sending the conversation to an external language-model provider. Each study uses the researcher's own provider account, so the provider's handling of the data (retention, training, data residency) is governed by the researcher's agreement with that provider. Disclose AI and third-party processing in the consent materials and avoid asking for identifying information that the study does not need.
Governance settings are in the Study Builder under Settings → AI. Provider base URL points the item at any OpenAI-compatible provider, for example a gateway or an EU-hosted, zero-retention or self-hosted endpoint; select Custom (other provider)… under Model and enter that provider's model ID. Participant AI disclaimer sets a text shown before the first AI question. Identifier redaction and content moderation are optional (see below), and Crisis resources (optional) adds support information for sensitive studies. Extraction confidence threshold (0 to 1) applies to structured extraction: when the fraction of extraction goals that were filled falls below the threshold, the app flags the result to the participant. A value of 0 turns the check off. Daily token cap (per study) limits use per day and resets at midnight UTC.

Identifier redaction and content moderation

The two optional settings serve different purposes: redaction concerns privacy and moderation concerns safety.

Identifier redaction (privacy)

Before a participant's message is sent to the AI provider, SMAAT replaces email addresses and phone numbers with placeholders (for example [redacted-email]). The redaction is pattern-based. It does not detect names, addresses, ID numbers or details described in free text. It changes only what is sent to the provider; the stored research data keep the original message. The reply of the AI can therefore occasionally differ because it received a placeholder.

Content moderation (safety)

Each participant message is checked with the provider's moderation classifier (categories such as self-harm, violence, sexual content and harassment). The result (passed, flagged or not checked) is recorded with the AI request on the server. Moderation does not block the conversation or change what the participant sees. The AI usage panel in the study Settings lists the messages flagged in the last seven days (date, participant code and question), or the number checked when none was flagged. Providers without a moderation service record “not checked”. For sensitive topics, add crisis resources so that participants see support information.

Using other (OpenAI-compatible) providers

The AI item uses the OpenAI Chat Completions API. It works with any provider or gateway that offers an OpenAI-compatible endpoint, which makes it possible to use other models (for example Llama, Mistral, Claude or Gemini through a gateway), an EU-hosted or zero-retention service, or a self-hosted model that keeps conversations on your own infrastructure.

Under Settings → AI, set the Provider base URL, paste an API key from that provider, select Custom (other provider)… as the model and enter the provider's model ID. The base URL must use HTTPS and should include the provider's path (for example ending in /v1); https://api.openai.com also works.

ProviderBase URLExample model ID
OpenAI (default)https://api.openai.comgpt-5.4-nano
OpenRouterhttps://openrouter.ai/api/v1meta-llama/llama-3.3-70b-instruct
Together AIhttps://api.together.xyz/v1meta-llama/Llama-3.3-70B-Instruct-Turbo
Groqhttps://api.groq.com/openai/v1llama-3.3-70b-versatile
Mistralhttps://api.mistral.ai/v1mistral-large-latest
Self-hosted (vLLM / Ollama)https://your-server/v1your served model name
Notes: model IDs and key formats differ between providers; use the values from the provider's documentation. Data handling (retention, training, residency) is governed by your account with that provider. Content moderation works only with providers that offer a moderation endpoint (others record “not checked”). Cost estimates are approximate for non-OpenAI models, and the daily token cap applies to all providers. Azure OpenAI and the native Anthropic and Gemini APIs use a different request format and are not supported directly; these models can be reached through an OpenAI-compatible gateway.

Sensor heterogeneity across devices

Sensors are read through cross-platform interfaces that return each sensor in a standard unit and format, so that readings from iOS and Android phones are stored in a comparable form. The sampling configuration is set per study and applied in the same way on all devices.

Note: SMAAT standardises units and data format but does not calibrate the physical sensors, which differ between device models. Sensor readings taken during a survey are stored with the response as recorded; a response whose data exceed the size limit is truncated and marked in the DataTruncated column. Each response also records the platform, operating system version, device model, manufacturer and app version at the time of collection (the device columns of the long-format export), so analyses can be stratified or normalised by device.
Background sensor files on the Sensors tab record the first and last sample time from the device clock. Each file is stamped with its unit and with the platform and operating system version of the phone, which the Unit / Platform column shows. Background files are downloaded as JSON from the Sensors tab; they are not part of the CSV exports.

Standard units

Sensor or metricUnit
Accelerometerg (multiples of gravity)
Gyroscoperad/s
MagnetometerµT
BarometerhPa
Light sensor (Android)lux
Device motionm/s² (acceleration), rad/s (rotation rate)
Pedometer, stepscount
Background GPSdegrees (latitude, longitude), metres (accuracy)
Resting heart ratebpm
Sleepstage
Active energykcal
Walking and running distancem
Blood oxygen (SpO2)%
Respiratory ratebreaths/min
Heart rate variabilityms; SDNN on iOS, RMSSD on Android
Heart rate variability is measured as SDNN (standard deviation of beat-to-beat intervals) on iOS and as RMSSD (root mean square of successive differences) on Android. The two measures are not interchangeable; analyse them separately by platform.

Normalising across devices

Common steps during analysis:

  • Per-participant standardisation: z-score each axis within participant (subtract the participant's mean and divide by the participant's standard deviation) to remove device-level offsets and scale differences. The raw survey-time samples are in the sensor columns of the long-format export (for example AccelerometerData); the Data Explorer provides per-submission means such as _accel_mean_x.
  • GPS accuracy filtering: drop location samples whose accuracy (metres) exceeds a threshold before computing distances. The field is part of each sample in the GPS files downloaded from the Sensors tab and of the Table view in Preprocess Data.
  • Platform awareness: use the Platform and OSVersion columns of the long-format export, and the Unit / Platform column of the Sensors tab, to separate iOS and Android streams and to convert units where needed (for example g to m/s²).
© 2026 SMAAT Platform. All rights reserved.