r - Use Predict on data.table with Linear Regression -


regrad post, have created example play linear regression on data.table package follows:

## rm(list=ls()) # anti-social library(data.table) set.seed(1011) dt = data.table(group=c("b","b","b","a","a","a"),                 v1=rnorm(6),v2=rnorm(6), y=rnorm(6)) setkey(dt, group) ans <- dt[,as.list(coef(lm(y~v1+v2))), = group] 

return,

   group (intercept)        v1        v2 1:        1.374942 -2.151953 -1.355995 2:     b   -2.292529  3.029726 -9.894993 

i able obtain coefficients of lm function.

my question is: how can directly use predict new observations ? if have new observations follows:

new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6)) 

i have tried:

setkey(new, group) dt[,predict(lm(y~v1+v2), new), = group] 

but returns me strange answers:

    group         v1  1:      -2.525502  2:       3.319445  3:       4.340253  4:       3.512047  5:       2.928245  6:       1.368679  7:     b  -1.835744  8:     b  -3.465325  9:     b  19.984160 10:     b -14.588933 11:     b  11.280766 12:     b  -1.132324 

thank you

you predicting onto entire new data set each time. if want predict on new data each group need subset "newdata" group.

this instance .by useful. here 2 possibilities

a <- dt[,predict(lm(y ~ v1 + v2), new[.by]), = group]  b <- new[,predict(lm(y ~ v1 + v2, data = dt[.by]), newdata=.sd),by = group] 

both of give identical results

identical(a,b) # [1] true #   group         v1 #1:      -2.525502 #2:       3.319445 #3:       4.340253 #4:     b -14.588933 #5:     b  11.280766 #6:     b  -1.132324 

Comments

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -