Sortierung von Variablen mit vielen Ausprägungen

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

Moderatoren: EDi, jogo

Antworten
Vreni
Beiträge: 4
Registriert: So Jul 12, 2020 10:28 am

Sortierung von Variablen mit vielen Ausprägungen

Beitrag von Vreni »

Hallo zusammen,

ich bin absoluter R-Anfänger und entschuldige mich, falls meine Frage(n) für versierte R-Nutzer sehr banal sind, oder falls ich total falsch an die Sache heran gehe...

Ich habe einen Datensatz, in dem es um Filme geht. Eine meiner Variablen ist "genres"(character Variable). Da es relativ viele Genres gibt und manche Filme gleichzeitig mehreren Genres zugeordnet werden, habe ich sehr viele unterschiedliche Merkmalsausprägungen, je nachdem, in welcher Konstellation welche Genres auftreten.

Ich möchte nun untersuchen, ob Filme aus dem Genre "Action" teurer sind, als Filme, die nicht aus diesem Genre sind. Aus diesem Grund muss ich ja prinzipiell meine Daten in zwei Gruppen einteilen, nämlich die, bei denen "Action" irgendwo in der Variable genannt wird (egal, in welcher Konstellation mit anderen Genres) und die, bei denen das Wort "Action" nicht vorkommt.

Ich habe mich schon durch diverse Hilfeseiten und Foren geklickt und bin schon so weit gekommen, dass ich dies aufteilen konnte:

Mein ursprünglicher Datensatz heißt "movies":

Actionmovies <- movies %>% select(title, directors, genres, budget) %>% filter(str_detect(genres, "Action"))

MoviesohneAction <- movies %>% select(title, directors, genres, budget) %>% filter(str_detect(genres, "Action") == FALSE)

Jetzt habe ich in R Studio im Environment-Fenster sowohl meinen ursprünglichen Datensatz (movies) mit 1195 Objekten angezeigt, als auch die zwei Datensätze "Actionmovies" (mit 380 Objekten) und "MoviesohneAction" (mit 815 Objekten).

Mein Problem ist nun, dass ich es nicht schaffe, mit diesen Datensätzen weiter zu arbeiten. Ich will jetzt beispielsweise einfach erst mal ein Tortendiagramm oder Kreisdiagramm erstellen, um zu zeigen wie groß in meiner Stichprobe der Anteil an Action/Nicht-Action-Filmen ist.
Das einzige, was ich "schaffe", ist einen Boxplot zu erstellen, um die Unterschiede beim Budget darzustellen:

boxplot(Actionmovies$budget, MoviesohneAction$budget) - der funktioniert. 8-)

Bei allen möglichen anderen Befehlen (pie/diffmean/histogram...) ist mir nicht klar, wie die Syntax in der Klammer aussehen muss und alle Versuche bringen die unterschiedlichsten Fehlermeldungen.

Bin ich mit meiner "Aufteilung" bisher total auf dem Holzweg? Wie bekomme ich ein Diagramm hin? Und damit stehe ich natürlich erst am Anfang vieler Fragen, weil mir auch noch nicht klar ist, auf welchem Weg ich dann meine Hypothese eigentlich testen soll.

Bin für jede Anregung und Hilfestellung dankbar! :roll:

Danke an alle, die bis hier hin gelesen haben :)

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

Re: Sortierung von Variablen mit vielen Ausprägungen

Beitrag von bigben »

Hallo Vreni,

ich würde nicht sagen, dass die Aufteilung total der Holzweg war, aber meist ist es in R besser, die Daten nicht aufzuteilen sondern einfach nur eine neue Spalte im Dataframe zu erstellen die entweder true oder false oder 0 oder 1 oder "A" oder "B" ist, je nachdem in welche Gruppe die jeweilige Zeile gehört. Dafür würde sich in diesem Fall die Funktion ifelse anbieten.

Probier mal, ob Du es damit hinkriegst, sonst stell ein paar Beispieldaten hier ein, anhand derer man das vormachen kann.
pie/diffmean/histogram...)
Kuchendiagramme sollten aus wissenschafltichen Veröffentlichungen weitgehend verdrängt und geächtet sein. Ist das eine Vorgabe zum Lösen einer Hausaufgabe, oder kann man Dich davon noch abbringen. diffmean ist eine Spezialfunktion aus einem Zusatzpaket. Willst Du nicht lieber einfach mit mean Mittelwerte aus Deinen beiden bereits getrennten Datensätzen errechnen und selbst die Differenz bilden? Sollte recht einfach sein. Stellt sich aber wieder die Frage, ob es eine Hausaufgabe mit Fremdvorgaben ist oder ob Alternativwege statthaft sind. Auch eine Funktion histogram liefert R nicht von Hause aus mit. Du solltest mindestens angeben, aus welchem package die stammt, damit man nachlesen kann, ob die lieber getrennte Datensätze oder so eine Unterscheidungsspalte wie von mir oben vorgeschlagen verarbeitet.
Falls es sich um die histogram Funktion aus dem package lattice handelt könnte das hier helfen:

Code: Alles auswählen

movies <- data.frame(budget = runif(40, 1000, 5000),
                     genre= c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
                              "AB", "B", "AB", "B", "B", "A","A","A","A","A",
                              "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
                              "A", "B", "AB", "A", "A", "A","A","A","A","A"))

movies$ist.b <- factor(ifelse(movies$genre %in% c("AB","B"), "Ist B", "Nicht B"))

library(lattice)
histogram( ~ budget | ist.b, data = movies)
histogram( ~ budget | ist.b, data = movies, layout=c(1,2))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Vreni
Beiträge: 4
Registriert: So Jul 12, 2020 10:28 am

Re: Sortierung von Variablen mit vielen Ausprägungen

Beitrag von Vreni »

Hallo lieber Bernhard,

zunächst mal vielen lieben Dank für Deine Unterstützung und Hilfestellung.

Ich werde die von Dir gegebenen Tipps in den nächsten Tagen mal ausprobieren. Eine neue Spalte zu erzeugen scheint mir an sich auch der "elegantere" Weg, allerdings ist mir noch nicht ganz schlüssig, wie ich den Befehl da schreiben muss.

Mal ganz generell ist es so, dass ich gerne so viele R-Befehle einbauen würde, wie möglich (aber natürlich ohne, dass es "sinnlos" ist, weil man irgendwas entweder deutlich einfacher machen könnte, oder eine Information nicht notwendig ist). Es gibt keine Einschränkungen für Pakete, die ich benutzen darf, allerdings muss ich natürlich dazu schreiben, welche Zusatzpakete ich verwendet habe. Das mit dem diffmean ist einfach ein Befehl, den wir in unseren Übungen/Vorlesungen häufiger gesehen haben, daher wollte ich ihn mit "unter bringen", auch, wenn es natürlich simpel ist, dass ich mir einfach die beiden Mittelwerte ausgeben lasse und selbst die Differenz errechne. Es geht allerdings in meiner Hausarbeit nicht so sehr um das Ergebnis der Analyse am Ende, sondern eben darum, wie ich die Aufgabenstellung mir R löse und dass ich möglichst zeige, dass ich unterschiedliche Befehle in R verwenden kann.

Kuchendiagramm war jetzt eben einfach eine Möglichkeit, die mir als Laie eingefallen ist, um die Verteilung darzustellen, aber ich bin mit der Idee nicht verheiratet. Ich hätte nur eben gerne irgendwas als Graphik drin. Auch hier geht es weniger darum, dass es wirklich notwendig wäre (wie beim Diffmean eben auch), sondern darum, dass ich etwas mehr aus der Arbeit "mache" und lieber mehr Befehle drin hab, als zuwenige (solange sie natürlich bei der Fragestellung noch irgendwie sinnvoll sind).

Könntest Du mir bei dem data.frame Befehl, den Du mir notiert hast, mal dahinter schreiben, was da welche Angabe "macht"? Also, was sind jetzt z. B. die 40, 1000 und 5000? Verstehe ich das richtig, dass ich hinter dem c in der Klammer alle "Möglichkeiten" eingeben müsste, wie der Vektor heißen kann? Sorry - wie gesagt, blutige Anfängerin....

Lieben Dank noch mal und herzliche Grüße!

Vreni

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

Re: Sortierung von Variablen mit vielen Ausprägungen

Beitrag von bigben »

Vreni hat geschrieben:
Di Jul 21, 2020 7:36 pm
Könntest Du mir bei dem data.frame Befehl, den Du mir notiert hast, mal dahinter schreiben, was da welche Angabe "macht"? Also, was sind jetzt z. B. die 40, 1000 und 5000? Verstehe ich das richtig, dass ich hinter dem c in der Klammer alle "Möglichkeiten" eingeben müsste, wie der Vektor heißen kann?
Nein, das verstehst Du leider falsch. In diesen Zeilen habe ich nur ein paar sinnlose Zufallsdaten erstellt um anhand dieser Zufallsdaten dann etwas vorzumachen. Du solltest wahrscheinlich keine sinnlosen Zufallsdaten verwenden, sondern den Datensatz mit den Filmen, den Du für Deine Hausaufgabe bekommen hast.

Wenn ich das richtig verstehe handelt es sich um die Aufgabe, ein lexikalisches und syntaktisches Feuerwerk abzufackeln um zu zeigen, was Du hättest lernen sollen, aber nicht gelernt hast.

Deine zwei Codezeilen von oben deuten stark daraufhin, dass Du in einem speziellen Dialekt von R ausgebildet wurdest, den ich nicht wirklich kann. Daher bin ich als Wegweiser die falsche Person.

Viel Erfolg,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Vreni
Beiträge: 4
Registriert: So Jul 12, 2020 10:28 am

Re: Sortierung von Variablen mit vielen Ausprägungen

Beitrag von Vreni »

Hallo Bernhard,

ich hatte Dich schon richtig verstanden, dass das in Deinem Beispiel Zufallsdaten waren, die ich mit meinem Datensatz füllen müsste. Ich tu mir nur etwas schwer meine Fragen richtig zu formulieren, weil ich in dem Vokabular der Bezeichnungen noch nicht sattelfest bin. Also, was mich interessiert ist: wie kann ich die Syntax in der Klammer so schreiben, dass er mir eine Spalte so erzeugt, dass ich entweder 1 oder 2 (oder yes oder no, oder was auch immer) im Feld stehen habe, je nachdem, ob ein bestimmtes Wort in der ursprünglichen Spalte vorkommt, oder nicht? Wenn ich von vorneherein zwei Möglichkeiten habe (z. B. männlich oder weiblich - ist dann entweder männlich ja oder nein, oder weiblich ja oder nein - je nachdem, wie herum ich es formuliere), dann ist es relativ logisch für mich. Aber ich habe ja in meinem ursprünglichen Datensatz einen Freitext und möchte meinen Datensatz nun danach gruppieren, ob der Begriff "Action" in diesem Freitextfeld vorkommt, oder nicht.

Es ist auch tatsächlich nicht so, dass ich ein "Feuerwerk abfackeln" soll - ich möchte hier Deinen Eindruck ein wenig gerade rücken: dieses Modul besteht aus insgesamt 12 Terminen. Während dieser 12 Termine sollen wir (als zunächst mal Laien) ein Basiswissen von Statistik vermittelt bekommen und später so weit mit R arbeiten können, dass wir in späteren Modulen eigens generierte Datensätze bearbeiten/auswerten können. Wir haben in diesem Modul also zunächst mal mit der Theorie von Statistik zu kämpfen und dazu noch die Software. Das ist für die Kürze der Zeit einfach wahnsinnig viel, aber auch weder von uns noch vom Dozenten zu ändern. Dieser tut also natürlich sein Möglichstes, um uns ein Grundverständnis für R beizubringen, aber einen klassischen "Grundwortschatz" gibt es da einfach nicht. Du hast sicher insofern recht, als ich einen gewissen "Dialekt" beigebracht bekommen habe - so haben wir beispielsweise fast ausschließlich mit dem Paket "mosaic" gearbeitet und haben fast ausschließlich simulationsbasierte Inferenz behandelt.

Den Datensatz, den ich jetzt habe, den durfte ich mir selbst aussuchen - vielleicht habe ich einfach den falschen gewählt, weil ich in meinem Fall jetzt viele Dinge machen muss, die ich in den Vorlesungen nie gelernt habe, aber ich wusste auch bei der Wahl des Datensatzes noch nicht, nach welchen Kriterien ich diesen am besten auswähle, um es mir "einfach" zu machen.
Die beiden Codezeilen, die ich ursprünglich geschrieben habe, sind auch nichts, was ich gelernt hätte, sondern einfach das, was ich bei meiner bisherigen Recherche gefunden habe, um die Daten einfach überhaupt mal in zwei Gruppen zu separieren, aber ich bin da nicht drauf fest gelegt, wenn es eine andere Möglichkeit gibt.

Es wäre mir deswegen schon eine Hilfe, wenn Du mir bitte doch bei Deinem Beispiel mit dem data-frame-Befehl mal dazu schreiben könntest, was jeder der Befehle jetzt in diesem Fall "macht"? Oder anders: wie muss die Funktion mit ifelse aussehen, wenn ich eben danach selektieren will, ob ein Wort vorkommt, oder nicht?

Bitte entschuldige, wenn das "dumme" Fragen sind, aber ich beiße mir wirklich die Zähne aus, an dieser Gruppierung. Vielleicht wäre es alles einfacher, wenn ich mir einen komplett neuen Datensatz suche, aber ich habe noch die Hoffnung, dass mir "nur" ein richtiger Befehl fehlt, um die neue Spalte im Dataframe zu erstellen und dass ich dann selbst wieder weiter komme.

Nochmals lieben Dank für Deine Mühe und sorry, dass es so schwer ist und ich mich vielleicht einfach noch so blöd anstelle.

Gruß

Vreni

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

Re: Sortierung von Variablen mit vielen Ausprägungen

Beitrag von bigben »

Hallo Vreni,

vor 2 Wochen hatte ich Dir geschrieben:
bigben hat geschrieben:
Mo Jul 13, 2020 11:36 pm
Probier mal, ob Du es damit hinkriegst, sonst stell ein paar Beispieldaten hier ein, anhand derer man das vormachen kann.
Ohne das ist da viel Stochern im Dunkeln.
Oder anders: wie muss die Funktion mit ifelse aussehen, wenn ich eben danach selektieren will, ob ein Wort vorkommt, oder nicht?
Einen letzten Versuch mache ich jetzt ohne Beispielcode von Dir und hoffe, dass Dir das beim Umsetzen hilft. Ich habe mich dann doch gegen die ifelse-Funktion entschieden:

Code: Alles auswählen

bsp <- data.frame(genre = c("Komödie", "Actionkomödie", "Drama", "Actiondrama", "Action", "Schnulze"))

bsp$has.action <- FALSE
bsp$has.action[grep("Action", bsp$genre, fixed = TRUE)] <- TRUE

print(bsp)
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Antworten