0

我有以下代码使用外部气温和 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
4

1 回答 1

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 个自由度,这不会给您一个合理的结果。

于 2013-06-23T15:17:44.393 回答