[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,70 +1,227 @@
|
||||
---
|
||||
id: wiki-2026-0508-ssq-questionnaire
|
||||
title: SSQ Questionnaire
|
||||
category: AI_and_ML
|
||||
status: needs_review
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [ssq_questionnaire]
|
||||
aliases: [Simulator Sickness Questionnaire, Cybersickness Eval, VR Sickness Score]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.95
|
||||
tags: [- ssq - vr_sickness - user_study - questionnaire]
|
||||
raw_sources: [- AI_and_ML/Simulator Sickness Questionnaire (SSQ).md - AI_and_ML/시뮬레이터 멀미 설문지(Simulator Sickness Questionnaire).md]
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [vr, ar, cybersickness, ssq, ux-research]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: Python
|
||||
framework: pandas
|
||||
---
|
||||
|
||||
# 시뮬레이터 멀미 설문지 (Simulator Sickness Questionnaire, SSQ)
|
||||
# SSQ Questionnaire
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
시뮬레이터 멀미 설문지(SSQ)는 시뮬레이터 및 가상현실(VR) 연구에서 사용자가 느끼는 멀미 증상을 정량화하기 위해 가장 널리 사용되는 표준 평가 도구입니다 [1]. 16개의 증상 항목을 0점(없음)부터 3점(심각함)까지의 4점 척도로 평가하며, 이를 통해 메스꺼움, 안구 운동, 방향 상실이라는 세 가지 핵심 범주에서 사용자의 불편함을 측정합니다 [1].
|
||||
## 매 한 줄
|
||||
> **"매 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 도 등장.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 1. 구조 및 세 가지 하위 범주 (Subscales)
|
||||
SSQ는 단순 합산이 아닌, 각 범주별 가중치를 적용하여 최종 점수를 산출합니다 [1].
|
||||
* **메스꺼움 (Nausea)**: 타액 분비 증가, 트림, 위장 불쾌감 등 위장 계통의 증상 (7개 항목) [1].
|
||||
* **안구 운동 (Oculomotor)**: 눈의 피로, 전반적인 피로, 초점 문제 등 시각 시스템의 피로도 (7개 항목) [1].
|
||||
* **방향 상실 (Disorientation)**: 현기증(Dizziness) 및 어지러움(Vertigo)과 관련된 전정 계통 증상 (7개 항목) [1].
|
||||
## 매 핵심
|
||||
|
||||
### 2. 점수 해석 및 활용
|
||||
* **임계값**: 과거 연구에서는 SSQ 총점이 20점을 초과할 경우 해당 시뮬레이터 시스템에 유의미한 설계적 결함이 있음을 시사하는 지표로 활용되었습니다 [2].
|
||||
* **변수와의 관계**: SSQ 점수는 VR 노출 시간과 가상 움직임(Simulated Motion)의 강도에 비례하여 증가하는 경향이 있습니다 [3]. 또한, 일반 모니터보다 HMD(Head-Mounted Display) 사용 시 훨씬 높게 나타납니다 [3].
|
||||
### 매 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).
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
* **상관관계의 모호성**: 높은 SSQ 점수가 반드시 사용자의 실제 현실 수행 능력 저하나 장기적인 신체적 영향으로 직결되는지에 대해서는 여전히 학술적 공백이 존재합니다 [2].
|
||||
* **주관성**: 사용자 개인이 느끼는 주관적 평가에 의존하므로, 실험 환경이나 사용자의 컨디션에 따라 변동성이 클 수 있습니다.
|
||||
### 매 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
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics**: [[VR Sickness|가상현실 멀미]], 가상현실(Virtual Reality), 사용자 경험(UX) 평가
|
||||
- **Projects/Contexts**: VR 엑서게임 연구, 시뮬레이터 안전 기준 수립
|
||||
- **Contradictions/Notes**: 자동화 엔진에 의해 매핑된 초기 지식으로, 최신 VR 기기(예: Vision Pro, Quest 3)에서의 보정 계수 적용 여부는 추가 검토가 필요합니다.
|
||||
### 매 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.
|
||||
|
||||
---
|
||||
*Last updated: 2026-05-08*
|
||||
### 매 응용
|
||||
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).
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### 매 SSQ 항목 (Likert 0-3)
|
||||
```python
|
||||
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
|
||||
]
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
LIKERT = {0: "None", 1: "Slight", 2: "Moderate", 3: "Severe"}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### 매 scoring (Kennedy 1993, 매 weights)
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
# 매 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
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
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,
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
# 매 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}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
### 매 study protocol (pre/post design)
|
||||
```python
|
||||
import pandas as pd
|
||||
from scipy import stats
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
# 매 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)
|
||||
```python
|
||||
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)
|
||||
```csharp
|
||||
// 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 (매 2018, 9 items, modern HMD recommended)
|
||||
```python
|
||||
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 코딩
|
||||
```python
|
||||
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
|
||||
- 부모: [[VR UX Research]] · [[Cybersickness]]
|
||||
- 변형: [[VRSQ]] · [[CSQ-VR]] · [[MSSQ]]
|
||||
- 응용: [[Locomotion Comparison]] · [[VR QA]]
|
||||
- Adjacent: [[Vection]] · [[Vestibular]] · [[Presence (VR)]]
|
||||
|
||||
## 🤖 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 |
|
||||
|
||||
Reference in New Issue
Block a user