2
我正在努力尋找一種方法,在運行某些迴歸模型時如何使用數據表的強大功能。迴歸模型作爲數據表中的列,R
這裏是一個簡化的工作情況:
# given a data table containing desired variables
MyVarb <- data.table(Y=rnorm(100),
V1=rnorm(100),
V2=rnorm(100))
# given a new data table containing a series of formulas/equations in a column
DT <- data.table(eq=c("Y ~ V1", "Y ~ V2", "Y ~ V1 + V2"))
# I store the linear regression models in a second column
DT[, "models" := lapply(eq, function(i) lm(i, data=MyVarb))]
# Now, I can access the coefficients of a model (e.g. the 3rd one) like:
DT[3, models][[1]]$coefficients
(Intercept) V1 V2
-0.01583034 0.08284029 0.01630247
不過,我很好奇,如果有替代方法。 根據需要這不起作用:
DT[, "trial" := lm(eq, data=MyVarb)]
# ***sorry for my bad understanding of data tables and objects***
我很好奇,我想運行數以千計的模型,還有更多的變量,因此它是使用lapply
數據表DT
內耗時(情侶幾小時在我的電腦上,然後我用完了8Gb的內存......)。有沒有辦法如何更快地編寫代碼?
我希望你的善意幫助。
你需要存儲整個模型對象一堆內存只需要係數,p值和AIC那麼這是否行得通呢?如果是,爲什麼?通常存儲係數和一些統計數據就足夠了。無論如何,你的速度限制部分實際上是'lm'並且解析了'lm'中的公式。尋找替代品(有一些)。如果你可以自己創建設計矩陣並使用'lm.fit',那將是相當快的。 – Roland
是的,'lapply'是存儲它們的方式,每行一個。 '「trial」:= lm(eq,data = MyVarb)'不起作用,因爲lm'不包含方程向量。爲了避免內存問題,你可以使用循環(所以一次只能處理一個模型);但我猜成千上萬的迴歸模型總是意味着麻煩... – Frank
@Roland,我真的對係數,p值和AIC感興趣。無論如何,我正在考慮存儲這些模型......以防未來的查詢等等。 – Valentin