如何在线性模型中指定具有100个因变量的公式,而无需在R

时间:2017-03-20 15:28:33

标签: r regression

问题是(a)模拟ATM Widthrawals中的日内需求,以及(b)为未来需求创建预测间隔。一天有144个10分钟的时间段,我的数据集是每个时期的ATM宽度值。这是一张图表,所以你可以对我所谈论的内容有所了解。 One day sample

我的数据集还有其他数据(主要是假人),例如工作日和假日。出于本文的目的,我将使用以下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)不起作用。

2 个答案:

答案 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)