首页 文章

如何在线性模型中指定具有100个因变量的公式,而不必在R中明确地写出它们

提问于
浏览
-1

问题是(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个因变量?

我还想知道如何使用其他方法解决这个问题的任何其他想法(虽然这个帖子的问题是上面提到的) .

EDIT :我的数据集由因变量(交易数量)和虚拟因素组成 . 因此,解决方案 lm(cbind(-Weekday, -Holiday) ~ Weekday + Holiday, data=df) 不起作用 .

2 回答

  • 1
    f <- sprintf("cbind(%s) ~ WeekDay + Holiday", paste(names(df)[1:6], collapse = ", "))
    lm(f, data = df)
    
  • 1

    当然,您可以通过指定要排除的内容来选择变量:

    lm(cbind(-WeekDay, -Holiday) ~ WeekDay + Holiday, data=df)
    

    EDIT:

    这个怎么样?我也包含了一个更现实的数据框架 .

    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
    

相关问题