Erstellen neuer Variablen in R

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

Moderatoren: EDi, jogo

Gottchen
Beiträge: 20
Registriert: Sa Mai 16, 2020 7:22 pm

Re: Erstellen neuer Variablen in R

Beitrag von Gottchen »

Super, danke jetzt funktioniert es! Wie kann ich diesen Datensatz der 88 Personen zu den jeweiligen 3 Variablen in eine Variable packen? Sodass ich eine Variable habe, die für jede einzelne Person den Mittelwert aus den 3 Variablen (StrongMixed, NotTorn, Indecisive) enthält?

Außerdem will ich jetzt mit dem Alter der Probanden weiterarbeiten. Wie bringe ich "Age" in die Values, sodass ich davon Mean, Median und Mode berechnen lassen kann, um die zentrale Tendenz zu erfassen.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Erstellen neuer Variablen in R

Beitrag von bigben »

Und ich dachte, meine Antwort oben hätte das alles schon abgedeckt. Sowohl das Einlesen als auch den Mittelwert der drei Spalten und Age in rechenfähiger Struktur.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Gottchen
Beiträge: 20
Registriert: Sa Mai 16, 2020 7:22 pm

Re: Erstellen neuer Variablen in R

Beitrag von Gottchen »

Ach, entschuldige mich! Habe deine Nachricht gesehen und auch eingeschrieben, aber irgendwie habe ich als Anfänger das Diagramm an der Seite übersehen und dachte mir nur schade. :D

Wärst Du so nett und könntest mir noch die Fragen dazu beantworten?
1. Du benutzt nach Einlesen des Datensatzes den Befehl "str(hend)". Wofür steht und wozu dient str?
2. Dann benutzt Du hend$Mittelwert <- rowMeans(data.csv[,c("StrongMixed", "NotTorn", "Indecisive")]). Könntest Du mir zum Verständnis die einzelnen Komponenten dieses Befehls erklären? Will es ja auch selber können. :) Zum Beispiel wann setzt man das $-Symbol ein? Wofür steht rowMeans und wofür das c?
3. Ich habe ja jetzt das Diagramm table(hend$Mittelwert). Kann ich die einzelnen Daten/Werte des Diagramms auch irgendwo in Form von Text bzw. Ziffern lesen? Dazu: Wofür stehen diese Mittelwerte genau? Das was jogo geschrieben hatte, handelte sich ja um die Mittelwerte jeder Person zu jeder Variable (StrongMixed, NotTorn, Indecisive)

Danke auf jeden Fall für deine tolle Hilfe! :geek:

PS: Und wie ich das hier mache, ist mir auch immer noch unklar: Wie kann ich diesen Datensatz der 88 Personen zu den jeweiligen 3 Variablen in eine Variable packen? Sodass ich eine Variable habe, die für jede einzelne Person den Mittelwert aus den 3 Variablen (StrongMixed, NotTorn, Indecisive) enthält?
Zuletzt geändert von Gottchen am So Mai 17, 2020 2:24 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Erstellen neuer Variablen in R

Beitrag von jogo »

Gottchen hat geschrieben: So Mai 17, 2020 10:13 am Wärst Du so nett und könntest mir noch die Fragen dazu beantworten?
1. Du benutzt nach Einlesen des Datensatzes den Befehl "str(hend)". Wofür steht und wozu dient str?
str() zeigt die Struktur eines Objektes. So kann man kontrollieren, wie das Ergebnis nach dem Einlesen aussieht.
Hilfetext:

Code: Alles auswählen

help(str) ## oder
?str
2. Dann benutzt Du hend$Mittelwert <- rowMeans(data.csv[,c("StrongMixed", "NotTorn", "Indecisive")]). Könntest Du mir zum Verständnis die einzelnen Komponenten dieses Befehls erklären? Will es ja auch selber können. :) Zum Beispiel wann setzt man das $-Symbol ein?
Mit $ kommt man an ein Element einer Liste ran (eigentlich ist ein Dataframe eine Liste von Vektoren, die Vektoren (Spalten des Dataframes) sind alle gleich lang) Hilfetext (auch mit anderen Zugriffsoperationen):

Code: Alles auswählen

help('$')
Wofür steht rowMeans und wofür das c?
um Elemente zusammenzufügen, Hilfetext: Beispiele:

Code: Alles auswählen

example(c)
... und wegen des Mittelwertes von Age

Code: Alles auswählen

hend <- read.csv2("http://forum.r-statistik.de/download/file.php?id=978")
str(hend)
hend$Mittelwert <- rowMeans(hend[,c("StrongMixed", "NotTorn", "Indecisive")])
plot(table(hend$Mittelwert))

mean(hend$Age)
soweit erstmal.

Kennst Du dies schon?
https://cran.r-project.org/doc/manuals/ ... -intro.pdf

Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Erstellen neuer Variablen in R

Beitrag von bigben »

Hallo Gottchen,

Jörg hat meinen Code ja eigentlich sehr gut erklärt, ich kann mir aber vorstellen, dass Dir das wenig hilft, wenn Du ganz ohne R-Vorkenntnisse zu dieser Erklärung kommst. Zu Beschreiben, welche Datentypen es in R gibt (von denen man mit str prüft, ob sie beim Lesen mit read.csv2 richtig erkannt wurden), was ein Vektor und was ein Data.Frame ist und wie man auf die Spalten zugreift und zuletzt, wie man sich das alles an Text anschaut, das sprengt dann doch den Rahmen eines Forumsposts. Arbeite das ein oder andere gute Tutorial durch (das von Jörg verlinkte ist längst nicht das einzige gute im Netz) und wenn Du dann im Detail Fragen hast, darfst Du die hier gern stellen.
Gottchen hat geschrieben: So Mai 17, 2020 10:13 amWofür steht rowMeans und wofür das c?
rowMeans berechnet von jeder Zeile (row) in einem Dataframe den Mittelwert (Mean). Um also aus jeder Zeile den Mittelwert aus nur drei Spalten zu berechnen, habe ich mittels eckiger Klammern und c einen neuen Datensatz mit nur drei Spalten gebildet und darauf rowMeans angewendet.

3. Ich habe ja jetzt das Diagramm table(hend$Mittelwert). Kann ich die einzelnen Daten/Werte des Diagramms auch irgendwo in Form von Text bzw. Ziffern lesen?
Die Mittelwerte der drei Spalten pro Reihe kannst Du Dir mit

Code: Alles auswählen

print(hend$Mittelwert)
anzeigen lassen, die Häufigkeitstabelle mit

Code: Alles auswählen

print(table(hend$Mittelwert))
Wie kann ich diesen Datensatz der 88 Personen zu den jeweiligen 3 Variablen in eine Variable packen? Sodass ich eine Variable habe, die für jede einzelne Person den Mittelwert aus den 3 Variablen (StrongMixed, NotTorn, Indecisive) enthält?
Diese Information steckt jetzt schon in einer neuen Spalte im data.frame "hend" als "hend$Mittelwert". Wenn Du gerne eine von dem Mittelwert getrennte Variable, nennen wir sie Klaus, haben willst, kannst Du die durch Zuweisung erzeugen:

Code: Alles auswählen

Klaus <- hend$Mittelwert
Meistens ist es aber sinnvoller, die Daten im dataframe stehen zu lassen.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Gottchen
Beiträge: 20
Registriert: Sa Mai 16, 2020 7:22 pm

Re: Erstellen neuer Variablen in R

Beitrag von Gottchen »

Hey bigben, erstmal danke für deinen Aufwand! Bei deinem Code bekomme ich ja pro Person einen Wert. Bei dem Code von jogo bekomme ich ja drei Mittelwerte pro Person (halt einen für StrongMixed, einen für NotTorn und einen für Indecisive). Was genau ist denn dann dein Wert pro Person? Der Mittelwert pro Person für alle drei (StrongMixed, NotTorn, Indecisive) zusammen?

Code: Alles auswählen

 [1] -1.0000000  3.0000000 -0.6666667 -1.0000000  1.6666667  1.6666667  1.6666667 -0.6666667  1.6666667 -0.3333333
[11]  1.3333333 -0.6666667 -1.0000000 -0.6666667  0.0000000 -1.3333333  2.3333333 -2.0000000  2.0000000  1.3333333
[21]  1.3333333 -0.3333333  1.6666667  0.6666667 -0.3333333  0.0000000 -1.3333333 -1.3333333 -0.3333333  1.0000000
[31] -1.0000000  1.3333333  1.6666667         NA  2.0000000 -0.6666667 -3.0000000 -0.3333333 -0.6666667 -1.0000000
[41] -1.3333333 -1.6666667 -2.0000000 -1.6666667 -1.0000000         NA -1.0000000 -3.0000000 -1.3333333  0.3333333
[51]  1.6666667  1.6666667  1.6666667  0.0000000 -3.0000000  0.3333333  1.3333333  1.3333333 -0.6666667  0.0000000
[61]  1.0000000  1.6666667  0.3333333 -1.3333333 -0.6666667 -0.6666667  0.0000000  1.3333333 -1.0000000  1.3333333
[71] -2.3333333 -0.6666667 -0.6666667  0.6666667 -2.3333333  1.6666667  0.3333333  0.0000000  0.6666667  0.3333333
[81] -2.3333333 -1.0000000 -0.6666667 -1.0000000 -2.3333333 -2.0000000 -1.3333333  3.0000000
> 
Und danke, jetzt weiß ich zumindest wie ich eine Variable z.B. "NeueVariable" einer anderen zufüge. Ist ja keine Herausforderung. :D Am Beispiel von jogo:

Code: Alles auswählen

StrongMixed <- "3 3 1 -2 2 1 2 -1 2 -3 2 -1 -1 0 0 0 2 -2 2 0 1 -2 1 1 3 0 0 2 -1 1 -1 0 1 1 3 -1 -3 -3 -1 3 0 -1 -2 -1 -1 1 -1 -3 -1 3 1 2 2 1 -3 3 0 2 0 2 2 3 1 0 1 0 -1 2 2 1 -2 -1 -1 1 -2 2 3 0 1 0 -2 3 1 2 -2 -2 2 3"
NotTorn <- "-3 3 -2 2 2 3 2 -2 2 3 1 -1 -1 -1 0 -2 2 -2 2 2 2 1 3 -1 -1 -2 -2 -3 0 1 -1 2 3 1 1 -2 -3 3 -1 -3 -2 -2 -2 -2 -1 1 -1 -3 -1 0 3 2 2 -1 -3 0 2 1 -1 -1 -2 1 1 -2 -2 -1 1 1 -2 2 -3 -1 -1 2 -3 2 0 -1 2 0 -3 -3 -2 -2 -3 -2 -3 3"
Indecisive <- "-3 3 -1 -3 1 1 1 1 1 -1 1 0 -1 -1 0 -2 3 -2 2 2 1 0 1 2 -3 2 -2 -3 0 1 -1 2 1 NA 2 1 -3 -1 0 -3 -2 -2 -2 -2 -1 NA -1 -3 -2 -2 1 1 1 0 -3 -2 2 1 -1 -1 3 1 -1 -2 -1 -1 0 1 -3 1 -2 0 0 -1 -2 1 -2 1 -1 1 -2 -3 -1 -3 -2 -2 -3 3"
mscstart <- data.frame(
StrongMixed=as.numeric(strsplit(StrongMixed, " ")[[1]]),
NotTorn=as.numeric(strsplit(NotTorn, " ")[[1]]),
Indecisive=as.numeric(strsplit(Indecisive, " ")[[1]]))
mscstart$new <- rowMeans(mscstart, na.rm=TRUE)
mscstart
NeueVariable <- mscstart
Also in diesem Falle könnte ich natürlich von Beginn an mscstart mit NeueVariable ersetzen.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Erstellen neuer Variablen in R

Beitrag von bigben »

Gottchen hat geschrieben: So Mai 17, 2020 9:07 pmBei deinem Code bekomme ich ja pro Person einen Wert. Bei dem Code von jogo bekomme ich ja drei Mittelwerte pro Person (halt einen für StrongMixed, einen für NotTorn und einen für Indecisive).
Definiere "Person". Ich gehe davon aus, jede Zeile ist eine Person. Pro Zeile gibt es einen Wert für StrongMixed. Wie kann man aus einem Wert einen Mittelwert bilden? Statt also zu hinterfragen, was jogos und meinen Code unterscheidet solltest Du definieren, was Du haben willst.
Was genau ist denn dann dein Wert pro Person?
Der Mittelwert pro Person für alle drei (StrongMixed, NotTorn, Indecisive) zusammen?
Ja, das erschien mir eine angemessene Interpretation von
Wie kann ich eine neue einzelne Variable erstellen, die für jede einzelne Person einer Umfrage/Studie den Mittelwert aus 3 bestimmten Variablen (StrongMixed, NotTorn, Indecisive) enthält?
-


.

Code: Alles auswählen

NeueVariable <- mscstart
Also in diesem Falle könnte ich natürlich von Beginn an mscstart mit NeueVariable ersetzen.
Ja. Aber Vorsicht: Der Begriff Variable hat hier zwei Bedeutungen. Mit Blick auf die Syntax einer Computersprache sind mscstart und NeueVariable zwei Variablen mit gleichem Inhalt. In der Statistik würde ich nicht sagen, dass eins von beidem eine Variable wäre. Da würde ich sagen, dass beides Tabellen sind, die je 34 Variablen enthalten.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Gottchen
Beiträge: 20
Registriert: Sa Mai 16, 2020 7:22 pm

Re: Erstellen neuer Variablen in R

Beitrag von Gottchen »

Hey bigben, tut mir wahnsinnig leid für diese ganzen Verwirrungen meinerseits. Erst jetzt, wo ich das alles nochmal durchgegangen bin, erkenne ich auch die Funktionsweise eurer beiden Codes und dass natürlich beide auf dieselben Ergebnisse kommen. Ich war irgendwie total verwirrt. Und selbstverständlich ist es sinnlos aus einem Wert einen Mittelwert zu erschließen, sondern wird pro Person (Zeile) ein Mittelwert aus allen 3 Werten berechnet. Mit meiner Laienhaftigkeit habe ich komplett darüber hinweg gesehen... Ich bedanke mich bei euch allen, dass ich es bis hierhin geschafft habe. Jetzt ist endlich alles einleuchtend.

Wie kann man denn in R Unterschiede zwischen zwei Variablen (wäre das Wort jetzt hier richtig angebracht?) z.B. Mann/Frau untersuchen? Zum Beispiel, ob sich in meinem Datensatz Männer und Frauen hinsichtlich Ihres Alters oder der zentralen Tendenz unterscheiden? Bei der zentralen Tendenz müsste ich vermutlich erstmal jeweils für die Männergruppe und Frauengruppe einzeln die zentrale Tendenz berechnen.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Erstellen neuer Variablen in R

Beitrag von bigben »

Hi!

Nochmal: Ich glaube, Deine Herangehensweise an R ("wie löst man jenes") wird scheitern. Du musst Dir ein Grundlagenverständnis von R schaffen, sonst werden Dich hundert Beispiellösungen nicht erhellen sondern verwirren. Ja, ich weiß, dass das bei Word und Excel und vielen anderen Programmen anders ist.
Wie kann man denn in R Unterschiede zwischen zwei Variablen (wäre das Wort jetzt hier richtig angebracht?) z.B. Mann/Frau untersuchen?
Es gibt keine Variable Mann und keine Variable Frau in Deinem Datensatz.Es gibt aber eine Variable, die das Geschlecht codiert. Klingt pedantisch, diese sprachliche Genauigkeit ist aber wichtig, weil man in R den Unterschied zwischen zwei Variablen anders untersucht als den Unterschied von Gruppen, die in einer Variablen definiert werden.
Der t-Test auf Geschlechterunterschiede wird hier sehr gut vorgemacht: https://youtu.be/RlhnNbPZC0A
Alternativ ist das Kapitel 8.3 im von Jörg verlinkten PDF.
Bei der zentralen Tendenz müsste ich vermutlich erstmal jeweils für die Männergruppe und Frauengruppe einzeln die zentrale Tendenz berechnen.
Wikipedia listet 16 Maße der zentralen Tendenz auf. Den Mittelwert, bei dem Dir der t-Test hilft. Der Mediantest wird in R nicht automatisch mitgeliefert, aber auch so ausgefallene Tests kann man in packages nachladen. Vorher musst Du entscheiden, wie Du mit den Datensätzen Nr. 9, 53 und 76 umgehen willst.


Viel Erfolg,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Erstellen neuer Variablen in R

Beitrag von jogo »

Hallo Gottchen,

hier kommt Dein t-Test

Code: Alles auswählen

hend <- read.csv2("http://forum.r-statistik.de/download/file.php?id=978")
# str(hend)
# hend$Mittelwert <- rowMeans(hend[,c("StrongMixed", "NotTorn", "Indecisive")])
# plot(table(hend$Mittelwert))
mean(hend$Age)
t.test(Age ~ Gender, data=hend)
Gruß, Jörg
Antworten