Verschiedenes

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Bine

Verschiedenes

Beitrag von Bine »

Hallo zusammen,

zur Zeit mache ich meine ersten Erfahrungen mit R und ich habe gleich die ersten Fragen.
Vorab zur Info: Meine Daten wurden bei Mitarbeitern aus dem Bereich F&E (38%), Marketing (33%) und Vertrieb (28%) erhoben.

1. Ersetzen "NA" mit "0" bei Frage nach Berufserfahrung

Code: Alles auswählen

levels(data$AA08_01)[levels(data$AA08_01)=="NA"] <- "0" # zwei Teilnehmer gaben bei F&E nichts anstatt 0 an
Hat jemande eine Idee was an dem Code nicht stimmt bzw. was ich vergessen habe? Leider wird in der Tabelle NA nicht durch O ersetzt.

2. Fehlende Werte mit Mittelwert ersetzen
Gerne würde ich fehlene Werte durch den Mittelwert der Spalte ersetzen. Es sollen aber nicht alle Zeilen der Spalte mit einbezogen werden, sondern
- falls es ein Teilnehmer aus F&E war (AA02=1) dann soll der Mittelwert von allen F&E Mitarbeitern aus der Spalte,
- falls es ein Teilnehmer aus Marketing war (AA02=2) dann soll der Mittelwert von allen Marketing Mitarbeitern aus der Spalte,
- falls es ein Teilnehmer aus Vertrieb war (AA02=3) dann soll der Mittelwert von allen Vertrieb Mitarbeitern aus der Spalte
verwendet werden.

Mein bisheriger Code für die Mittelwertersetzung sieht folgendermaßen aus:

Code: Alles auswählen

for (i in 1:100) {
  data[,i] <- replace(data[,i],is.na(data[,i]),mean(data[,i],na.rm=TRUE)) 
}
Wie ergänze ich den Code am besten damit er meinen Wünschen entspricht?

3. Suche Anzahl/Prozent der Teilnehmer, die bereits im F&E und Marketing bzw. F&E und Vertrieb bzw. Merketing und Vertrieb... Berufserfahrung haben.
Den Code für Erfahrung in F&E und Marketing stelle ich mir so ähnlich vor:

Code: Alles auswählen

Percentage.F.4 <- data$AA08_01>0 + data$AA08_02>0
round(table(Percentage.F.4)/sum(table(Percentage.F.4)),2)*100
Aber auch hier habe ich wohl einen Denkfehler?

4. Manipulation Check
Für den Manipulation Check möchte ich 2 Gruppen bilden, damit ich eine ANOVA rechnen kann.
Gruppe 1: IV01_01=1 und AA15_01=1 sowie IV01_01=2 und AA15_01=2,
Gruppe 2: IV01_01=2 und AA15_01=1 sowie IV01_01=1 und AA15_01=2

Wie geht das? Kann mir hier jemand helfen?

5. Das Konstrukt "Funktionale Zusammenarbeit F&E-Marketing" wurde von Mitarbeitern aus F&E (Variable: ZU01) und Marketing (Variable: ZU03) bewertet (nicht von Mitarbeitern aus Vertrieb!). Wie gehe ich mit diesem Konstrukt um? Soll ich einfach eine Variable Funktionale Zusammenarbeit F&E-Marketing=~ ZU01 + ZU03 definieren und damit die Faktorenanalyse / deskriptive Statistik rechnen? Oder geht dies nicht, da ich hier weniger Teilnehmer (nur F&E, Marketing) als bei den anderen Variablen?

Über Eure Rückmeldung freue ich mich.

Viele Grüße
Bine
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Verschiedenes

Beitrag von jogo »

Hallo Bine,

willkommen im Forum.
Bine hat geschrieben:1. Ersetzen "NA" mit "0" bei Frage nach Berufserfahrung

Code: Alles auswählen

levels(data$AA08_01)[levels(data$AA08_01)=="NA"] <- "0" # zwei Teilnehmer gaben bei F&E nichts anstatt 0 an
Hat jemande eine Idee was an dem Code nicht stimmt bzw. was ich vergessen habe? Leider wird in der Tabelle NA nicht durch O ersetzt.
man kann nicht mit == nicht auf NA testen; sondern man muss die Funktion is.na() verwenden, also:

Code: Alles auswählen

data$AA08_01[is.na(data$AA08_01)] <- 0
2. Fehlende Werte mit Mittelwert ersetzen
Gerne würde ich fehlene Werte durch den Mittelwert der Spalte ersetzen. Es sollen aber nicht alle Zeilen der Spalte mit einbezogen werden, sondern
- falls es ein Teilnehmer aus F&E war (AA02=1) dann soll der Mittelwert von allen F&E Mitarbeitern aus der Spalte,
- falls es ein Teilnehmer aus Marketing war (AA02=2) dann soll der Mittelwert von allen Marketing Mitarbeitern aus der Spalte,
- falls es ein Teilnehmer aus Vertrieb war (AA02=3) dann soll der Mittelwert von allen Vertrieb Mitarbeitern aus der Spalte
verwendet werden.

Mein bisheriger Code für die Mittelwertersetzung sieht folgendermaßen aus:

Code: Alles auswählen

for (i in 1:100) {
  data[,i] <- replace(data[,i],is.na(data[,i]),mean(data[,i],na.rm=TRUE)) 
}
Hier würde ich generell erstmal die Mittelwerte pro Gruppe berechenen und als zusätzliche Spalte in den Dataframe schreiben; das kann mit ave() erledigt werden:

Code: Alles auswählen

data$GruppenMittel <- ave(data$AA08_01, data$AA02, FUN=mean, na.rm=TRUE)
soweit erstmal auf die Schnelle. Den Rest der Fragen lese ich mir später durch.

Nachtrag:
ave() nimmt das Zusatzargument na.rm=TRUE nicht an (um es an mean() weiterzureichen). Deshalb evtl. so wie in diesem Beispiel:

Code: Alles auswählen

x <- c(-(1:6), NA, NA, 10:14)
g <- rep(1:2, c(7,6))

ave(x, g, FUN=mean, na.rm=TRUE)

my.mean <- function(x) mean(x, na.rm=TRUE)
ave(x, g, FUN=my.mean)
Gruß, Jörg
Bine

Re: Verschiedenes

Beitrag von Bine »

Hallo,

vielen Dank für die wertvolle Antwort.
An einem Punkt komme ich nicht weiter.
Ich möchte eine neue Spalte/Variable mit dem Namen ZU.FE.M.Generell_01 generieren.
Die neue Variable beschreibt die Zusammenarbeit zwischen F&E und Marketing.
Eine Aussage zur Zusammenarbeit zwischen F&E und Marketing haben F&E sowie Marketing Teilnehmer gemacht.
Vertriebsmitarbeiter haben dazu keine Angaben gemacht, daher muss hier der Mittelwert herhalten.

Die Spalte soll also folgenden Inhalt haben:
1) ZU01_01 wenn AA02=1 (Teilnehmer ist aus F&E)
2) ZU03_02 wenn AA02=2 (Teilnehmer ist aus Marketing)
Mittelwert aus 1) und 2) wenn AA02=3 (Teilnehmer ist aus Vertrieb)

Wie mache ich das?

Über eine zeitnahe Rückmeldung freue ich mich.

Viele Grüße
Sabine
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Verschiedenes

Beitrag von jogo »

Hallo Bine,

dann mache ich mal weiter mit Deinen ursprünglichen Fragen.
Bine hat geschrieben:3. Suche Anzahl/Prozent der Teilnehmer, die bereits im F&E und Marketing bzw. F&E und Vertrieb bzw. Merketing und Vertrieb... Berufserfahrung haben.
Den Code für Erfahrung in F&E und Marketing stelle ich mir so ähnlich vor:

Code: Alles auswählen

Percentage.F.4 <- data$AA08_01>0 + data$AA08_02>0
round(table(Percentage.F.4)/sum(table(Percentage.F.4)),2)*100
Aber auch hier habe ich wohl einen Denkfehler?
meinst Du so etwas:

Code: Alles auswählen

table((data$AA08_01>0) | (data$AA08_02>0))
:?: ... oder mit "&" statt "|" ?
und anschließend die absoluten Häufigkeiten in Anteile umrechenen.
4. Manipulation Check
Für den Manipulation Check möchte ich 2 Gruppen bilden, damit ich eine ANOVA rechnen kann.
Gruppe 1: IV01_01=1 und AA15_01=1 sowie IV01_01=2 und AA15_01=2,
Gruppe 2: IV01_01=2 und AA15_01=1 sowie IV01_01=1 und AA15_01=2

Wie geht das? Kann mir hier jemand helfen?

Code: Alles auswählen

data$Gruppe <- 0
data$Gruppe[with(data, ((IV01_01==1) & (AA15_01==1)) | ((IV01_01==2) & (AA15_01==2))] <- 1
data$Gruppe[with(data, ((IV01_01==2) & (AA15_01==1)) | ((IV01_01==1) & (AA15_01==2))] <- 2
5. Das Konstrukt "Funktionale Zusammenarbeit F&E-Marketing" wurde von Mitarbeitern aus F&E (Variable: ZU01) und Marketing (Variable: ZU03) bewertet (nicht von Mitarbeitern aus Vertrieb!). Wie gehe ich mit diesem Konstrukt um? Soll ich einfach eine Variable Funktionale Zusammenarbeit F&E-Marketing=~ ZU01 + ZU03 definieren und damit die Faktorenanalyse / deskriptive Statistik rechnen? Oder geht dies nicht, da ich hier weniger Teilnehmer (nur F&E, Marketing) als bei den anderen Variablen?
Wie ist denn die Fragestellung? Etwa, ob die beiden Gruppen die Zusammenarbeit verschieden beurteilen?
Da die anderen Aufgaben einfach gestrickt sind, kann es sein, dass einfach die Mittelwerte verglichen werden sollen:
Werte aus data$ZU01 für die Mitarbeitern aus F&E versus Werte aus data$ZU03 für die Mitarbeiter aus Marketing.
Den Rest kann die Funktion t.test() erledigen:

Code: Alles auswählen

t.test(1:5, 3:9)
Viele Grüße
Jörg
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Verschiedenes

Beitrag von jogo »

Hallo Sabine,
Bine hat geschrieben:Die Spalte soll also folgenden Inhalt haben:
1) ZU01_01 wenn AA02=1 (Teilnehmer ist aus F&E)
2) ZU03_02 wenn AA02=2 (Teilnehmer ist aus Marketing)
Mittelwert aus 1) und 2) wenn AA02=3 (Teilnehmer ist aus Vertrieb)

Code: Alles auswählen

data$neuZU <- NA
data$neuZU[data$AA02==1] <- data$ZU01_01
data$neuZU[data$AA02==2] <- data$ZU03_02
data$neuZU[data$AA03==3] <- 0.5*(data$ZU01_01 + data$ZU03_02)
Gruß, Jörg
Bine

Re: Verschiedenes

Beitrag von Bine »

Hallo,

ich brauche dringend Eure Unterstützung. .
Hier mein Code:

Code: Alles auswählen

data$ZU.FE.M.Aufgabe_01 <- NA
if(data$AA02==1) {data$ZU.FE.M.Aufgabe_01<- data$ZU01_01}
if(data$AA02==2){data$ZU.FE.M.Aufgabe_01<- data$ZU03_01}
if(data$Projektklasse1==1&&data$AA02==3){data$ZU.FE.M.Aufgabe_01<-0.5*((mean(subset(data$ZU01_01,data$Projektklasse1==1))) + mean((subset(data$ZU03_01,data$Projektklasse1==1))))} 
Wenn ich

Code: Alles auswählen

table (data$ZU.FE.M.Aufgabe_01)
eingebe, dann kommt immer eine Meldung "Warning message:
In if (data$AA02 == 1) { :the condition has length > 1 and only the first element will be used".

Folgender Versuch scheitert auch:

Code: Alles auswählen

data$ZU.FE.M.Aufgabe_01 <- NA
data$ZU.FE.M.Aufgabe_01[data$AA02==1]<- data$ZU01_01
data$ZU.FE.M.Aufgabe_01[data$AA02==2]<- data$ZU03_01
if(data$Projektklasse1==1&&data$AA02==3){data$ZU.FE.M.Aufgabe_01<-0.5*((mean(subset(data$ZU01_01,data$Projektklasse1==1))) + mean((subset(data$ZU03_01,data$Projektklasse1==1))))} 
Hier kommt als Output:
> table (data$ZU.FE.M.Aufgabe_01)
< table of extent 0 >

Was stimmt an meinem Code nicht?

Über eine Rückmeldung freue ich mich.

Viele Grüße
Sabine
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Verschiedenes

Beitrag von jogo »

Hallo Sabine,

Code: Alles auswählen

if (...) ...
kann von dem logischen Vektor in der Klammer nur den ersten Wert verarbeiten. Alternativ kannst Du Dir mal überlegen, was folgende Konstruktion sonst bewirken soll:

Code: Alles auswählen

if (c(TRUE, FALSE)) print("hallo") # oder auch
if (c(4,1)==1) print("hallo") 
Warum programmierst Du es nicht so, wie ich es schon geschrieben habe :?:

Gruß, Jörg
Bine

Re: Verschiedenes

Beitrag von Bine »

Hallo Jörg,

ich verwende Deinen Vorschlag nicht, weil er nicht vollständig ist. Ich habe ja auch Teile davon verwendet, aber selbst dieser Teil funktioniert nicht (< table of extent 0 >).

Hier nochmal die Idee wie sich die Variable "Zusammenarbeit zwischen F&E und Marketing" ZU.FE.M.Aufgabe_01 zusammensetzt.
- Wenn AA02==1 (F&E-Mitarbeiter), dann den Wert aus ZU01_01 nehmen.
- Wenn AA02==2 (Marketing-Mitarbeiter), dann den Wert aus ZU03_01 nehmen.
- Wenn AA02==3(Vertriebsmitarbeiter) und data$Projektklasse1==1 (Vertriebsmitarbeiter wurde Projektklasse 1 zugeordnet), dann den Mittelwert aus allen zur Verfügung stehenden ZU01_01 und data$Projektklasse1==1 (Werte von allen F&E-Mitarbeitern aus Projektklasse 1) und ZU03_01 data$Projektklasse1==1 (Werte von allen Marketing-Mitarbeitern aus Projektklasse 1) nehmen.
- Wenn AA02==3(Vertriebsmitarbeiter) und data$Projektklasse1==2 (Vertriebsmitarbeiter wurde Projektklasse 2 zugeordnet), dann den Mittelwert aus allen zur Verfügung stehenden ZU01_01 und data$Projektklasse1==2 (Werte von allen F&E-Mitarbeitern aus Projektklasse 2) und ZU03_01 data$Projektklasse1==2 (Werte von allen Marketing-Mitarbeitern aus Projektklasse 2) nehmen.

Ich bin wirklich am verzweifeln und freue mich über Hilfe.

Viele Grüße
Sabine
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Verschiedenes

Beitrag von jogo »

Hallo Sabine,
Bine hat geschrieben:ich verwende Deinen Vorschlag nicht, weil er nicht vollständig ist. Ich habe ja auch Teile davon verwendet, aber selbst dieser Teil funktioniert nicht (< table of extent 0 >).
das tut mir Leid, dass meine Vorschläge nicht gefruchtet haben, aber bisher hast Du auch keinerlei Daten bereitgestellt (siehe viewtopic.php?f=20&t=11 ).

Ohne Daten kann auch ich den Code nicht testen.

Code: Alles auswählen

data$ZU.FE.M.Aufgabe_01 <- NA  
if(data$AA02==1) {data$ZU.FE.M.Aufgabe_01<- data$ZU01_01}  
if(data$AA02==2){data$ZU.FE.M.Aufgabe_01<- data$ZU03_01}  
if(data$Projektklasse1==1&&data$AA02==3){data$ZU.FE.M.Aufgabe_01<-0.5*((mean(subset(data$ZU01_01,data$Projektklasse1==1))) + mean((subset(data$ZU03_01,data$Projektklasse1==1))))} 
IMHO sollte das so aussehen:

Code: Alles auswählen

data$ZU.FE.M.Aufgabe_01 <- NA
data$ZU.FE.M.Aufgabe_01[data$AA02==1] <- data$ZU01_01[data$AA02==1]
data$ZU.FE.M.Aufgabe_01[data$AA02==2] <- data$ZU03_01[data$AA02==2]

data$ZU.FE.M.Aufgabe_01[(data$Projektklasse1==1) & (data$AA02==3)] <- 
  0.5*(mean(data$ZU01_01[data$Projektklasse1==1]) + mean(data$ZU03_01[data$Projektklasse1==1]))
Bitte beachte auch den Unterschied zwischen & und && :!:

Gruß, Jörg
Bine

Re: Verschiedenes

Beitrag von Bine »

Hi Jörg,

Danke für Deine Hilfe. Leider kommt wieder < table of extent 0 > .
Ich habe mir mit

Code: Alles auswählen

write.table(data,"C:/Users/Bine/Documents/Data1.csv",sep=",",dec=".",quote=FALSE,row.names=FALSE,col.names=TRUE)
eine Tabelle erstellt und es steht in der neuen Variable in jeder Zeile NA.

Leider darf ich die Daten nicht öffentlich zugänglich machen.
Mein Problem ist, dass ich überhaupt nicht weiterarbeiten kann, wenn das Problem nicht gelöst ist. Eine Faktoranalyse ohne die definierten Variblen ist leider nicht möglich.

Viele Grüße
Sabine
Antworten