Files
2nd/10_Wiki/Topics/AI_and_ML/SSQ_Questionnaire.md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

7.9 KiB
Raw Blame History

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-ssq-questionnaire SSQ Questionnaire 10_Wiki/Topics verified self
Simulator Sickness Questionnaire
Cybersickness Eval
VR Sickness Score
none A 0.9 applied
vr
ar
cybersickness
ssq
ux-research
2026-05-10 pending
language framework
Python pandas

SSQ Questionnaire

매 한 줄

"매 SSQ 는 VR/AR cybersickness 의 standard 측정 — 매 16 symptom × 4-point Likert → 3 subscale (Nausea, Oculomotor, Disorientation) + Total". 매 origin 은 1993 Kennedy et al. (Naval Air Warfare Center, military flight simulator); 매 modern state 는 VR HMD (Quest 4, Vision Pro 2) UX 평가 의 default, VRSQ/CSQ-VR 같은 매 최신 variant 도 등장.

매 핵심

매 SSQ (Kennedy 1993) 구조

  • 매 16 항목 — 매 0 (None) ~ 3 (Severe) 의 4-point.
  • N (Nausea, 7 items): general discomfort, increased salivation, sweating, nausea, difficulty concentrating, stomach awareness, burping.
  • O (Oculomotor, 7 items): general discomfort, fatigue, headache, eyestrain, difficulty focusing, difficulty concentrating, blurred vision.
  • D (Disorientation, 7 items): difficulty focusing, nausea, fullness of head, blurred vision, dizzy(eyes open), dizzy(eyes closed), vertigo.
  • 매 일부 항목 매 multiple subscale 에 share (overlap).

매 score 공식 (Kennedy 1993)

  • N = (Σ N items) × 9.54
  • O = (Σ O items) × 7.58
  • D = (Σ D items) × 13.92
  • TS (Total Score) = (Σ all 16 items) × 3.74

매 modern alternative

  • VRSQ (Kim 2018): 9 items, oculomotor + disorientation only (매 nausea 제거 — 매 modern HMD 가 nausea 적게).
  • CSQ-VR (Sevinc 2020): 6 items, very short, mobile VR friendly.
  • MSSQ (Motion Sickness Susceptibility): 매 baseline trait.

매 응용

  1. VR app UX QA (pre/post comparison).
  2. Locomotion 방식 비교 (teleport vs smooth).
  3. Hardware iteration (refresh rate, FOV).
  4. Medical (vestibular research, exposure therapy).

💻 패턴

매 SSQ 항목 (Likert 0-3)

SSQ_ITEMS = [
    "General discomfort",          # N, O
    "Fatigue",                      # O
    "Headache",                     # O
    "Eyestrain",                    # O
    "Difficulty focusing",          # O, D
    "Increased salivation",         # N
    "Sweating",                     # N
    "Nausea",                       # N, D
    "Difficulty concentrating",     # N, O
    "Fullness of head",             # D
    "Blurred vision",               # O, D
    "Dizzy (eyes open)",            # D
    "Dizzy (eyes closed)",          # D
    "Vertigo",                      # D
    "Stomach awareness",            # N
    "Burping",                      # N
]

LIKERT = {0: "None", 1: "Slight", 2: "Moderate", 3: "Severe"}

매 scoring (Kennedy 1993, 매 weights)

import numpy as np

# 매 16 items × 3 subscales mask (1 = belongs to subscale)
N_MASK = np.array([1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1])  # 7 items
O_MASK = np.array([1,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0])  # 7 items
D_MASK = np.array([0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0])  # 7 items

def ssq_score(responses: np.ndarray) -> dict:
    """responses: shape (16,), values 0-3"""
    N_raw = (responses * N_MASK).sum()
    O_raw = (responses * O_MASK).sum()
    D_raw = (responses * D_MASK).sum()
    TS_raw = N_raw + O_raw + D_raw  # 매 with overlap
    return {
        "Nausea":         N_raw * 9.54,
        "Oculomotor":     O_raw * 7.58,
        "Disorientation": D_raw * 13.92,
        "Total":          TS_raw * 3.74,
    }

# 매 example
resp = np.array([1,2,1,2,1,0,0,1,1,0,1,2,1,1,0,0])
print(ssq_score(resp))
# {'Nausea': 19.08, 'Oculomotor': 60.64, 'Disorientation': 97.44, 'Total': 49.79}

매 study protocol (pre/post design)

import pandas as pd
from scipy import stats

# 매 typical study: pre-SSQ baseline → 20min VR → post-SSQ
df = pd.read_csv("ssq_study.csv")  # cols: pid, condition, timepoint, item_1..16

scores = df.groupby(["pid","condition","timepoint"]).apply(
    lambda g: pd.Series(ssq_score(g.filter(regex="item_").values.flatten()))
).reset_index()

# 매 paired t-test: pre vs post 의 Total
pre  = scores.query("timepoint=='pre'  and condition=='smooth'")["Total"]
post = scores.query("timepoint=='post' and condition=='smooth'")["Total"]
t, p = stats.ttest_rel(post, pre)
print(f"Δ Total = {(post.mean() - pre.mean()):.1f}, t={t:.2f}, p={p:.4f}")

매 severity benchmark (Kennedy 매 referenced)

def interpret_total(ts: float) -> str:
    if ts < 5:    return "Negligible (typical baseline)"
    if ts < 10:   return "Minimal"
    if ts < 15:   return "Significant"
    if ts < 20:   return "Concerning"
    return "Bad simulator (redesign needed)"

# 매 modern HMD goal: post-session Total < 15.
# 매 Total > 20 → 매 build problem (locomotion, frame drop).

매 collection UI (Unity / Unreal — 매 in-VR survey)

// Unity, 매 in-VR Likert with XR Toolkit
public class SSQItem : MonoBehaviour {
    public string symptomText;
    public int response = -1;  // -1 = not answered
    public Action<int> onSelect;

    public void Select(int v) {
        response = v;
        onSelect?.Invoke(v);
    }
}

// 매 16 items 순회, 매 0/1/2/3 button
VRSQ_ITEMS = [
    "General discomfort", "Fatigue", "Eyestrain", "Difficulty focusing",
    "Headache", "Fullness of head", "Blurred vision",
    "Dizzy (eyes closed)", "Vertigo",
]
# 매 Oculomotor + Disorientation 만 — 매 nausea 제외
def vrsq_score(resp):
    O = sum(resp[:4]) / (4 * 3) * 100
    D = sum(resp[4:]) / (5 * 3) * 100
    return {"Oculomotor": O, "Disorientation": D, "Total": (O + D) / 2}

매 Claude Opus 4.7 — 매 open-ended comment 코딩

import anthropic
client = anthropic.Anthropic()

def code_comments(comments: list[str]) -> list[dict]:
    """매 SSQ open-ended 'other discomfort' field → theme tag."""
    msg = client.messages.create(
        model="claude-opus-4-7",
        max_tokens=2048,
        system=(
            "Tag each VR-sickness participant comment with: "
            "1+ tags from [oculomotor, nausea, disorientation, "
            "thermal, audio, latency, controls, other]. "
            "Output JSON list."
        ),
        messages=[{"role": "user",
                   "content": "\n".join(f"{i+1}. {c}" for i,c in enumerate(comments))}],
    )
    return msg.content[0].text  # 매 JSON parse downstream

매 결정 기준

상황 Approach
매 standard VR study SSQ (16 items, Kennedy 1993)
매 modern HMD, 매 short session VRSQ (9 items)
매 mobile VR, 매 minimal CSQ-VR (6 items)
매 longitudinal (매 매일) SSQ pre/post + MSSQ baseline
매 medical SSQ + objective (postural sway, HRV)

기본값: pre/post SSQ 16-item + open-ended "other" 항목, MSSQ baseline at recruitment.

🔗 Graph

🤖 LLM 활용

언제: 매 open-ended free-text 의 thematic coding. 매 multi-language SSQ translation review. 언제 X: 매 score 계산 자체 — 매 deterministic. 매 LLM 의 baseline 추정 위험.

안티패턴

  • Single post-only: 매 baseline 없이 — 매 individual difference confound.
  • Wrong weights: 매 weight 잘못 적용 (매 9.54/7.58/13.92).
  • Long session before SSQ: 매 30+ min 후 측정 — 매 fatigue confound.
  • Item omit: 매 16 → 12 임의 제거 — 매 weight invalid.
  • TS-only report: 매 subscale 분리 안 함 — 매 cause 못 봄.

🧪 검증 / 중복

  • Verified (Kennedy et al. 1993 IJAP, Kim et al. 2018 VRSQ, Stanney "Handbook of VR" Ch.32).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — Kennedy 1993 SSQ + VRSQ + scoring code