使用R中的GLM模型提前一天

时间:2013-06-23 14:44:46

标签: r prediction glm

我有以下代码,使用外部气温和TOD(96分类变量,一天中的时间),以15分钟间隔获得负载消耗的日前预测。当我运行下面的代码时,我收到以下错误。

  i = 97:192
  formula = as.formula(load[i] ~ load[i-96] + oat[i])
  model = glm(formula, data = train.set, family=Gamma(link=vlog()))   

使用glm(),

在最后一行之后出现以下错误
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

使用predict(),

在最后一行之后显示以下错误
Warning messages:
1: In if (!se.fit) { :
  the condition has length > 1 and only the first element will be used
2: 'newdata' had 96 rows but variable(s) found have 1 rows 
3: In predict.lm(object, newdata, se.fit, scale = residual.scale, type = ifelse(type ==  :
  prediction from a rank-deficient fit may be misleading
4: In if (se.fit) list(fit = predictor, se.fit = se, df = df, residual.scale = sqrt(res.var)) else predictor :
  the condition has length > 1 and only the first element will be used

1 个答案:

答案 0 :(得分:1)

你正在以一种相当迂回的方式做事,而且这种做法并不适合做出样本外的预测。如果要对行的子集建模,则直接对data参数进行子集化,或使用subset参数。

train.set$load_lag <- c(rep(NA, 96), train.set$load[1:96])
mod <- glm(load ~ load_lag*TOD, data=train.set[97:192, ], ...)

您还需要重新考虑您使用TOD所做的事情。如果它有96个等级,则你在96个观察中拟合(至少)96个自由度,这不会给你一个明智的结果。