Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何剥离glm模型?_R_Glm - Fatal编程技术网

R 如何剥离glm模型?

R 如何剥离glm模型?,r,glm,R,Glm,返回的对象包含残差,拟合值,效果,qr$qr,线性。预测器,权重,加起来就是一个庞大的对象(如果输入足够大) 我该如何剥离它,以便像predict这样的东西仍然有效 理想情况下,我想要一个函数,它将返回一个小函数对象,相当于函数(x)predict(我的_模型,data.frame(x=x));类似于。的内容大多数模型组件都是描述性的,并且不是预测工作所必需的。辅助函数()可用于删除脂肪: stripGlmLR = function(cm) { cm$y = c() cm$model =

返回的对象包含
残差
拟合值
效果
qr$qr
线性。预测器
权重
加起来就是一个庞大的对象(如果输入足够大)

我该如何剥离它,以便像
predict
这样的东西仍然有效


理想情况下,我想要一个函数,它将返回一个小函数对象,相当于
函数(x)predict(我的_模型,data.frame(x=x))
;类似于。

的内容大多数模型组件都是描述性的,并且不是
预测
工作所必需的。辅助函数()可用于删除脂肪:

stripGlmLR = function(cm) {
  cm$y = c()
  cm$model = c()

  cm$residuals = c()
  cm$fitted.values = c()
  cm$effects = c()
  cm$qr$qr = c()  
  cm$linear.predictors = c()
  cm$weights = c()
  cm$prior.weights = c()
  cm$data = c()


  cm$family$variance = c()
  cm$family$dev.resids = c()
  cm$family$aic = c()
  cm$family$validmu = c()
  cm$family$simulate = c()
  attr(cm$terms,".Environment") = c()
  attr(cm$formula,".Environment") = c()

  cm
}
现在,您可以将其应用于您的模型,使其大小减少5个以上数量级(在本例中):


traindata这可能会有帮助,我记得我回答了一个类似的问题,但结果是针对不同的回归函数。您可能仍然会发现它很有用,因为我描述了这个过程(我知道您并不害怕黑客攻击):
traindata <- data.frame(x = rnorm(1e6), y = rnorm(1e6))
testdata <- data.frame(x = rnorm(10))

mod1 <- glm(y~x, data= traindata)
mod2 <- stripGlmLR(mod1)

format(object.size(mod1), units = "Kb")
# [1] "492234.5 Kb"
format(object.size(mod2), units = "Kb")
# [1] "18.5 Kb"

all(predict(object = mod1, newdata = testdata) == 
    predict(object = mod2, newdata = testdata))
# [1] TRUE