2016-03-23 7 views
1

Wie würde ich Extract Restdaten für ein bestimmtes Baseball-Team im folgenden linearen Modell extrahieren? Zum Beispiel, wie würde ich die Residuen für "CLE" extrahieren?So extrahieren Sie spezifische Restdaten aus einem linearen Modell in R

library(Lahman) 
library(dplyr) 
library(broom) 

# create baseball team data 
data(Teams) 
teams <- Teams 
teams <- teams %>% mutate(win_percentage = (W/(W + L)) * 100) 

# summarize baseball team salary by year 
salaries <- Salaries 
salaries <- salaries %>% 
    group_by(teamID, yearID, lgID) %>% 
    summarise(payroll_M = sum(as.numeric(salary))/10^6) %>% 
    ungroup() 

# add winning percentage to the salary table 
salaries <- teams %>% 
    select(yearID, teamID, win_percentage) %>% 
    right_join(salaries, by = c("yearID", "teamID")) 

# compute linear model of winning vs team salary 
model <- salaries %>% 
    group_by(yearID) %>% 
    do(fit = augment(lm(win_percentage ~ payroll_M, data = .))) 

# extract residuals for Cleveland ?????? 

Antwort

3

Sie sind in der Nähe, aber müssen zwei Änderungen an der augment Linie.

  1. Sie den resultierenden (augmented) Datenrahmen auf eine Säule fit genannt zu speichern. Versuchen Sie es stattdessen direkt an do (entfernen Sie die fit =).

  2. Die Augment-Funktion muss die Spalte teamID als Teil der resultierenden Daten beibehalten, obwohl sie nicht im Modell enthalten ist. Beachten Sie, dass augment ein zweites Argument data für genau diesen Zweck verwendet (siehe help(augment.lm) für mehr).

Somit ist die neue Linie würde wie folgt aussehen:

do(augment(lm(win_percentage ~ payroll_M, data = .), data = .)) 

Der resultierende Datenrahmen eine Zeile pro ursprüngliche Beobachtung haben wird, und wird die teamID zusammen mit den Residuen und angepaßten Werte umfassen (was ermöglicht Sie für filtern).

+0

David, vielen Dank! Ich habe die Hilfe für augment.lm gelesen, aber es war mir nicht klar, dass der zweite Parameter das war, was ich brauchte. Ich lerne immer noch, wie man das Hilfesystem liest und versteht. – user3457456

+0

David, ich habe eine Nachfolge für dich. Die Hilfe für den Parameter "data" lautet "Originaldaten, standardmäßig wird das Modell aus dem Modell extrahiert". Werden alle Daten, die in den Abrechnungsdatenrahmen aufgenommen wurden, im lm-Befehl in das lineare Modell geschrieben und werden sie nur aus dem linearen Modell extrahiert? Verstehe ich das richtig? – user3457456

+0

@ user3457456 Standardmäßig sind die im Modell gespeicherten Daten nur die Spalten, die direkt im Modell verwendet wurden (versuchen Sie 'model.frame (fit)' auf einem linearen Fit-Objekt und Sie werden es sehen). So haben sich die Variablen win_percentage und salary ursprünglich gehalten. Der Vorteil von 'data = .' besteht darin, dass alle ursprünglichen Daten erweitert werden. –

Verwandte Themen