Mittelwert berechnen für y-Werte wenn x-Wert gleich ist.

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

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

Mittelwert berechnen für y-Werte wenn x-Wert gleich ist.

Beitrag von Werekorden »

Eine neue Herausforderung:

Ich möchte für jedes x, das den gleichen Wert hat also z.b. 1250 den Mittelwert aus allen dazugehörigen y-Werte berechnen. Danach will ich die Differenz zwischen den wahren Mittelwerten und den mittels lm-Modell errechneten theoretischen Werten berechnen.

Bevor ich jetzt weitersuche, erst einmal eine grundlegende Frage:

Sollte ich die Daten lieber als data.frame, tibble oder matrix nutzen. Was wäre praktischer? Am Ende sollen mit rmarkdown/LaTeX schöne Tabellen rauskommen.

So ungefähr soll das später aussehen.
Tabelle.png
Erstes Problem:
Ich denke ich muss mit irgendeiner Form einer for/if Funktion kommen, aber ich raff es nicht.

Meine Idee war folgende:

Code: Alles auswählen

for (i in y) {
  for (i in x) {
    if (df_matrix$x == dfmatrix$x) {
      mean(df_matrix$y)
    }
  }
}
Das Problem ist aber, dass die Funktion natürlich nicht weiß welches dfmatrix$x es nehmen soll zum Vergleich ob es mit einem anderen identisch ist.

Zweites Problem:
Die Differenzberechnung macht seltsame Dinge

Siehe mein Beispiel und die Ausgabe dazu.

Hier der gesamte Code:

Code: Alles auswählen

library(tidyverse)
x <- c(1250, 1250, 125, 125, 12.5, 12.5, 1.25, 1.25, 0.125, 0.125)
y <- c(29.5, 29.2, 32.85, 33.05, 36.35, 36.15, 39.4, 39.5, 42.65, 42.9)
sample1 <- data.frame(x, y)

q = log10(sample1$x)

#Tibble statt data.frame erstellt in der Hoffnung die Daten besser zu verarbeiten.
df <- tibble(x = x,
             y = y,
             Di = 39.81 + q * -3.335)
df

#Differenz zwischen x und Y berechnen
df %>%
  mutate(Di_diff = c(NA, diff(y)))


#Mittelwert der Werte bei gleichem x-Wert evtl. mit colMeans und Matrix oder...?

df_matrix <- as.matrix(df)
df_matrix #[3, 1]

for (i in y) {
  for (i in x) {
    if (df_matrix$x == dfmatrix$x) {
      mean(df_matrix$y)
    }
  }
} 

Danke für eure Hilfe.

VG
Andreas

bigben
Beiträge: 1537
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mittelwert berechnen für y-Werte wenn x-Wert gleich ist.

Beitrag von bigben »

Hallo Werekorden,
Werekorden hat geschrieben:
Do Jun 18, 2020 9:49 pm
Ich möchte für jedes x, das den gleichen Wert hat also z.b. 1250 den Mittelwert aus allen dazugehörigen y-Werte berechnen.

Code: Alles auswählen

x <- c(1250, 1250, 125, 125, 12.5, 12.5, 1.25, 1.25, 0.125, 0.125)
y <- c(29.5, 29.2, 32.85, 33.05, 36.35, 36.15, 39.4, 39.5, 42.65, 42.9)
sample1 <- data.frame(x, y)
with(sample1, aggregate(y, list(x), mean))
Soll ich die Daten lieber als data.frame, tibble oder matrix nutzen. Was wäre praktischer?


Geschmacksfrage. Ich nehme immer dataframes. Die funktionieren schon seit Jahrzehnten in R gut und ich bin zu schlicht um die vielen Vorteile von tibbles zu erkennen. Andererseits werden da ohnehin ungefragt tibbles draus gemacht, wenn Du tidyverse-Funktionen nutzt.
Danach will ich die Differenz zwischen den wahren Mittelwerten und den mittels lm-Modell errechneten theoretischen Werten berechnen.

Code: Alles auswählen

sample1$lin.mod <- -3.335 * sample1$x + 39.81

sample1$diff <- sample1$y - sample1$lin.mod

print(sample1)
Naja, wahrscheinlich habe ich da irgendwas mit dem linearen Modell falsch verstanden, denn die Werte sind nicht plausibel. Aber wahrscheinlich kannst Du das irgendwie anpassen...

Es gibt viele Varianten, dataframes als schicke Tabellen auszudrucken. Für latex beispielsweise

Code: Alles auswählen

> library(xtable)
> xtable(sample1)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Antworten