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
Post a Comment