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")
- 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.
- 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.
- 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. - 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
| Datei | Verwendung in |
|---|---|
references/methods.md | Phasen 3-9: Formeln, Testauswahl, Gewichtung, Offenlegungskontrolle, durchgerechnetes Beispiel |
references/reporting.md | Phase 10: Management Summary, Handlungsfelder, Struktur, Formulierung, Diagramme |
references/data-sources.md | Phase 1: Exportformate (LimeSurvey, MS Forms, Google Forms, SurveyMonkey, SPSS/R) |
scripts/survey_stats.py | Alle 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.yaml | Phase 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.
| Parameter | Bedeutung | Quelle | Voreinstellung |
|---|---|---|---|
population.definition | Auf wen sich die Umfrage bezieht | Frage | – (erforderlich) |
population.size_N | Größe der Zielpopulation | Frage | null = unbekannt/sehr groß |
population.design | census, simple_random, stratified, quota, self_selected | Frage | self_selected (konservativste Annahme) |
population.known_margins | Bekannte Populationszahlen pro Merkmal | Frage / Dateien | keine |
fieldwork.invited / completes / partials / ineligible | Ergebniszahlen | Daten + Frage | completes = Datensätze mit Absendedatum |
purpose | describe, compare_groups, test_hypotheses, track_waves, benchmark | Frage | describe |
hypotheses | Vorab festgelegte statistische Vergleiche (konfirmatorisch) | Frage | keine -> alle Vergleiche explorativ |
crosstabs.mode | none, specified (aufgelistete Variablen), banner (vollständige Tabellenband) | Frage | none |
crosstabs.variables | Aufschlüsselungsvariablen, die verwendet werden dürfen | Frage | [] |
crosstabs.forbidden_combinations | Variablenpaare, die nie gekreuzt werden dürfen | Frage | alle Zwei-Variablen-Kombinationen von Demografien |
subgroup_reports.enabled | Separate Berichte pro Einheit (Standort, Abteilung, …) | Frage | false |
subgroup_reports.unit_variable / min_n / min_response_rate / compare_to_total | Grenzen für Einheitenberichte | Frage | – / anonymity.min_group_n / keine / true |
anonymity.min_group_n | Mindestanzahl von Befragten für jede berichtete Gruppe | Frage / Vereinbarung | 5 |
anonymity.min_cell_n | Zellen mit 0 < Anzahl < Wert unterdrücken | Frage / Vereinbarung | null (aus) |
weighting.mode | none, design (Gewichtungsvariable in Daten), raking | Umfragedesign / Parameter | none |
weighting.variable / margins / trim | Details für design / raking | Parameter | – / – / [0.3, 3] |
analysis.confidence_level / alpha / power | Voreinstellung | 0.95 / 0.05 / 0.80 | |
analysis.multiple_testing | holm, bh, none | Voreinstellung | holm konfirmatorisch, bh Banner/explorativ |
analysis.dont_know / dont_know_codes | Behandlung von „Weiß nicht / Keine Angabe“ | Voreinstellung | von Basis ausgeschlossen, separat berichtet |
analysis.likert_top_box | Kategorien, die als Zustimmung gewertet werden | Voreinstellung | 2 bei 4-6-Punkt-Skalen, 3 bei 7+ Punkten |
analysis.item_polarity | Welcher Pol jedes Items günstig ist | Codebuch + Frage | aus Beschriftungen |
analysis.quality_rules | Tempo-Verhältnis, Straightlining mindestens Items | Voreinstellung | 0,4 x Median; 5 Items |
open_text.quotes | none, paraphrase, anonymized_verbatim | Frage | paraphrase |
recommendations.mode | none, action_fields, action_fields_with_measures | Frage | action_fields |
recommendations.measures | Maßnahmen, die der Benutzer zur Zuordnung zu Ergebnissen bereitstellt | Frage | [] |
benchmarks | Frühere Wellen / externe Studien mit identischer Formulierung | Frage | keine |
output.audience / format / language | Frage / Gespräch | lay / 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:
- 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.
- 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).
- Entnehmen Sie Skalenrichtung und umgekehrte Items den Labels, niemals einer Annahme. Wenn Labels fehlen, fragen Sie nach.
- 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 <
ratiox Median. Straightliner in Matrizen mit=
min_itemsItems. 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:
| Situation | Was 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. |
| Wahrscheinlichkeitsstichprobe | Standard-KI (FPC wenn n/N > 5 %); Design-Gewichte, wenn das Design ungleiche Auswahlwahrscheinlichkeiten aufweist. |
| Selbstselektiert / offener Link / Bequemlichkeitsstichprobe | Keine 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.
- Zuerst Offenlegung. Nur
crosstabs.variablesverwenden; niemalsforbidden_combinationskreuzen. Führen Siereportable_groups()für jede Aufschlüsselung aus: Gruppen unteranonymity.min_group_nwerden entfernt, plus sekundäre Unterdrückung, wenn der entfernte Rest aus der Gesamtzahl ableitbar wäre. Wenden Sieanonymity.min_cell_nan, falls festgelegt. - 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“). - 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. - 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ückgegebenentests) angepasst. Banner-Tabellen kommen in den Anhang; nur robuste Unterschiede (signifikant nach bandweiter Anpassung und mindestens eine kleine Effektstärke) kommen in den Text. - Trennen Sie konfirmatorische Ergebnisse (vorab festgelegte
hypotheses) von explorativen. - 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:
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_nist. Listen Sie zurückgehaltene Einheiten und den Grund (ohne ihre Zahlen) für den Umfrageeigentümer auf, nicht in den veröffentlichten Berichten.- 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,crosstabserlaubt diese Variable. - 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.modesagt 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)