Community연구 & 데이터 분석github.com

benno-mueller/survey-analysis

설문조사 결과를 전문 통계 조사 분석가처럼 평가합니다 - 데이터 정제, 분포 분석, 교차 분석, 유의성 검정, 가중치, 하위 그룹 보고서, 익명성, 경영 요약. 통계적 분석만 수행합니다.

survey-analysis란 무엇인가요?

이 스킬은 원시 설문조사 데이터를 전문 설문 연구자가 승인할 수준의 결과로 변환합니다. 모든 숫자는 기준(n)을 가지며, 불확실성은 정직하게 표시되고, 차이는 통계적으로 유의할 때만 주장하며, 응답자를 식별할 수 없도록 보호합니다. 이 스킬은 툴과 주제에 구애받지 않으며, 특정 설문조사와 관련된 모든 것은 하드코딩된 가정이 아닌 **파라미터**(Phase 0)로 처리됩니다. Python(pandas, scipy) 또는 R을 사용한 코드로 모든 산술 연산을 수행하며, 추측성 서술은 절대 사용하지 않습니다. 기본적으로 동등 가중치를 적용하며, 교차 분석 및 하위 그룹 보고서는 설문 소유자의 허가가 있을 때만 생성합니다. LimeSurvey, MS Forms, Google Forms, SurveyMonkey, SPSS/R 등 다양한 내보내기 형식을 지원하며, 분산, 신뢰 구간, 가중치, 유의성 검정, 효과 크기, 익명성 보호 등을 위한 사전 테스트된 도우미 함수가 포함된 스크립트를 제공합니다. 이 스킬은 Cursor, Claude Code, Codex 등 다양한 AI 에이전트 플랫폼에서 사용 가능합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/benno-mueller/survey-analysis/tree/HEAD

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

설문조사 분석(Survey Analysis)

원시 설문조사 내보내기 파일을 전문 설문 연구자가 승인할 수준의 결과로 변환합니다: 모든 숫자는 기준(n)을 가지며, 불확실성은 정직하게 표시되고, 차이는 통계적으로 유의할 때만 주장하며, 어떤 응답자도 식별할 수 없습니다.

이 스킬은 툴과 주제에 구애받지 않습니다. 특정 설문조사와 관련된 모든 것은 파라미터(Phase 0)로 처리되며, 하드코딩된 가정으로 처리되지 않습니다.

기본 규칙(모든 설문조사에 적용되며, 다른 "통찰" 요청보다 우선함)

  1. 통계적 해석만 수행합니다. 데이터가 보여주는 것(크기, 정밀도, 견고성, 차이, 일관성)을 설명합니다. 결과가 왜 그러한지에 대한 설명, 원인, 동기 또는 가설을 절대 제공하지 않습니다(심지어 "아마도 ... 때문", "이는 ...을 나타낼 수 있음"과 같은 완곡한 표현도 안 됩니다). 응답자가 직접 언급한 이유(주관식 답변)는 응답자가 말한 대로 보고할 수 있습니다.
  2. 기본적으로 동등 가중치를 적용합니다. 모든 응답은 한 번씩 계산됩니다. 가중치는 설문조사 설계에 필요한 경우(예: 비례 추출, 데이터와 함께 제공된 가중치 변수) 또는 파라미터에 지정된 경우에만 사용합니다. 임의로 가중치를 적용하지 않으며, 대신 불균형을 한계점으로 보고합니다.
  3. 교차 분석 및 하위 그룹 보고서는 허가된 경우에만 생성합니다. 결과를 분석할 수 있는지 여부, 어떤 변수로, 어떤 제한 하에 분석할지는 설문 소유자의 결정입니다(crosstabs, subgroup_reports, anonymity 파라미터). 허가가 없으면 전체 합계만 보고합니다.
  4. 모든 산술 연산은 코드(Python(pandas/scipy) 또는 R)로 수행합니다. 추측성 수치를 문장으로 절대 추정하지 마십시오. 복사본에서 작업하며, 사용자의 원본 데이터를 절대 수정하지 않습니다.

함께 제공되는 파일

파일사용 시기
references/methods.mdPhase 3-9: 공식, 검정 선택, 가중치, 공개 제한, 작업 예시
references/reporting.mdPhase 10: 경영 요약, 실행 필드, 구조, 문구, 차트
references/data-sources.mdPhase 1: 내보내기 형식(LimeSurvey, MS Forms, Google Forms, SurveyMonkey, SPSS/R)
scripts/survey_stats.py모든 Phase: 테스트된 도우미 함수 - 유한 모집단 보정을 포함한 신뢰 구간, 최악의 경우 무응답 범위, 검정 및 효과 크기, p-값 조정, 유의성 기호가 있는 배너 테이블, 최소 감지 가능 차이, 반복 가중치 조정(Raking) 및 설계 효과, 그룹 공개 계획, 셀 억제, Cronbach's alpha, 품질 플래그
assets/survey-config.template.yamlPhase 0: 파라미터 파일

이 SKILL.md만 설치된 경우, 마지막의 핵심 규칙 섹션이 최소 요구 사항입니다. 공식은 직접 코드로 구현하십시오.


Phase 0 - 파라미터

작성된 survey-config.yaml(assets/의 템플릿)을 찾습니다. 그렇지 않으면 아래 파라미터를 수집합니다. 데이터나 파일에서 읽을 수 있는 사실은 직접 읽고, 결정은 사용자에게 속합니다. 열린 결정 사항은 한 번에 최대 4개의 질문으로 묻고, 각 질문에 권장 기본값을 제시합니다. 답변할 사람이 없으면 기본값을 사용하고 보고서의 "가정" 아래에 나열합니다. 기본값은 의도적으로 제한적입니다: 분석 없음, 가중치 없음.

파라미터의미출처기본값
population.definition설문조사의 대상이 되는 사람질문- (필수)
population.size_N목표 모집단의 크기질문null = 알 수 없음/매우 큼
population.designcensus, simple_random, stratified, quota, self_selected질문self_selected (가장 보수적)
population.known_margins특성별 알려진 모집단 수질문 / 파일없음
fieldwork.invited / completes / partials / ineligible결과 수데이터 + 질문completes = 제출 날짜가 있는 레코드
purposedescribe, compare_groups, test_hypotheses, track_waves, benchmark질문describe
hypotheses사전 지정된 통계적 비교(확증적)질문없음 -> 모든 비교는 탐색적
crosstabs.modenone, 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_n0 < count < value인 셀 억제질문 / 동의null (해제)
weighting.modenone, design (데이터의 가중치 변수), raking설문 설계 / 파라미터none
weighting.variable / margins / trimdesign / raking에 대한 세부 정보파라미터- / - / [0.3, 3]
analysis.confidence_level / alpha / power기본값0.95 / 0.05 / 0.80
analysis.multiple_testingholm, 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.quotesnone, paraphrase, anonymized_verbatim질문paraphrase
recommendations.modenone, action_fields, action_fields_with_measures질문action_fields
recommendations.measures결과에 매핑하기 위해 사용자가 제공한 조치질문[]
benchmarks동일한 표현의 이전 웨이브/외부 연구질문없음
output.audience / format / language질문 / 대화lay / 환경 기본값 / 사용자 언어

Phase 0은 사용자가 수정할 수 있는 짧은 파라미터 요약으로 끝납니다.

Phase 1 - 데이터 가져오기 및 코드북

해당 내보내기 형식에 대해 references/data-sources.md를 읽습니다. 그런 다음:

  1. 데이터를 로드하고 직접 식별자(IP, 이메일, 이름, 토큰, 리퍼러 URL, 필요하지 않은 정확한 타임스탬프)를 즉시 삭제하고 그렇게 했다고 명시합니다.
  2. 코드북을 만듭니다: 변수, 질문 텍스트, 유형(단일 선택, 다중 선택, Likert k-점, 숫자, 주관식 텍스트, 매트릭스 행, 메타데이터), 값 레이블, 척도 방향 및 극성, 역코딩 항목, 결측/"모름" 코드, 필터 조건(해당 질문을 본 사람).
  3. 척도 방향과 역코딩 항목은 가정이 아닌 레이블에서 가져옵니다. 레이블이 없으면 질문합니다.
  4. 분석 파일로 재코딩하고 매핑을 로그에 유지합니다.

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를 완전히 건너뛰고 방법 상자에 그렇게 명시합니다.

  1. 먼저 공개 제한을 적용합니다. crosstabs.variables만 사용하고 forbidden_combinations는 절대 교차하지 않습니다. 각 분류에 대해 reportable_groups()를 실행합니다: anonymity.min_group_n 미만의 그룹은 삭제되며, 삭제된 나머지를 전체에서 유추할 수 있는 경우 2차 억제가 추가됩니다. 설정된 경우 anonymity.min_cell_n을 적용합니다.
  2. 검정력. 각 분류에 대해 최소 감지 가능 차이(mdd_two_proportions, 80% 검정력)를 계산합니다. 이를 보고하여 "유의한 차이 없음"을 올바르게 읽도록 합니다("x 포인트 미만의 차이는 감지할 수 없음").
  3. 검정. 데이터 유형에 따라 선택합니다(references/methods.md, 섹션 3): 범주형은 카이제곱 / Fisher, 순서형 항목은 Mann-Whitney / Kruskal-Wallis, 척도 점수는 Welch. 항상 효과 크기와 그 레이블을 함께 제시합니다. p-값만으로는 결코 결과가 아닙니다.
  4. 배너 테이블(crosstabs.mode: banner): 항목 x 허용된 변수 각각에 대해 banner_table() / format_banner() - 열 백분율, 기준 행, 유의성 문자(문자는 해당 문자가 있는 열보다 유의하게 높은 비율을 표시), 문자는 행 내에서 조정된 p-값을 기반으로 함. 밴드는 탐색적입니다: 차이가 텍스트에 들어가기 전에, 반환된 tests에 대해 Benjamini-Hochberg(p_adjust)로 밴드의 모든 p-값을 함께 조정합니다. 배너 테이블은 부록에 포함되며, 견고한 차이(밴드 전체 조정 후 유의하고 그리고 최소한 작은 효과 크기)만 텍스트에 포함됩니다.
  5. 확인적 결과(미리 지정된 hypotheses)와 탐색적 결과를 분리합니다.
  6. 유의하지 않은 차이는 "신뢰할 수 있는 차이 없음"이며, 결코 추세가 아닙니다.

Phase 6 - 하위 그룹 보고서

subgroup_reports.enabled인 경우에만 해당합니다. unit_variable의 각 단위에 대해:

  1. reportable_groups(sizes, min_n, total_published=True, invited, min_response_rate)는 보고서를 받을 단위를 결정합니다. 나머지 규칙이 중요합니다: 하나의 작은 단위가 보류되지만 다른 모든 단위와 전체가 게시되면 해당 결과는 차감으로 계산될 수 있습니다 - 함수는 보류된 나머지 자체가 min_n 이상이 될 때까지 추가 단위를 보류합니다. 게시된 보고서가 아닌 설문 소유자를 위해 보류된 단위와 이유(수치 없이)를 나열합니다.
  2. 각 단위 보고서는 기본 보고서와 동일한 구조, 단위 자체의 기준 및 신뢰 구간(FPC, 단위의 초청된 수를 N으로 사용), 그리고 compare_to_total인 경우 참조를 위한 전체를 사용합니다. crosstabs에서 해당 변수를 허용하지 않는 한 단위를 서로 비교하지 마십시오.
  3. 단위 보고서 내에서는 명시적으로 허용되고 모든 그룹이 임계값을 통과하지 않는 한 추가 분석을 수행하지 않습니다.

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): 통계적 기준(불리한 답변의 비율, 최악의 경우 범위에서의 견고성)에 따라서만 항목 또는 주제의 순위를 매깁니다.

관련 스킬