Eine Variable in einen Faktor umwandeln

Allgemeine Fragen zur Programmierung mit R.

Eine Variable in einen Faktor umwandeln

Beitragvon Fledermaus » Di 16. Okt 2018, 14:17

Hallo,
ich werte Populationsdaten von Fledermäusen aus. Dabei arbeite ich mit R comander.
Ich habe verschiedene Variablen, z.B. das Alter der Fledermaus, die Unteramlänge, das Geschlecht etc.
Das Geschlecht habe ich mit 0 (Männlich) und 1(weiblich) kodiert. Wenn ich ein lineares Regressionsmodell anpasse, welches das Geschlecht enthält, dann wird es allerdings nicht als Faktor behandelt. Wie kann ich R sagen, dass diese Variable ein Faktor ist? Ich habe folgenden Befehl versucht:

as.factor(Dataset$sex)
(Dataset heißt mein Datensatz und "sex" ist die Spalte mit der Information zum Geschlecht.)

Habe es auch schon ohne "Dataset$" versucht, aber irgendwie gelingt es nicht. :cry: :roll:

Ich würde mich sehr freuen, wenn mir jemand helfen kann. :P
Danke LG
Fledermaus
 
Beiträge: 18
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Eine Variable in einen Faktor umwandeln

Beitragvon jogo » Mi 17. Okt 2018, 08:35

Hallo Fledermaus,

Fledermaus hat geschrieben:ich werte Populationsdaten von Fledermäusen aus. Dabei arbeite ich mit R comander.
Ich habe verschiedene Variablen, z.B. das Alter der Fledermaus, die Unteramlänge, das Geschlecht etc.
Das Geschlecht habe ich mit 0 (Männlich) und 1(weiblich) kodiert. Wenn ich ein lineares Regressionsmodell anpasse, welches das Geschlecht enthält, dann wird es allerdings nicht als Faktor behandelt. Wie kann ich R sagen, dass diese Variable ein Faktor ist? Ich habe folgenden Befehl versucht:

as.factor(Dataset$sex)

prinzipiell ist das schon richtig; also as.factor() oder factor(). Leider wird aus diesem winzigen Codefragment nicht klar, was Du mit diesem Ergebnis (also dem von as.factor(Dataset$sex)) machst.
Kannst Du bitte etwas mehr Code zeigen? (bis zum Aufruf von lm())

Gruß, Jörg
jogo
 
Beiträge: 157
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 1 mal in 1 Post

Re: Eine Variable in einen Faktor umwandeln

Beitragvon Fledermaus » Mi 17. Okt 2018, 10:22

Hallo jogo,
vielen Dank für die Antwort.
Hier sind die weiteren Codes

> Dataset <- read.table("D:/PHD/LZD/test.txt", header=TRUE, sep="", na.strings="NA", dec=".",
+ strip.white=TRUE)

> as.factor(Dataset$sex)
[1] 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1
[42] 1 0 1 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1
[83] 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 1
[124] 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1
[165] 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0 0 1 0 1
Levels: 0 1



> LinearModel.1 <- lm(Age ~ FL_ad + T_st + sex, data=Dataset)

> summary(LinearModel.1)

Call:
lm(formula = Age ~ FL_ad + T_st + sex, data = Dataset)

Residuals:
Min 1Q Median 3Q Max
-4.3847 -1.8964 -0.7026 1.1442 15.4331

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -13.33008 4.53360 -2.940 0.003678 **
FL_ad 0.35507 0.09766 3.636 0.000355 ***
T_st 0.09142 0.35211 0.260 0.795422
sex 2.00426 0.45606 4.395 0.0000182 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.991 on 194 degrees of freedom
Multiple R-squared: 0.1754, Adjusted R-squared: 0.1626
F-statistic: 13.75 on 3 and 194 DF, p-value: 0.000000036




Wenn es als Faktor behandelt werden würde, dann würde in dem Output bei "sex" auch 0 oder 1 als Referenzkategorie dabei stehen, oder? Also daran sehe ich ja, dass es nicht als Faktor behandelt wurde.

Danke
LG Bianca
Fledermaus
 
Beiträge: 18
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Eine Variable in einen Faktor umwandeln

Beitragvon jogo » Mi 17. Okt 2018, 10:46

Hallo Bianca,

Fledermaus hat geschrieben:Hallo jogo,
vielen Dank für die Antwort.
Hier sind die weiteren Codes

Code: Alles auswählen
> Dataset <- read.table("D:/PHD/LZD/test.txt", header=TRUE, sep="", na.strings="NA", dec=".",
+   strip.white=TRUE)

> as.factor(Dataset$sex)
  [1] 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1
[42] 1 0 1 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1
[83] 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 1
[124] 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1
[165] 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0 0 1 0 1
Levels: 0 1
Das Ergebnis von as.factor(Dataset$sex) ist ein Faktor. Das siehst Du an Levels: 0 1.
Aber was machst Du mit diesem Ergebnis? Ein Funktionsaufruf in R kann niemals die Objekte verändern, die als Parameter übergeben werden :!:
Man nennt es call by value - und es macht das Programmieren sicher (von Funktionen sind keine Seiteneffekte zu erwarten).
Wenn Du die Spalte in Deinem Dataframe konvertieren möchtest, musst Du das so machen:
Code: Alles auswählen
Dataset$sex <- as.factor(Dataset$sex)

Code: Alles auswählen
> LinearModel.1 <- lm(Age ~ FL_ad + T_st + sex, data=Dataset)
> summary(LinearModel.1)
...
Coefficients:
             Estimate Std. Error t value  Pr(>|t|)   
(Intercept) -13.33008    4.53360  -2.940  0.003678 **
FL_ad         0.35507    0.09766   3.636  0.000355 ***
T_st          0.09142    0.35211   0.260  0.795422   
sex           2.00426    0.45606   4.395 0.0000182 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Wenn es als Faktor behandelt werden würde, dann würde in dem Output bei "sex" auch 0 oder 1 dabei stehen, oder? Also daran sehe ich ja, dass es nicht als Faktor behandelt wurde.
Dann sieht auch die Ausgabe zumindest anders aus.
Alternativ hättest Du das Konvertieren auch in der Modellformel angeben können. Probier mal:
Code: Alles auswählen
Dataset <- read.table("D:/PHD/LZD/test.txt", header=TRUE, sep="", na.strings="NA", dec=".", strip.white=TRUE)
lm(Age ~ FL_ad + T_st + as.factor(sex), data=Dataset) # und/oder
lm(Age ~ FL_ad + T_st + factor(sex), data=Dataset)  #### beziehungsweise:
summary(lm(Age ~ FL_ad + T_st + as.factor(sex), data=Dataset)) # und/oder
summary(lm(Age ~ FL_ad + T_st + factor(sex), data=Dataset))

Gruß, Jörg
Zuletzt geändert von jogo am Mi 17. Okt 2018, 21:29, insgesamt 1-mal geändert.
jogo
 
Beiträge: 157
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 1 mal in 1 Post

Re: Eine Variable in einen Faktor umwandeln

Beitragvon Fledermaus » Mi 17. Okt 2018, 11:12

Klasse, es hat geklappt :D :P :lol: :idea:
Vielen Dank!
LG
Fledermaus
 
Beiträge: 18
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Programmierung allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron