Mittel von Differenzen

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

Moderatoren: EDi, jogo

zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Mittel von Differenzen

Beitrag von zinbu »

Hallo zusammen,

für meine Hausarbeit habe ich einen Datensatz der etwas vereinfacht so aussieht:

Code: Alles auswählen

> str(df)
'data.frame':	13 obs. of  2 variables:
 $ ID   : num  1 1 2 2 2 2 3 3 3 4 ...
 $ score: num  13.2 12.4 14.7 14 13.2 12.9 13.6 13 12.3 14 ...
Also verschiedene Probanden die über eine gewisse Zeit unterschiedlich oft vermessen wurden und einen Punktewert in einem Score erhalten haben.

Ich möchte nun in einer 3. Spalte einen Wert für die mittlere Veränderung der Variable "score" für jede "ID", also 1 Wert für jede "ID"

Ich stehe echt auf dem Schlauch wie ich das am besten angehe :?

Vielen Dank schonmal!
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mittel von Differenzen

Beitrag von bigben »

Hallo!
zinbu hat geschrieben: Di Aug 11, 2020 11:34 amIch möchte nun in einer 3. Spalte einen Wert für die mittlere Veränderung der Variable "score" für jede "ID"
Was verstehst Du genau unter der mittleren Veränderung, wenn die Leute mehr als zweimal gemessen wurden?

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: Mittel von Differenzen

Beitrag von EDi »

Vielleicht ein Streuungsmaß?
Oder immer nur zur ersten Messung vergleichen und dann Mitteln?
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.
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Mittel von Differenzen

Beitrag von zinbu »

Ich will im Prinzip die Abnahme der Werte des Scores der einzelnen IDs von Wert zu Wert anschauen und dann einen Wert ermitteln, der mir die mittlere Abnahme über die Zeit anzeigt.

Am Ende will ich dadurch herausfinden, ob die Scores von IDs, die eine Behandlung bekommen haben, schneller kleiner werden als andere.
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mittel von Differenzen

Beitrag von bigben »

Mittlere Abnahme über die Zeit bei mehr als zwei Werten wäre dann beispielsweise die Steigung der Regressionsgerade durch die Werte jeder ID? Und die Zeiteinheit auf der x-Achse ist der Abstand zwischen zwei Messungen? Wenn Du eine Gruppe mit Behandlung einer Gruppe ohne Behandlung gegenüberstellen willst wäre es vielleicht sinnvoll, in den Datensatz eine Variable aufzunehmen die anzeigt, wer welche Behandlung erhalten hat? Ich kann mir schon vorstellen, dass Du diese Unterscheidung in einem zweiten Schritt machen wolltest, bin mir aber nicht sicher, ob man diesen Schritt nicht gleich hier mit reinnehmen sollte (man könnte sich da z. B. auch ein mixed effects model vorstellen mit einem random effect auf ID..?).
Reden wir in Wirklichkeit auch von 13 Beobachtungen, also weniger als 6 Individuen verteilt auf zwei Behandlungsgruppen oder hast Du mehr Beobachtungen?

LG,
Bernhard
---
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: Mittel von Differenzen

Beitrag von bigben »

Also, hier mal eine Beispiellösung. Ich habe eine Variable "time" dazu erfunden und manuell ergänzt. Sie zeigt an, wie oft eine ID schon gemessen wurde. Die Variable müsste man automatisch erzeugen, aber erstmal will ich hören, ob das so zum Problem passt:

Code: Alles auswählen

bsp <- data.frame(ID = as.factor(c(1, 1, 2, 2, 2, 2, 3, 3, 3)),
                 time = c(0, 1, 0, 1, 2, 3, 0, 1, 2),
                 score =c (13.2, 12.4, 14.7, 14, 13.2, 12.9, 13.6, 13, 12.3))
fit <- lm(score ~ ID:time + ID - 1, data = bsp)
summary(fit)
Das erzeugt für jede ID eine eigene Regressionsgerade mit einer eigenen Steigung und eine eigenen Intercept:

Code: Alles auswählen

> summary(fit)

Call:
lm(formula = score ~ ID:time + ID - 1, data = bsp)

Residuals:
       1        2        3        4        5        6        7        8        9 
 0.00000  0.00000  0.07000 -0.01000 -0.19000  0.13000 -0.01667  0.03333 -0.01667 

Coefficients:
         Estimate Std. Error t value Pr(>|t|)    
ID1      13.20000    0.14103  93.598 2.69e-06 ***
ID2      14.63000    0.11799 123.991 1.16e-06 ***
ID3      13.61667    0.12874 105.768 1.86e-06 ***
ID1:time -0.80000    0.19944  -4.011  0.02780 *  
ID2:time -0.62000    0.06307  -9.830  0.00224 ** 
ID3:time -0.65000    0.09972  -6.518  0.00734 ** 
Demnach wäre die durchschnittliche Zunahme von ID1 -0,8/Zeit, die von ID2 -0,62/Zeit und die von ID3 wäre -0,65/Zeit. Geht das in die richtige Richtung?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Mittel von Differenzen

Beitrag von zinbu »

Hallo Bernhard,
Genau so hatte ich mir das idealer Weise vorgestellt!

Allerdings hat der Datensatz ca. 50.000 Beobachtungen und ich kann auf meinem kleinen Notebook einen "Vektor der Größe 7.2 GB nicht allozieren."

Könnte ich das näherungsweise auch einfacher angehen, zb. mit einem Differenzenquotient der mir die Steigung der Geraden anzeigt, wenn man davon ausgeht, dass alles einigermaßen linear ist?
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mittel von Differenzen

Beitrag von bigben »

Geh RAM kaufen! Neee, Quatsch. Ist natürlich woanders schwer nachzustellen, aber probier das hier mal. Das macht viele kleine Regressionen statt einer riesigen:

Code: Alles auswählen

bsp <- data.frame(ID = as.factor(c(1, 1, 2, 2, 2, 2, 3, 3, 3)),
                  score =c (13.2, 12.4, 14.7, 14, 13.2, 12.9, 13.6, 13, 12.3))

sapply(split(bsp$score, bsp$ID), function(werte) coef(lm(werte ~ I(1:length(werte))))[2])
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Mittel von Differenzen

Beitrag von Athomas »

und ich kann auf meinem kleinen Notebook einen "Vektor der Größe 7.2 GB nicht allozieren.
Dazu zwei Bemerkungen:
  • Das würde 144 kB pro Datensatz bedeuten - kann das sein? Wenn ja - muß das sein?
  • Wenn sowas passiert, kann es eine Folge davon sein, dass der RAM (durch Löschen vormals benutzter Bereiche) wie ein Schweizer Käse durchlöchert ist. R möchte sich einen fortlaufenden Bereich reservieren, und das kann in dieser Situation unmöglich sein - obwohl der freie Speicher in Summe locker ausreichen würde. Oft hilft es, die Funktion gc() (garbage collection) auszuführen!
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Mittel von Differenzen

Beitrag von zinbu »

Die option mit sapply funktioniert. Cool :D

Habt ihr noch einen Tipp wie ich die Werte dann wieder in ein geeignetes Format bekomme, sodass ich sie wieder in einer Tabelle den IDs zuordnen kann?

Ich habe as.data.frame versucht, das ergibt aber nur die Werte ohne zuordenbare Namen..
Antworten