Seite 1 von 1
Werte aus Modellen extrahieren für tibble
Verfasst: Mi Apr 28, 2021 6:41 pm
von Werekorden
Hi,
ich sitze mal wieder an meinen Problemen, die ich zwar gelöst habe aber ich glaube sehr ineffizient.
Folgendes Szenario:
Ich habe ein lineares Model und lasse mir das Ergebnis ausgeben.
Wir sollen die CI des Intercepters und Y in einem tibble mit Namensvariable angeben um es dann in rMarkdown zu nehmen und dort mittels kable eine Tabelle zu erstellen, die hübsch ist.
Mein Code sieht so aus:
Code: Alles auswählen
x <- c(0, 90, 180, 360)
y <- c(25.5, 25.6, 25.8, 26.0)
sample1 <- data.frame(x, y)
fit_H1 <- lm((y ~ x), data=sample1)
summary(fit_H1)
model1_ci <- confint(fit_H1, level =0.90)
model1_ci_tibble <- as_tibble(model1_ci)
Name <- c("Intercepter", "Tag")
beschreibung <- cbind(Name)
beschreibung <- as_tibble(beschreibung )
model1_ci_tibble_2 <- add_column(beschreibung, model1_ci_tibble)
model1_ci_tibble_2
DAS muss doch auch einfacher gehen oder?
VG
Andreas
Re: Werte aus Modellen extrahieren für tibble
Verfasst: Mi Apr 28, 2021 8:07 pm
von bigben
Darfst Du packages benutzen? Dann schau Dir mal die Funktion tidy im Paket broom an:
Code: Alles auswählen
> library(broom)
> sample1 <- data.frame(x = c(0, 90, 180, 360),
+ y = c(25.5, 25.6, 25.8, 26.0))
>
> fit_H1 <- lm((y ~ x), data=sample1)
> tidy(fit_H1)
# A tibble: 2 x 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 25.5 0.0293 871. 0.00000132
2 x 0.00143 0.000142 10.1 0.00973
> library(knitr)
> kable(tidy(fit_H1))
|term | estimate| std.error| statistic| p.value|
|:-----------|----------:|---------:|---------:|---------:|
|(Intercept) | 25.5000000| 0.029277| 870.99082| 0.0000013|
|x | 0.0014286| 0.000142| 10.06231| 0.0097326|
Da müsstest Du noch aus dem estimate und dem Standardfehler ein Konfidenzintervall basteln.
Oder vielleicht so?
Code: Alles auswählen
library(tidyverse)
sample1 <- data.frame(x = c(0, 90, 180, 360),
y = c(25.5, 25.6, 25.8, 26.0))
fit_H1 <- lm((y ~ x), data=sample1)
result <- mutate(as_tibble(confint(fit_H1)), names = c("Intercepter", "Tag"))
result
LG,
Bernhard
Re: Werte aus Modellen extrahieren für tibble
Verfasst: Mi Apr 28, 2021 11:18 pm
von EDi
tidy.lm hat auch ein conf.int= argument. Damit bekommt man auch CI...
Bei broom.mixed hab ich übrigens auch mitgewirkt

Kann ich jedem nur anraten, die extraktion auch mal vorher von Hand zu machen...
Re: Werte aus Modellen extrahieren für tibble
Verfasst: Do Apr 29, 2021 7:04 pm
von Werekorden
Hallo Bernhard hallo EDi,
ich habe jetzt mal Bernhards zweite Version genutzt, danke dafür

. Ich darf prinzipiell fast alles nutzen, solange ich ein pdf mittels R markdown generiere. Mein Chef will, dass später jeder Mitarbeiter einfach nur auf den Knopf drückt und sofort alles hat.
Ich habe jetzt noch Bernhards zweite Version erweitert indem ich die names-Variable nach vorne geschoben mit
Langsam wird es mit R aber Ich muss mich noch mit sehr kleinen Schritten fortbewegen, da ich immer nur ab und zu dazu komme mit R zu arbeiten und deshalb möglichst einfache Varianten suche.
Ich muss die gesamte Statistik selbst machen ohne selbst Statistiker zu sein sondern Biologe, der dann aber auch noch das Labor für den Uni-Arzt leiten soll. Der sieht natürlich, toll was R alles kann, hopp Andreas mach mal. Klar sofort.
Wenn ich Zeit habe schau ich mir mal eure anderen Anmerkungen an.
Re: Werte aus Modellen extrahieren für tibble
Verfasst: Do Apr 29, 2021 9:32 pm
von EDi
ohne selbst Statistiker zu sein sondern Biologe, der dann aber auch noch das Labor für den Uni-Arzt leiten soll.
Dann bist du bei uns in Bester Gesellschaft :
Bernhard ist Arzt und ich bin in der biologischen Forschung tätig

Re: Werte aus Modellen extrahieren für tibble
Verfasst: Fr Apr 30, 2021 7:28 am
von bigben
GO, LIFE SCIENCES, GO!

Re: Werte aus Modellen extrahieren für tibble
Verfasst: Fr Apr 30, 2021 8:13 am
von bigben
Werekorden hat geschrieben: Do Apr 29, 2021 7:04 pmich habe jetzt mal Bernhards zweite Version genutzt, danke dafür
Sehr gerne. Mir gefällt EDis Beitrag am besten:
Code: Alles auswählen
sample1 %>%
lm((y ~ x), data=.) %>%
tidy(conf.int = TRUE) %>%
kable()
Deine ursprüngliche Ausgangsversion war gar nicht schlecht. Das vermeintliche Problem mit
confint war, dass Du bei der Umwandlung in ein tibble die Zeilennamen verloren hast, die Du dann umständlich wiederhergestellt hast. Wenn aber
kable das Ziel ist, dann ist die Umwandlung in ein tibble völlig überflüssig. Du hättest einfach beim Standard-Dataframe bleiben können und hättest Dir den Umweg erspart. Wenn Du einfach das
as_tibble weggelassen hättest, wäre das hier daraus geworden:
oder in pipe-Schreibweise:
Code: Alles auswählen
sample1 %>%
lm(y ~ x, data=.) %>%
confint() %>%
kable()
Und das ist doch dann auch ganz schön und geradlinig. Du hättest Deinem Arzt ja gar nicht verraten müssen, dass da zwischendurch kein tibble entsteht.
LG,
Bernhard