Prozentuale Häufigkeit

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
sims2911
Beiträge: 4
Registriert: Fr Jun 23, 2023 10:01 pm

Prozentuale Häufigkeit

Beitrag von sims2911 »

Hallo :)

Ich habe bisher leider nichts passendes im Internet gefunden, deswegen versuche ich es mal hier.
Ich habe zwei Spalten: eine mit Versuchpersonennummer (subj_no) und eine die das Ergebnis eines Tests als korrekt oder inkorrekt (acc) anzeigt.
Es ist ähnlich wie ein Design mit Messiwederholung, ich habe also mehrere Zeilen pro Veruschsperson (VP) und in der Spalte neben der Nummer (acc) jeweils korrekt oder inkorrekt stehen und das pro VP 68 mal.
Jetzt möchte ich wissen, wie viel korrekte bzw. inkorrekte Durchgänge die einzelnen VP hatten.
Dazu konnte ich auch eine Tabelle mit der table Funktion erstellen (table(daten$sub_no,daten$acc)). In der ersten Spalte die VP, in der zweiten die Anzahl der korrekten Durchläufe, in der dritten die Anzahl der inkorrekten.
Jetzt hätte ich diese Tabelle aber gerne 1. als Objekt (so, dass ich damit später weiter arbeiten kann) und 2. in Prozent.
Wenn ich allerdings prop.table(table(daten$sub_no,daten$acc) nutze, zeigt es mir wieder eine Tabelle mit gleichem Aufbau und Dezimalzahlen, die sind allerdings niemals die relative Häufigkeit bzw. der Prozentuale Anteil (man kommt zusammengezählt nicht auf 100 oder 1).

Ich hoffe es ist eingermaßen verständlich..

Liebe Grüße und Danke :)
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Prozentuale Häufigkeit

Beitrag von student »

Hallo,

schau mal hier, das hilft bestimmt zum Verständnis weiter.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Prozentuale Häufigkeit

Beitrag von bigben »

Hallo sims,

wir haben hier im Forum oft das Problem, dass wir über ungenau formulierten Aufgabenstellungen brüten und dann nach dreimal lesen eine Antwort formulieren, die doch nicht der Frage entspricht. Sowas nervt. Unsere Erfahrung zeigt, dass sich das am besten vermeiden lässt, wenn Fragende ein lauffähiges Beispiel mit Daten und ggf. Code formulieren. Deshalb der Link von Student.

Du schreibst zum Beispiel:
ich habe also mehrere Zeilen pro Veruschsperson (VP) [...] und das pro VP 68 mal.
Heißt das jetzt, dass Du pro VP 68mal mehrere Zeilen hast oder dass "mehrere Zeilen" immer "68 Zeilen" sind? Es macht ja einen Unterschied, ob Du eine Auswertung mit einem Ergebnis pro VP oder mit 68 Teilergebnissen pro VP suchst.

Ein reproduzierbares Beispiel von Dir könnte so aussehen:

Code: Alles auswählen

daten <- data.frame(sub_no = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4),
                    acc = sample(c("korrekt", "inkorrekt"), 12, 1))
print(daten)
tabelle <- table(daten)
print(tabelle)
Dann wäre das klar. Das gesuchte Ergebnis ist aber noch unklar:
Jetzt hätte ich diese Tabelle aber gerne 1. als Objekt (so, dass ich damit später weiter arbeiten kann)
Ich weiß nicht, wie Du das meinst. Ich habe oben ein Objekt zum weiter arbeiten "tabelle" genannt. Ist dieser Teil der Frage damit schon beantwortet?
Jetzt hätte ich diese Tabelle aber gerne [...] 2. in Prozent.
Das wird sich machen lassen, aber es fehlt der Bezug. In Prozent von allen Werten? In Prozent von jeder VP, soll da stehen wieviel Prozent der inkorrekten Antworten auf je eine VP zurückgehen oder wovon genau die Prozente?

Genau darin scheint Dein Problem zu bestehen, denn die Werte von prop.table addieren sich durchaus zu 1 auf, wie Du in meinem Beispiel hier sehen kannst:

Code: Alles auswählen

> tabelle
      acc
sub_no inkorrekt korrekt
     1         3       0
     2         2       1
     3         3       0
     4         1       2
> prop.table(tabelle)
      acc
sub_no  inkorrekt    korrekt
     1 0.25000000 0.00000000
     2 0.16666667 0.08333333
     3 0.25000000 0.00000000
     4 0.08333333 0.16666667
> sum(prop.table(tabelle))
[1] 1
Also, bitte stecke etwas Mühe hinein, ein gutes reproduzierbares Datenbeispiel und reproduzierbaren Code zu machen und das erwartete Ergebnis gut zu beschreiben, dann kannst Du in diesem Forum viel Freude haben und viel Hilfe finden.

Eine große Hilfe beim Erstellen von reproduzierbaren Beispielen kann übrigens das Paket reprex sein:
https://community.rstudio.com/t/faq-wha ... e-one/5219
https://reprex.tidyverse.org/reference/reprex.html

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Prozentuale Häufigkeit

Beitrag von Athomas »

Eine große Hilfe beim Erstellen von reproduzierbaren Beispielen kann übrigens das Paket reprex sein
Na, ich weiß nicht - der Fortgeschrittene braucht es nicht, der Anfänger versteht es nicht...
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Prozentuale Häufigkeit

Beitrag von bigben »

Hallo Athomas,

interessanter Einwand. Ich glaube trotzdem, dass es zwischen dem blutigen Anfänger und dem Profi eine hinreichend lange Phase dazwischen gibt, in der der Nutzen überwiegt: Wie oft haben wir hier hilfreiche Aussagen wie "R macht eine Fehlermeldung". reprex zwingt Dich halt, die Variablen im gleichen Code zu definieren die Du anwendest und wenn es eine Fehlermeldung gibt, dann kopiert es automatisch die ganze Fehlermeldung in die Ausgabe. Wie oft werden hier Funktionen genutzt und nicht dazu geschrieben, aus welchem Package die stammen? In reprex-Ausgaben ist entweder der Paketaufruf enthalten oder es gibt eine vernünftige Fehlermeldung die auch der DAU versteht. Alles Probleme auf die der reprex-User hingewiesen wird, ohne einen ganzen Post-Antwort-Zyklus im Forum abwarten zu müssen.

Einer der Gründe, warum ich meinen Code gerne in einem RMarkdown- oder Quarto-Dokument habe -- das bietet ein genauso abgesichertes Umfeld wie reprex.

GLG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
sims2911
Beiträge: 4
Registriert: Fr Jun 23, 2023 10:01 pm

Re: Prozentuale Häufigkeit

Beitrag von sims2911 »

Erstmal vielen Dank für die Tipps!

Meine Daten sehen tatsächlich so aus:

Code: Alles auswählen

daten <- data.frame(sub_no = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4),
                    acc = sample(c("korrekt", "inkorrekt"), 12, 1))
print(daten)
tabelle <- table(daten)
print(tabelle)
Nur habe ich pro VP insgesamt 68 Durchgänge mit korrekt oder inkorrekt, was aber für den Code an sich wahrscheinlich keine Rolle spielt.

Ich habe es auch geschafft mir die Tabelle ausgeben zu lasse:

Code: Alles auswählen

      acc
sub_no inkorrekt korrekt
     1         1       2
     2         2       1
     3         1       2
     4         2       1
Nun würde ich gerne pro VP berechnen, wie viel Prozent der Durchgänge korrekt bzw inkorrekt sind (also z.b. 45% inkorrekt und 55% korrekt für VP1 = 100%). Also nicht 100% für alle VP.

Und wenn ich die Tabelle dann in der passenden Form habe, hätte ich diese geren als Datensatz. Allerdings verschiebt es sich bei mir dann etwas, bzw. eig hätte ich im Endeffekt gerne auch nur drei Variablen (sub_no, inkorrekt, korrekt), also die Variable acc würde dann wegfallen und dafür habe ich korrekt und inkorrekt.

Code: Alles auswählen

sub_no  inkorrekt    korrekt
     1      0.333         0.667
     2      0.667         0.333  
     3      0.333         0.667
     4      0.667         0.333
Das wäre das gewünschte Ergebnis mit den Beispiel Daten.

Ich hoffe diesmal ist es verständlicher.

LG
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Prozentuale Häufigkeit

Beitrag von bigben »

Ja, so ist es verständlich. Die von Dir genutzte Funktion hat einen Parameter margin mit dem man steuern kann, worauf die Prozente sich beziehen sollen. Du müsstest margin auf 1 setzen, weil es Dir um Prozente in den Zeilen geht:

Code: Alles auswählen

daten <- data.frame(sub_no = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4),
                    acc = sample(c("korrekt", "inkorrekt"), 12, 1))

tabelle <- table(daten)
print(prop.table(tabelle, 1))
#>       acc
#> sub_no inkorrekt   korrekt
#>      1 1.0000000 0.0000000
#>      2 0.0000000 1.0000000
#>      3 0.3333333 0.6666667
#>      4 0.3333333 0.6666667
Ginge es um Prozente in den Spalten wäre margin = 2, siehe auch

Code: Alles auswählen

help(prop.table)
VG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
sims2911
Beiträge: 4
Registriert: Fr Jun 23, 2023 10:01 pm

Re: Prozentuale Häufigkeit

Beitrag von sims2911 »

Vielen Vielen Dank, das hat mir wirlich sehr weiter geholfen!
Antworten