2016-03-23 12 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行に2つの変更が必要です。

  1. 結果の(拡張された)データフレームをfitという名前の列に保存しています。代わりにdofit =を削除)に直接送信してみてください。

  2. 拡張機能は、モデルに含まれていなくても、結果データの一部としてteamID列を保持する必要があります。 augmentは正確にこの目的のために第2引数dataを取ります(詳細についてはhelp(augment.lm)を参照してください)。得られたデータフレームが可能になる(元の観測ごとに1行を持つことになり、残差とフィット値とともにteamIDを含むであろう

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

したがって、新しい行は次のようになりあなたはCLEのためにフィルタリングする)。

+0

David、ありがとう!私は増強のための助けを読んだ。しかし、第二のパラメータは私が必要としたものであることは明らかではなかった。私はまだヘルプシステムを読んで理解する方法を学んでいます。 – user3457456

+0

デビッド、私はあなたにフォローアップしています。 "データ"パラメータのヘルプは、 "オリジナルデータ、デフォルトでモデルから抽出する"と言います。給与データフレームに含まれていたすべてのデータは、lmコマンドで線形モデルに書き込まれ、線形モデルから抽出するだけで増補されますか?私はこれを正しく理解していますか? – user3457456

+0

@ user3457456デフォルトでは、モデルに格納されるデータは、モデルで直接使用された列のみです(リニアフィットオブジェクトで 'model.frame(fit)'を試してみてください)。これは、win_percentage変数とsalary変数が元々詰まった方法です。 'data = .'を与えることの利点は、元のデータをすべて補完することです。 –

関連する問題