我有以下代码,使用外部气温和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
答案 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个自由度,这不会给你一个明智的结果。