설문조사 분석(Survey Analysis)
원시 설문조사 내보내기 파일을 전문 설문 연구자가 승인할 수준의 결과로 변환합니다: 모든 숫자는 기준(n)을 가지며, 불확실성은 정직하게 표시되고, 차이는 통계적으로 유의할 때만 주장하며, 어떤 응답자도 식별할 수 없습니다.
이 스킬은 툴과 주제에 구애받지 않습니다. 특정 설문조사와 관련된 모든 것은 파라미터(Phase 0)로 처리되며, 하드코딩된 가정으로 처리되지 않습니다.
기본 규칙(모든 설문조사에 적용되며, 다른 "통찰" 요청보다 우선함)
- 통계적 해석만 수행합니다. 데이터가 보여주는 것(크기, 정밀도, 견고성, 차이, 일관성)을 설명합니다. 결과가 왜 그러한지에 대한 설명, 원인, 동기 또는 가설을 절대 제공하지 않습니다(심지어 "아마도 ... 때문", "이는 ...을 나타낼 수 있음"과 같은 완곡한 표현도 안 됩니다). 응답자가 직접 언급한 이유(주관식 답변)는 응답자가 말한 대로 보고할 수 있습니다.
- 기본적으로 동등 가중치를 적용합니다. 모든 응답은 한 번씩 계산됩니다. 가중치는 설문조사 설계에 필요한 경우(예: 비례 추출, 데이터와 함께 제공된 가중치 변수) 또는 파라미터에 지정된 경우에만 사용합니다. 임의로 가중치를 적용하지 않으며, 대신 불균형을 한계점으로 보고합니다.
- 교차 분석 및 하위 그룹 보고서는 허가된 경우에만 생성합니다. 결과를 분석할 수 있는지 여부, 어떤 변수로, 어떤 제한 하에 분석할지는 설문 소유자의 결정입니다(
crosstabs,subgroup_reports,anonymity파라미터). 허가가 없으면 전체 합계만 보고합니다. - 모든 산술 연산은 코드(Python(pandas/scipy) 또는 R)로 수행합니다. 추측성 수치를 문장으로 절대 추정하지 마십시오. 복사본에서 작업하며, 사용자의 원본 데이터를 절대 수정하지 않습니다.
함께 제공되는 파일
| 파일 | 사용 시기 |
|---|---|
references/methods.md | Phase 3-9: 공식, 검정 선택, 가중치, 공개 제한, 작업 예시 |
references/reporting.md | Phase 10: 경영 요약, 실행 필드, 구조, 문구, 차트 |
references/data-sources.md | Phase 1: 내보내기 형식(LimeSurvey, MS Forms, Google Forms, SurveyMonkey, SPSS/R) |
scripts/survey_stats.py | 모든 Phase: 테스트된 도우미 함수 - 유한 모집단 보정을 포함한 신뢰 구간, 최악의 경우 무응답 범위, 검정 및 효과 크기, p-값 조정, 유의성 기호가 있는 배너 테이블, 최소 감지 가능 차이, 반복 가중치 조정(Raking) 및 설계 효과, 그룹 공개 계획, 셀 억제, Cronbach's alpha, 품질 플래그 |
assets/survey-config.template.yaml | Phase 0: 파라미터 파일 |
이 SKILL.md만 설치된 경우, 마지막의 핵심 규칙 섹션이 최소 요구 사항입니다. 공식은 직접 코드로 구현하십시오.
Phase 0 - 파라미터
작성된 survey-config.yaml(assets/의 템플릿)을 찾습니다. 그렇지 않으면 아래 파라미터를 수집합니다. 데이터나 파일에서 읽을 수 있는 사실은 직접 읽고, 결정은 사용자에게 속합니다. 열린 결정 사항은 한 번에 최대 4개의 질문으로 묻고, 각 질문에 권장 기본값을 제시합니다. 답변할 사람이 없으면 기본값을 사용하고 보고서의 "가정" 아래에 나열합니다. 기본값은 의도적으로 제한적입니다: 분석 없음, 가중치 없음.
| 파라미터 | 의미 | 출처 | 기본값 |
|---|---|---|---|
population.definition | 설문조사의 대상이 되는 사람 | 질문 | - (필수) |
population.size_N | 목표 모집단의 크기 | 질문 | null = 알 수 없음/매우 큼 |
population.design | census, simple_random, stratified, quota, self_selected | 질문 | self_selected (가장 보수적) |
population.known_margins | 특성별 알려진 모집단 수 | 질문 / 파일 | 없음 |
fieldwork.invited / completes / partials / ineligible | 결과 수 | 데이터 + 질문 | completes = 제출 날짜가 있는 레코드 |
purpose | describe, compare_groups, test_hypotheses, track_waves, benchmark | 질문 | describe |
hypotheses | 사전 지정된 통계적 비교(확증적) | 질문 | 없음 -> 모든 비교는 탐색적 |
crosstabs.mode | none, specified (지정된 변수), banner (전체 테이블 밴드) | 질문 | none |
crosstabs.variables | 사용할 수 있는 분류 변수 | 질문 | [] |
crosstabs.forbidden_combinations | 절대 교차해서는 안 되는 변수 쌍 | 질문 | 모든 인구통계학적 변수의 2-변수 조합 |
subgroup_reports.enabled | 단위(사이트, 부서, ...)별 별도 보고서 | 질문 | false |
subgroup_reports.unit_variable / min_n / min_response_rate / compare_to_total | 단위 보고서 제한 | 질문 | - / anonymity.min_group_n / 없음 / true |
anonymity.min_group_n | 보고되는 모든 그룹의 최소 응답자 수 | 질문 / 동의 | 5 |
anonymity.min_cell_n | 0 < count < value인 셀 억제 | 질문 / 동의 | null (해제) |
weighting.mode | none, design (데이터의 가중치 변수), raking | 설문 설계 / 파라미터 | none |
weighting.variable / margins / trim | design / raking에 대한 세부 정보 | 파라미터 | - / - / [0.3, 3] |
analysis.confidence_level / alpha / power | 기본값 | 0.95 / 0.05 / 0.80 | |
analysis.multiple_testing | holm, bh, none | 기본값 | 확증적: holm, 배너/탐색적: bh |
analysis.dont_know / dont_know_codes | "모름/무응답" 처리 | 기본값 | 기준에서 제외, 별도 보고 |
analysis.likert_top_box | 동의로 간주되는 범주 | 기본값 | 4-6점 척도: 2, 7+점 척도: 3 |
analysis.item_polarity | 각 항목의 유리한 극 | 코드북 + 질문 | 레이블에서 추론 |
analysis.quality_rules | 속도 비율, 직선 응답 최소 항목 수 | 기본값 | 0.4 x 중앙값; 5개 항목 |
open_text.quotes | none, paraphrase, anonymized_verbatim | 질문 | paraphrase |
recommendations.mode | none, action_fields, action_fields_with_measures | 질문 | action_fields |
recommendations.measures | 결과에 매핑하기 위해 사용자가 제공한 조치 | 질문 | [] |
benchmarks | 동일한 표현의 이전 웨이브/외부 연구 | 질문 | 없음 |
output.audience / format / language | 질문 / 대화 | lay / 환경 기본값 / 사용자 언어 |
Phase 0은 사용자가 수정할 수 있는 짧은 파라미터 요약으로 끝납니다.
Phase 1 - 데이터 가져오기 및 코드북
해당 내보내기 형식에 대해 references/data-sources.md를 읽습니다. 그런 다음:
- 데이터를 로드하고 직접 식별자(IP, 이메일, 이름, 토큰, 리퍼러 URL, 필요하지 않은 정확한 타임스탬프)를 즉시 삭제하고 그렇게 했다고 명시합니다.
- 코드북을 만듭니다: 변수, 질문 텍스트, 유형(단일 선택, 다중 선택, Likert k-점, 숫자, 주관식 텍스트, 매트릭스 행, 메타데이터), 값 레이블, 척도 방향 및 극성, 역코딩 항목, 결측/"모름" 코드, 필터 조건(해당 질문을 본 사람).
- 척도 방향과 역코딩 항목은 가정이 아닌 레이블에서 가져옵니다. 레이블이 없으면 질문합니다.
- 분석 파일로 재코딩하고 매핑을 로그에 유지합니다.
Phase 2 - 데이터 정제
표시, 문서화, 그런 다음에만 결정합니다. 절대 조용히 삭제하지 않습니다.
- 완료 vs. 부분 완료; 분석 샘플 정의(기본값: 완료; 부분 완료는 사용자가 동의하는 경우에만 해당 항목에 대해 포함). 페이지별 중단.
- 중복(동일한 토큰 또는 거의 동일한 타임스탬프를 가진 동일한 응답 벡터).
- 속도 응답자: 총 소요 시간 <
비율x 중앙값.최소 항목이상의 매트릭스에서 직선 응답자. 사용자에게 개수와 패턴을 보여준 후에만 제외; n이 작을 때 하나의 플래그만으로 절대 제외하지 않습니다. - 항목별 무응답; 10% 초과 시 플래그 지정.
- 범위를 벗어난 값, 필터 위반, 불가능한 조합.
출력: 데이터 정제 로그(확인, 개수, 결정, 이유).
Phase 3 - 추론 프레임 및 가중치
references/methods.md, 섹션 1과 7을 읽습니다. 설계는 어떤 불확실성 진술이 적법한지 결정합니다:
| 상황 | 보고할 내용 |
|---|---|
| 알려진 작은 모집단의 전수 조사 또는 거의 전수 조사(n/N > 5%) | 유한 모집단 보정(FPC)을 포함한 신뢰 구간 및 주요 수치에 대한 최악의 경우 무응답 범위. 무응답 점검이 일반화를 뒷받침하지 않는 한 결과를 "응답자 중에서"라는 표현으로 제시합니다. |
| 확률 표본 | 표준 신뢰 구간(n/N > 5%면 FPC 포함); 설계에 불평등한 선택 확률이 있는 경우 설계 가중치. |
| 자기 선택 / 공개 링크 / 편의 표본 | 모집단 추론 없음. 기술적으로 비율을 제시하며, 신뢰 구간은 표시하더라도 명시적 주의 사항과 함께 "통계적 정밀도"로만 표시합니다. |
가중치는 weighting.mode에 따라서만 적용됩니다(기본 규칙 2). 가중치가 사용되는 경우: 가중치 적용 및 미적용 주요 수치를 나란히 보고, Kish 설계 효과 및 유효 n(kish_deff, effective_n)을 보고하고, 신뢰 구간 및 검정에 유효 n을 사용합니다.
Phase 4 - 모든 답변의 분포
- 모든 항목, 모든 수치는 기준(n)(필터 및 제외 후)과 함께 제시합니다.
- 단일 선택: 개수와 비율; 주요 수치에 대한 신뢰 구간(해당하는 경우 FPC가 있는 Wilson).
- Likert: 전체 분포를 먼저 제시한 다음, 상위 상자 / 하위 상자(신뢰 구간 포함), 중앙값. 평균 +/- 표준편차는 보충 자료로만, 그리고 5점 이상 항목 또는 다중 항목 척도에 대해서만 사용합니다.
- 다중 선택: 옵션당 응답자 비율; 합계는 100%를 초과할 수 있습니다.
- 숫자: 중앙값과 IQR을 먼저 제시한 다음, 평균/표준편차; 이상치를 확인합니다.
- 반올림: n < 200이면 전체 백분율. 합계가 100%가 되지 않을 수 있으며, 한 번 설명합니다.
- 주요 수치와 50%(또는 다른 기준값)는
mdd_one_proportion을 염두에 두고 비교: 신뢰 구간이 50%를 포함하는 비율은 "약 절반"입니다.
Phase 5 - 교차 분석 및 유의성
crosstabs.mode에 따라 관리됩니다. none인 경우 이 Phase를 완전히 건너뛰고 방법 상자에 그렇게 명시합니다.
- 먼저 공개 제한을 적용합니다.
crosstabs.variables만 사용하고forbidden_combinations는 절대 교차하지 않습니다. 각 분류에 대해reportable_groups()를 실행합니다:anonymity.min_group_n미만의 그룹은 삭제되며, 삭제된 나머지를 전체에서 유추할 수 있는 경우 2차 억제가 추가됩니다. 설정된 경우anonymity.min_cell_n을 적용합니다. - 검정력. 각 분류에 대해 최소 감지 가능 차이(
mdd_two_proportions, 80% 검정력)를 계산합니다. 이를 보고하여 "유의한 차이 없음"을 올바르게 읽도록 합니다("x 포인트 미만의 차이는 감지할 수 없음"). - 검정. 데이터 유형에 따라 선택합니다(
references/methods.md, 섹션 3): 범주형은 카이제곱 / Fisher, 순서형 항목은 Mann-Whitney / Kruskal-Wallis, 척도 점수는 Welch. 항상 효과 크기와 그 레이블을 함께 제시합니다. p-값만으로는 결코 결과가 아닙니다. - 배너 테이블(
crosstabs.mode: banner): 항목 x 허용된 변수 각각에 대해banner_table()/format_banner()- 열 백분율, 기준 행, 유의성 문자(문자는 해당 문자가 있는 열보다 유의하게 높은 비율을 표시), 문자는 행 내에서 조정된 p-값을 기반으로 함. 밴드는 탐색적입니다: 차이가 텍스트에 들어가기 전에, 반환된tests에 대해 Benjamini-Hochberg(p_adjust)로 밴드의 모든 p-값을 함께 조정합니다. 배너 테이블은 부록에 포함되며, 견고한 차이(밴드 전체 조정 후 유의하고 그리고 최소한 작은 효과 크기)만 텍스트에 포함됩니다. - 확인적 결과(미리 지정된
hypotheses)와 탐색적 결과를 분리합니다. - 유의하지 않은 차이는 "신뢰할 수 있는 차이 없음"이며, 결코 추세가 아닙니다.
Phase 6 - 하위 그룹 보고서
subgroup_reports.enabled인 경우에만 해당합니다. unit_variable의 각 단위에 대해:
reportable_groups(sizes, min_n, total_published=True, invited, min_response_rate)는 보고서를 받을 단위를 결정합니다. 나머지 규칙이 중요합니다: 하나의 작은 단위가 보류되지만 다른 모든 단위와 전체가 게시되면 해당 결과는 차감으로 계산될 수 있습니다 - 함수는 보류된 나머지 자체가min_n이상이 될 때까지 추가 단위를 보류합니다. 게시된 보고서가 아닌 설문 소유자를 위해 보류된 단위와 이유(수치 없이)를 나열합니다.- 각 단위 보고서는 기본 보고서와 동일한 구조, 단위 자체의 기준 및 신뢰 구간(FPC, 단위의 초청된 수를 N으로 사용), 그리고
compare_to_total인 경우 참조를 위한 전체를 사용합니다.crosstabs에서 해당 변수를 허용하지 않는 한 단위를 서로 비교하지 마십시오. - 단위 보고서 내에서는 명시적으로 허용되고 모든 그룹이 임계값을 통과하지 않는 한 추가 분석을 수행하지 않습니다.
Phase 7 - 척도 및 지수
척도(또는 검증된 도구)로 설계된 항목 집합에만 해당합니다. 역코딩 항목을 재코딩하고, Cronbach's alpha(요인 패키지를 사용할 수 있으면 McDonald's omega)를 계산하고, 항목-전체 상관, alpha-if-deleted를 계산합니다. alpha >= .70(3항목 짧은 척도의 경우 >= .60, 주의 사항 포함)인 경우에만 척도 점수를 계산합니다.
Phase 8 - 주관식 답변
references/methods.md, 섹션 6을 참조합니다. 모든 답변을 읽고, 귀납적 코드 프레임을 구축하고, 여러 코드를 허용하여 코딩하고, "n명의 응답자 중 x명이 ...을 언급함"으로 주제를 보고합니다. 20% 이상에 대해 두 번째 코딩 패스를 수행하고 일치도를 보고합니다. 코딩이 단일 코더로서 AI에 의해 수행되었음을 명시합니다. 인용문은 open_text.quotes에서 허용하는 대로만, 식별 가능한 모든 것을 제거하여 사용합니다. 응답자가 쓴 내용을 보고하고, 이에 대한 자체 설명을 추가하지 않습니다.
Phase 9 - 무응답 및 대표성
- 응답률(RR1 / RR2,
response_rates()), 전체 및 알려진 그룹별. - 응답자 구성을
known_margins와 비교합니다(적합도 검정). 그룹 간 응답률이 15포인트 이상 차이가 나는 경우 한계점으로 보고합니다(하위 그룹 보고서가 허용되는 경우 그룹별 주요 수치도 보고).weighting.mode에서 명시하지 않는 한 가중치를 적용하지 않습니다. - 항목 무응답 패턴; 타임스탬프가 있으면 초기 응답자와 후기 응답자를 비교합니다.
- 결과가 누구에게 어떤 제한과 함께 적용되는지 명시적으로 결론을 내립니다.
Phase 10 - 해석, 경영 요약 및 보고서
references/reporting.md를 읽습니다.
- 해석 = 통계적 읽기만(기본 규칙 1): 얼마나 크고, 얼마나 정밀하며, 얼마나 견고한지(신뢰 구간, 최악의 경우 범위), 허용된 그룹 간에 얼마나 일관된지, 동일한 표현의 벤치마크와 어떻게 비교되는지.
- 경영 요약(첫 페이지): n과 불확실성을 포함한 3-7개의 주요 결과, 그 다음 실행 필드.
- 실행 필드(
recommendations.mode): 통계적 기준(불리한 답변의 비율, 최악의 경우 범위에서의 견고성)에 따라서만 항목 또는 주제의 순위를 매깁니다.