问题是(a)模拟ATM Widthrawals中的日内需求,以及(b)为未来需求创建预测间隔。一天有144个10分钟的时间段,我的数据集是每个时期的ATM宽度值。这是一张图表,所以你可以对我所谈论的内容有所了解。
我的数据集还有其他数据(主要是假人),例如工作日和假日。出于本文的目的,我将使用以下data.frame作为我的数据集的表示(其中只有6个时间段,介于00:10和01:00之间,而不是整天)
df <- data.frame(H0010=1, H0020=2, H0030=3, H0050=4, H0050=5, H0100=6,
WeekDay=7, Holiday=8)
我想到的第一个想法是拟合线性回归。更准确地说,是一个多元多元线性回归。但是因为我有144个因变量(每10分钟一个)而不仅仅是6,我在R中的代码会非常长:
lm.fit <- lm(cbind(H0010, H0020, H0030, H0050, H0050, H0100,
H0200, H0210, H0220, H0230, H0240, H0250,
(and in goes on and on till midnight)
H2310, H2320, H2330, H2340, H2350, H2359)
~ WeekDay + Holiday, data = df)
有没有办法可以编写模型公式而无需指定所有144个因变量?
我也会对如何使用其他方法解决这个问题提出任何其他想法(虽然这个帖子的问题是上面提到的)。
修改:
我的数据集由因变量(交易数量)和虚拟因素组成。因此,解决方案lm(cbind(-Weekday, -Holiday) ~ Weekday + Holiday, data=df)
不起作用。
答案 0 :(得分:1)
当然,您可以通过指定要排除的内容来选择变量:
lm(cbind(-WeekDay, -Holiday) ~ WeekDay + Holiday, data=df)
修改强>
这是怎么回事?我也包含了更实际的数据框架。
df <- data.frame(H0010=rnorm(100, 1, 1), H0020=rnorm(100, 2, 1),
H0030=rnorm(100, 3, 1), H0050=rnorm(100, 4, 1),
H0050=rnorm(100, 5, 1), H0100=rnorm(100, 6, 1),
WeekDay=factor(c(rep(seq(1,7), 14), 1, 2)),
Holiday=factor(rbinom(100, 1, prob = .05)))
y <- as.matrix(df[,1:6])
x <- model.matrix(~df$WeekDay+df$Holiday)
lm(y~0+x) #suppress intercept, as it's in the model.matrix
答案 1 :(得分:1)
f <- sprintf("cbind(%s) ~ WeekDay + Holiday", paste(names(df)[1:6], collapse = ", "))
lm(f, data = df)