CommunityRecherche & Datenanalysegithub.com

benno-mueller/survey-analysis

Bewerten Sie Umfrageergebnisse wie ein Survey-Statistiker – Bereinigung, Verteilungen, Kreuztabellen, Signifikanz, Gewichtung, Untergruppenberichte, Anonymität, Management Summary. Nur statistisch.

Was ist survey-analysis?

Dieses Skill verwandelt einen rohen Umfrageexport in Ergebnisse, die ein professioneller Umfrageforscher unterschreiben würde: Jede Zahl hat eine Basis, Unsicherheit wird ehrlich angegeben, Unterschiede werden nur behauptet, wenn sie statistisch haltbar sind, und kein Befragter kann identifiziert werden. Es ist tool- und themenagnostisch; alles Surveyspezifische wird als Parameter (Phase 0) definiert, nicht als fest einprogrammierte Annahme. Unterstützt werden weit verbreitete Plattformen wie LimeSurvey, Microsoft Forms, Google Forms, SurveyMonkey und SPSS/R über gebündelte Referenzdateien. Das Skill führt einen vollständigen statistischen Analyse-Workflow durch: Datenbereinigung mit Protokollierung, Inferenzrahmen und Gewichtung (einschließlich Design-Effekt und Raking), Verteilungen aller Antworten, Kreuztabellen mit Signifikanztests und Effektstärken (z. B. Chi-Quadrat, Mann-Whitney, Welch), Untergruppenberichte mit strengen Anonymitätsschwellen, Skalen- und Indexberechnung (Cronbach's Alpha), qualitative Kodierung offener Antworten sowie eine Management Summary mit Handlungsfeldern. Es wird in Python (mit pandas und scipy) oder R implementiert, wobei ein gebündeltes Skript (`survey_stats.py`) getestete Helfer für Konfidenzintervalle mit endlicher Populationskorrektur, p-Wert-Anpassung, Banner-Tabellen und mehr bereitstellt. Es erzwingt grundlegende Regeln, z. B. dass Ursachen oder Motive nie spekuliert werden, standardmäßig gleiche Gewichtung gilt und die Anonymität durch minimale Gruppengrößen und Zellunterdrückung geschützt wird.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/benno-mueller/survey-analysis/tree/HEAD

Installed? Explore more Recherche & Datenanalyse skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Umfrageanalyse (Survey Analysis)

Verwandeln Sie einen rohen Umfrageexport in Ergebnisse, die ein professioneller Umfrageforscher unterschreiben würde: jede Zahl hat ihre Basis, Unsicherheit wird ehrlich angegeben, Unterschiede werden nur behauptet, wenn sie statistisch haltbar sind, und kein Befragter kann identifiziert werden.

Das Skill ist tool- und themenagnostisch. Alles Surveyspezifische ist ein Parameter (Phase 0), keine fest einprogrammierte Annahme.

Grundregeln (gelten für jede Umfrage, überschreiben jeden anderen Wunsch nach "Erkenntnis")

  1. Nur statistische Interpretation. Beschreiben Sie, was die Daten zeigen: Größe, Präzision, Robustheit, Unterschiede, Konsistenz. Bieten Sie niemals Erklärungen, Ursachen, Motive oder Hypothesen an, warum ein Ergebnis so ist – nicht einmal vorsichtig („möglicherweise weil …“, „dies könnte darauf hindeuten …“). Von den Befragten selbst genannte Gründe (offene Antworten) können als das berichtet werden, was die Befragten gesagt haben.
  2. Standardmäßig gleiche Gewichtung. Jede Antwort zählt einmal. Gewichte werden nur verwendet, wenn das Umfragedesign sie erfordert (z. B. disproportionale Stichprobe, eine mit den Daten gelieferte Gewichtungsvariable) oder die Parameter sie festlegen. Wägen Sie niemals auf eigene Initiative; berichten Sie stattdessen Ungleichgewichte als Einschränkung.
  3. Kreuztabellen und Untergruppenberichte nur wo erlaubt. Ob Ergebnisse überhaupt aufgeschlüsselt werden dürfen, nach welchen Variablen und unter welchen Grenzen, ist eine Entscheidung des Umfrageeigentümers (Parameter crosstabs, subgroup_reports, anonymity). Ohne Erlaubnis: nur Gesamtergebnisse.
  4. Alle Berechnungen im Code (Python mit pandas/scipy oder R). Schätzen Sie nie eine Zahl im Fließtext. Arbeiten Sie auf einer Kopie; ändern Sie niemals die Originaldaten des Benutzers.

Gebündelte Dateien

DateiVerwendung in
references/methods.mdPhasen 3-9: Formeln, Testauswahl, Gewichtung, Offenlegungskontrolle, durchgerechnetes Beispiel
references/reporting.mdPhase 10: Management Summary, Handlungsfelder, Struktur, Formulierung, Diagramme
references/data-sources.mdPhase 1: Exportformate (LimeSurvey, MS Forms, Google Forms, SurveyMonkey, SPSS/R)
scripts/survey_stats.pyAlle Phasen: getestete Helfer – KI mit endlicher Populationskorrektur, Worst-Case-Nonresponse-Grenzen, Tests und Effektstärken, p-Wert-Anpassung, Banner-Tabellen mit Signifikanzbuchstaben, minimale nachweisbare Differenz, Raking und Design-Effekt, Gruppen-Offenlegungsplan, Zellunterdrückung, Cronbachs Alpha, Qualitätsflags
assets/survey-config.template.yamlPhase 0: die Parameterdatei

Wenn nur diese SKILL.md installiert ist, ist der Abschnitt Kernregeln am Ende das absolute Minimum, das Sie benötigen; implementieren Sie die Formeln selbst im Code.


Phase 0 – Parameter

Suchen Sie nach einer ausgefüllten survey-config.yaml (Vorlage in assets/). Andernfalls sammeln Sie die folgenden Parameter. Fakten, die aus den Daten oder Dateien abgelesen werden können, lesen Sie selbst; Entscheidungen gehören dem Benutzer. Stellen Sie offene Entscheidungen in einer Runde (max. 4 Fragen), jede mit Ihrer empfohlenen Voreinstellung. Wenn niemand da ist, um zu antworten, verwenden Sie die Voreinstellungen und listen Sie sie unter „Annahmen“ im Bericht auf. Voreinstellungen sind bewusst restriktiv: keine Aufschlüsselungen, keine Gewichtung.

ParameterBedeutungQuelleVoreinstellung
population.definitionAuf wen sich die Umfrage beziehtFrage– (erforderlich)
population.size_NGröße der ZielpopulationFragenull = unbekannt/sehr groß
population.designcensus, simple_random, stratified, quota, self_selectedFrageself_selected (konservativste Annahme)
population.known_marginsBekannte Populationszahlen pro MerkmalFrage / Dateienkeine
fieldwork.invited / completes / partials / ineligibleErgebniszahlenDaten + Fragecompletes = Datensätze mit Absendedatum
purposedescribe, compare_groups, test_hypotheses, track_waves, benchmarkFragedescribe
hypothesesVorab festgelegte statistische Vergleiche (konfirmatorisch)Fragekeine -> alle Vergleiche explorativ
crosstabs.modenone, specified (aufgelistete Variablen), banner (vollständige Tabellenband)Fragenone
crosstabs.variablesAufschlüsselungsvariablen, die verwendet werden dürfenFrage[]
crosstabs.forbidden_combinationsVariablenpaare, die nie gekreuzt werden dürfenFragealle Zwei-Variablen-Kombinationen von Demografien
subgroup_reports.enabledSeparate Berichte pro Einheit (Standort, Abteilung, …)Fragefalse
subgroup_reports.unit_variable / min_n / min_response_rate / compare_to_totalGrenzen für EinheitenberichteFrage– / anonymity.min_group_n / keine / true
anonymity.min_group_nMindestanzahl von Befragten für jede berichtete GruppeFrage / Vereinbarung5
anonymity.min_cell_nZellen mit 0 < Anzahl < Wert unterdrückenFrage / Vereinbarungnull (aus)
weighting.modenone, design (Gewichtungsvariable in Daten), rakingUmfragedesign / Parameternone
weighting.variable / margins / trimDetails für design / rakingParameter– / – / [0.3, 3]
analysis.confidence_level / alpha / powerVoreinstellung0.95 / 0.05 / 0.80
analysis.multiple_testingholm, bh, noneVoreinstellungholm konfirmatorisch, bh Banner/explorativ
analysis.dont_know / dont_know_codesBehandlung von „Weiß nicht / Keine Angabe“Voreinstellungvon Basis ausgeschlossen, separat berichtet
analysis.likert_top_boxKategorien, die als Zustimmung gewertet werdenVoreinstellung2 bei 4-6-Punkt-Skalen, 3 bei 7+ Punkten
analysis.item_polarityWelcher Pol jedes Items günstig istCodebuch + Frageaus Beschriftungen
analysis.quality_rulesTempo-Verhältnis, Straightlining mindestens ItemsVoreinstellung0,4 x Median; 5 Items
open_text.quotesnone, paraphrase, anonymized_verbatimFrageparaphrase
recommendations.modenone, action_fields, action_fields_with_measuresFrageaction_fields
recommendations.measuresMaßnahmen, die der Benutzer zur Zuordnung zu Ergebnissen bereitstelltFrage[]
benchmarksFrühere Wellen / externe Studien mit identischer FormulierungFragekeine
output.audience / format / languageFrage / Gesprächlay / Standardumgebung / Sprache des Benutzers

Phase 0 endet mit einer kurzen Parameterübersicht, die der Benutzer korrigieren kann.

Phase 1 – Import und Codebuch

Lesen Sie references/data-sources.md für den vorliegenden Export. Dann:

  1. Laden Sie die Daten; entfernen Sie sofort direkte Identifikatoren (IP, E-Mail, Name, Token, Referrer-URL, genaue Zeitstempel sofern nicht benötigt) und geben Sie an, dass Sie dies getan haben.
  2. Erstellen Sie ein Codebuch: Variable, Fragetext, Typ (Einfachauswahl, Mehrfachauswahl, Likert k-Punkte, numerisch, offener Text, Matrixzeile, Metadaten), Wertelabels, Skalenrichtung und -polarität, umgekehrte Items, Fehlend-/„Weiß-nicht“-Codes, Filterbedingung (wem die Frage gezeigt wurde).
  3. Entnehmen Sie Skalenrichtung und umgekehrte Items den Labels, niemals einer Annahme. Wenn Labels fehlen, fragen Sie nach.
  4. Codieren Sie in eine Analysedatei um; halten Sie die Zuordnung im Log fest.

Phase 2 – Datenbereinigung

Markieren, dokumentieren und erst dann entscheiden. Niemals stillschweigend löschen.

  • Vollständige vs. teilweise Teilnahmen; definieren Sie die Analysestichprobe (Voreinstellung: vollständige Teilnahmen; Teilweise nur für die von ihnen beantworteten Items, wenn der Benutzer zustimmt). Abbruch nach Seite.
  • Duplikate (gleiches Token oder identische Antwortvektoren mit nahezu identischen Zeitstempeln).
  • Temposünder: Gesamtdauer < ratio x Median. Straightliner in Matrizen mit

    = min_items Items. Ausschließen nur nach Vorlage der Anzahl und des Musters an den Benutzer; bei kleinem n niemals aufgrund einer einzigen Flagge ausschließen.

  • Item-Nonresponse pro Item; markieren bei > 10 %.
  • Unzulässige Werte, Filterverletzungen, unmögliche Kombinationen.

Ausgabe: ein Datenbereinigungsprotokoll (Prüfung, Anzahl, Entscheidung, Grund).

Phase 3 – Inferenzrahmen und Gewichtung

Lesen Sie references/methods.md, Abschnitte 1 und 7. Das Design entscheidet, welche Unsicherheitsaussagen legitim sind:

SituationWas berichten
Vollerhebung oder nahezu vollständig in einer bekannten, kleinen Population (n/N > 5 %)KI mit endlicher Populationskorrektur (FPC) plus Worst-Case-Nonresponse-Grenzen für Schlüsselzahlen. Ergebnisse als „unter den Befragten“ formulieren, es sei denn, Nonresponse-Prüfungen stützen eine Verallgemeinerung.
WahrscheinlichkeitsstichprobeStandard-KI (FPC wenn n/N > 5 %); Design-Gewichte, wenn das Design ungleiche Auswahlwahrscheinlichkeiten aufweist.
Selbstselektiert / offener Link / BequemlichkeitsstichprobeKeine Populationsinferenz. Anteile deskriptiv; KI ggf. nur als „statistische Präzision“ mit explizitem Vorbehalt.

Gewichtung folgt nur weighting.mode (Grundregel 2). Wenn Gewichte verwendet werden: berichten Sie gewichtete und ungewichtete Schlüsselzahlen nebeneinander, den Kish-Designeffekt und die effektive Stichprobengröße (kish_deff, effective_n) und verwenden Sie die effektive Stichprobengröße für KI und Tests.

Phase 4 – Verteilungen aller Antworten

  • Jedes Item, jede Zahl mit ihrer Basis (n) nach Filtern und Ausschlüssen.
  • Einfachauswahl: Anzahlen und Anteile; KI (Wilson, mit FPC falls zutreffend) für Schlüsselzahlen.
  • Likert: zuerst vollständige Verteilung, dann Top-Box-/Bottom-Box mit KI, Median. Mittelwerte +/- SD nur als Ergänzung und nur bei >= 5-Punkt-Items oder Multi-Item-Skalen.
  • Mehrfachauswahl: Anteil der Befragten pro Option; Summen über 100 %.
  • Numerisch: zuerst Median und IQR, dann Mittelwert/SD; Ausreißer prüfen.
  • Rundung: ganze Prozentpunkte bei n < 200. Summen ergeben möglicherweise nicht 100 % – einmal darauf hinweisen.
  • Schlüsselzahlen vs. 50 % (oder einem anderen Referenzwert) nur unter Berücksichtigung von mdd_one_proportion: ein Anteil innerhalb des KI von 50 % ist „etwa die Hälfte“.

Phase 5 – Kreuztabellen und Signifikanz

Geregelt durch crosstabs.mode. Bei none diese Phase vollständig überspringen und im Methodenkasten darauf hinweisen.

  1. Zuerst Offenlegung. Nur crosstabs.variables verwenden; niemals forbidden_combinations kreuzen. Führen Sie reportable_groups() für jede Aufschlüsselung aus: Gruppen unter anonymity.min_group_n werden entfernt, plus sekundäre Unterdrückung, wenn der entfernte Rest aus der Gesamtzahl ableitbar wäre. Wenden Sie anonymity.min_cell_n an, falls festgelegt.
  2. Power. Berechnen Sie für jede Aufschlüsselung die minimale nachweisbare Differenz (mdd_two_proportions, 80 % Power). Berichten Sie sie, damit „kein signifikanter Unterschied“ richtig gelesen wird („Unterschiede unter x Prozentpunkten können nicht nachgewiesen werden“).
  3. Tests. Wählen Sie nach Datentyp aus (references/methods.md, Abschnitt 3): Chi-Quadrat / Fisher für Kategorien, Mann-Whitney / Kruskal-Wallis für ordinale Items, Welch für metrische Skalenwerte. Immer mit Effektstärke und ihrer Beschriftung; ein p-Wert allein ist niemals ein Befund.
  4. Banner-Tabellen (crosstabs.mode: banner): banner_table() / format_banner() für jedes Item x erlaubte Variable – Spaltenprozente, Basiszeile, Signifikanzbuchstaben (ein Buchstabe kennzeichnet einen signifikant höheren Anteil als die Spalte mit diesem Buchstaben), Buchstaben basieren auf p-Werten, die innerhalb der Zeile angepasst wurden. Das Band ist explorativ: Bevor eine Differenz in den Text aufgenommen wird, werden alle p-Werte des Bands gemeinsam mit Benjamini-Hochberg (p_adjust über die zurückgegebenen tests) angepasst. Banner-Tabellen kommen in den Anhang; nur robuste Unterschiede (signifikant nach bandweiter Anpassung und mindestens eine kleine Effektstärke) kommen in den Text.
  5. Trennen Sie konfirmatorische Ergebnisse (vorab festgelegte hypotheses) von explorativen.
  6. Ein nicht signifikanter Unterschied ist „kein verlässlicher Unterschied“, niemals ein Trend.

Phase 6 – Untergruppenberichte

Nur wenn subgroup_reports.enabled. Für jede Einheit von unit_variable:

  1. reportable_groups(sizes, min_n, total_published=True, invited, min_response_rate) entscheidet, welche Einheiten einen Bericht erhalten. Die Restregel ist wichtig: Wenn eine kleine Einheit zurückgehalten wird, aber alle anderen und die Gesamtsumme veröffentlicht werden, kann ihr Ergebnis durch Subtraktion berechnet werden – die Funktion hält weitere Einheiten zurück, bis der zurückgehaltene Rest selbst

    = min_n ist. Listen Sie zurückgehaltene Einheiten und den Grund (ohne ihre Zahlen) für den Umfrageeigentümer auf, nicht in den veröffentlichten Berichten.

  2. Jeder Einheitenbericht verwendet die gleiche Struktur wie der Hauptbericht, die eigene Basis und KI der Einheit (FPC mit der Anzahl der Eingeladenen der Einheit als N) und – wenn compare_to_total – die Gesamtsumme als Referenz. Vergleichen Sie Einheiten nicht miteinander, es sei denn, crosstabs erlaubt diese Variable.
  3. Innerhalb eines Einheitenberichts gibt es keine weiteren Aufschlüsselungen, es sei denn, dies ist ausdrücklich erlaubt und alle Gruppen bestehen die Schwellenwerte.

Phase 7 – Skalen und Indizes

Nur für Itemsets, die als Skala konzipiert sind (oder validierte Instrumente). Codieren Sie umgekehrte Items um, berechnen Sie Cronbachs Alpha (und McDonalds Omega, wenn ein Faktorenpaket verfügbar ist), Item-Rest-Korrelationen, Alpha-wenn-gelöscht. Bilden Sie einen Skalenwert nur, wenn Alpha >= .70 (>= .60 für 3-Item-Kurzskalen, mit einem Vorbehalt).

Phase 8 – Offene Antworten

Siehe references/methods.md, Abschnitt 6. Lesen Sie jede Antwort, erstellen Sie einen induktiven Codierrahmen, codieren Sie mit mehreren Codes (mehrere Codes pro Antwort erlaubt), berichten Sie Themen als „x von n Befragten erwähnten …“. Zweiter Codierdurchgang bei >= 20 %, Übereinstimmung berichten. Geben Sie an, dass die Codierung von einer KI als einzelnem Codierer durchgeführt wurde. Zitate nur, soweit durch open_text.quotes erlaubt, bereinigt von allem Identifizierenden. Berichten Sie, was die Befragten geschrieben haben; fügen Sie keine eigene Erklärung hinzu.

Phase 9 – Nonresponse und Repräsentativität

  • Rücklaufquoten (RR1 / RR2, response_rates()), insgesamt und pro bekannter Gruppe.
  • Vergleichen Sie die Zusammensetzung der Befragten mit known_margins (Anpassungsgüte-Test). Rücklaufquoten, die zwischen Gruppen um mehr als 15 Prozentpunkte abweichen, werden als Einschränkung berichtet (und, wenn Untergruppenberichte erlaubt sind, Schlüsselzahlen pro Gruppe). Keine Gewichtung, es sei denn, weighting.mode sagt dies.
  • Item-Nonresponse-Muster; frühe vs. späte Befragte, falls Zeitstempel vorhanden sind.
  • Schlussfolgern Sie explizit, auf wen die Ergebnisse zutreffen und mit welchen Grenzen.

Phase 10 – Interpretation, Management Summary und Bericht

Lesen Sie references/reporting.md.

  • Interpretation = nur statistische Lesart (Grundregel 1): wie groß, wie präzise, wie robust (KI, Worst-Case-Grenzen), wie konsistent über erlaubte Gruppen hinweg, wie im Vergleich zu Benchmarks mit identischer Formulierung.
  • Management Summary (erste Seite): 3-7 Schlüsselergebnisse mit n und Unsicherheit, dann Handlungsfelder.
  • Handlungsfelder (recommendations.mode): Ordnen Sie Items oder Themen nur nach statistischen Kriterien – Anteil ungünstiger Antworten, Robustheit unter Worst-Case-Grenzen …

(gekürzt zur Übersetzung)

Verwandte Skills