2017-02-15 4 views
0

Ich habe eine Datenbank, in der ich die Habituationsraten von Krabben über einen bestimmten Zeitraum hinweg vergleiche. Ich möchte eine lineare Regression für jeden einzelnen erstellen und dann sammeln alle Ergebnisse (abfangen, Neigung und R^2 Werte) in einen Datenrahmen, die aussehen würde:Erstellen Sie einen Datenrahmen mit allen Ergebnissen aus einer einfachen linearen Regression auf mehrere Datenreihen

1. Säule: Crab ID

2. Säule: Intercept

3. Säule: Slope

4. Säule: R^2

Meine Datenbank sieht ähnlich aus wie das, aber mit viel mehr Datenpunkte (132 Flips pro Individuum, mehr als 50 Personen)

ID Enclosure Flip Num Time taken 
2 Simple  1   0.5 
2 Simple  2   0.8 
2 Simple  3   0.41 
2 Simple  4   0.44 
4 Bare   1   0.37 
4 Bare   2   0.41 
4 Bare   3   1.06 
4 Bare   4   0.59 
5 Simple  1   1.88 
5 Simple  2   1.88 
5 Simple  3   2.04 
5 Simple  4   2.66 
6 Complex  1   1.87 
6 Complex  2   1.96 
6 Complex  3   1.56 
6 Complex  4   2.34 
9 Complex  1   0.44 
9 Complex  2   2.35 
9 Complex  3   2.22 
9 Complex  4   3.22 

fand ich diesen Code auf eine andere Frage, aber dies nur den Achsabschnitt und die Steigung brachte:

library(plyr) 
ddply(test, "individual", function(x) { 
    model <- lm(condition ~ day, data = x) 
    coef(model) 
}) 
+0

Ihr Dataset Beispiel und der Code nicht mit unterschiedlichen Spaltennamen in sync – akrun

+1

Werfen Sie einen Blick auf das [Besen-Paket] (ftp://cran.r-project.org/pub/R/web/packages/broom/vignettes/broom.html) – beetroot

Antwort

0

Verwendung split und sapply wie folgt. Wie in Kommentaren erwähnt, haben der Datensatz und Ihr Code unterschiedliche Spalten. Für dieses Beispiel wähle ich zwei der Spalten, um das Modell zu generieren.

erzeugen Daten

str <- 'ID Enclosure FlipNum Timetaken 
2 Simple 1 0.5 
2 Simple 2 0.8 
2 Simple 3 0.41 
2 Simple 4 0.44 
4 Bare 1 0.37 
4 Bare 2 0.41 
4 Bare 3 1.06 
4 Bare 4 0.59 
5 Simple 1 1.88 
5 Simple 2 1.88 
5 Simple 3 2.04 
5 Simple 4 2.66 
6 Complex 1 1.87 
6 Complex 2 1.96 
6 Complex 3 1.56 
6 Complex 4 2.34 
9 Complex 1 .44 
9 Complex 2 2.35 
9 Complex 3 2.22 
9 Complex 4 3.22' 



file <- textConnection(str) 
df <- read.table(file, header = T) 

df 

alle

sapply(split(df, df$ID),function(x) { 
    model <- lm(Timetaken ~ FlipNum, data = x) 
    c(ID = x$ID[1],coef(model),R2 = summary(model)[['r.squared']]) 
}) 

Ergebnis Koeffizienten erhalten:

     2   4   5   6   9 
ID   2.0000000 4.0000000 5.0000000 6.0000000 9.0000000 
(Intercept) 0.6800000 0.2800000 1.4900000 1.6800000 0.0050000 
FlipNum  -0.0570000 0.1310000 0.2500000 0.1010000 0.8210000 
R2   0.1690867 0.2855645 0.7564754 0.1648114 0.8260964 
Verwandte Themen