Werte aus Modellen extrahieren für tibble

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

Moderatoren: EDi, jogo

Antworten
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Werte aus Modellen extrahieren für tibble

Beitrag 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
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte aus Modellen extrahieren für tibble

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Werte aus Modellen extrahieren für tibble

Beitrag 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...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Werte aus Modellen extrahieren für tibble

Beitrag 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

Code: Alles auswählen

result %>% relocate(names)
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. :cry:

Wenn ich Zeit habe schau ich mir mal eure anderen Anmerkungen an.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Werte aus Modellen extrahieren für tibble

Beitrag 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 8-)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte aus Modellen extrahieren für tibble

Beitrag von bigben »

GO, LIFE SCIENCES, GO! :lol:
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte aus Modellen extrahieren für tibble

Beitrag 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:

Code: Alles auswählen

kable(confint(lm(y ~ x, data=sample1)))
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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten