Aggregate linear regression

前端 未结 3 1256
逝去的感伤
逝去的感伤 2021-01-21 01:14

Sorry I am quite new to R, but I have a dataframe with gamelogs for multiple players. I am trying to get the slope coefficient for each player\'s points over all of their games.

相关标签:
3条回答
  • 2021-01-21 01:39

    You could do

    s <- split(gamelogs, gamelogs$name)
    
    vapply(s, function(x) lm(game ~ pts, x)[[1]][2], 1)
    #     player1     player2 
    # -0.42857143  0.08241758 
    

    or

    do.call(rbind, lapply(s, function(x) coef(lm(game ~ pts, x))[2]))
    #                 pts
    # player1 -0.42857143
    # player2  0.08241758
    

    Or if you want to use dplyr, you can do

    library(dplyr)
    
    models <- group_by(gamelogs, name) %>% 
        do(mod = lm(game ~ pts, data = .))
    
    cbind(
        name = models$name, 
        do(models, data.frame(slope = coef(.$mod)[2]))
    )
    #      name       slope
    # 1 player1 -0.42857143
    # 2 player2  0.08241758
    
    0 讨论(0)
  • 2021-01-21 01:47

    You can also do some magic with the base lm to do it all at once:

    coef(lm(game ~ pts*name - pts, data=gamelogs))[3:4]
    coef(lm(game ~ pts:name + name, data=gamelogs))[3:4]
    #pts:nameplayer1 pts:nameplayer2 
    #    -0.42857143      0.08241758 
    

    As a data.frame:

    data.frame(slope=coef(lm(game ~ pts*name - pts, data=gamelogs))[3:4])
    #                      slope
    #pts:nameplayer1 -0.42857143
    #pts:nameplayer2  0.08241758
    

    See here for some further explanation of the modelling in the lm call:

    https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html
    http://faculty.chicagobooth.edu/richard.hahn/teaching/FormulaNotation.pdf#2

    In this case pts*name expands to pts + name + pts:name which when removing - pts means it is equivalent to pts:name + name

    0 讨论(0)
  • 2021-01-21 01:52

    library nlme has a function for this as well, lmList

    library(nlme)
    coef(lmList(game ~ pts | name, gamelogs))
    #        (Intercept)         pts
    # player1    7.714286 -0.42857143
    # player2    4.230769  0.08241758
    
    0 讨论(0)
提交回复
热议问题