2016-03-23 2 views
1

Как извлечь остаточные данные для конкретной бейсбольной команды в следующей линейной модели? Например, как я могу извлечь остатки для «CLE»?Как извлечь конкретные остаточные данные из линейной модели в 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 ?????? 

ответ

3

Вы близки, но нужно два изменения в augment линии.

  1. Вы экономите результирующее (дополненный) кадр данных столбца называется fit. Вместо этого попробуйте дать его непосредственно do (удалите fit =).

  2. Функция увеличения должна содержать столбец teamID как часть полученных данных, даже если это не в модели. Обратите внимание, что augment принимает второй аргумент data для этой цели (см. help(augment.lm) для получения дополнительной информации).

Таким образом, новая строка будет выглядеть следующим образом:

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

Полученный кадр данных будет иметь одну строку для каждого первоначального наблюдения, и будет включать в себя teamID вместе с остатками и подобранными значениями (что позволяет вы должны фильтровать для CLE).

+0

Давид, большое спасибо! Я прочитал справку для augment.lm, но мне не показалось, что второй параметр - это то, что мне нужно. Я все еще учу, как читать и понимать справочную систему. – user3457456

+0

Дэвид, у меня есть контроль за вами. В справке для параметра «данные» указано «Исходные данные по умолчанию для извлечения из модели». Все ли данные, которые были включены в кадр данных платежной ведомости, записанный в линейную модель в команде lm, и это просто извлечение из линейной модели? Я понимаю это правильно? – user3457456

+0

@ user3457456 по умолчанию данные, хранящиеся в модели, являются только столбцами, которые были непосредственно использованы в модели (попробуйте 'model.frame (fit)' на объекте с линейной привязкой, и вы увидите это). Вот как первоначально изменялись переменные win_percentage и зарплаты. Преимущество предоставления 'data = .' заключается в том, что он дает все исходные данные для увеличения –