gpt4 book ai didi

r - 为预测任务生成子集数据的滑动窗口

转载 作者:行者123 更新时间:2023-12-01 22:58:05 28 4
gpt4 key购买 nike

我想编写一个滑动窗口函数,以便使用从 t、t+1 和 t+2 年训练的模型来预测 t+3 年的结果。这意味着对于 10 年的数据,所需的滑动窗口函数应该创建 7 个训练测试拆分并进行 7 个预测(对于 t+3、t+4、t+5、t+6、t+7、t +8,t+9 年)。

我想出了下面的代码,但结果并没有响起。不仅生成的对象长度不同,而且即使我尝试手动完成预测任务,predict 函数实际上会为一年的结果生成 3 个预测值,这没有意义。如果有人能指出错误的来源,将不胜感激。

# generate the data
set.seed(123)
df <- data.frame(year = 2000:2009, # T = 10
y = c(1, 1, 1, 1, 0, 0, 1, 0, 0, 0),
var1 = runif(10, min=0, max=1),
var2 = runif(10, min=1, max=2))

# store predicted values in a list
pred <- list()

# loop from the 1st year to the T-3 year

for(i in 2000:2007){
df_sub1 <- subset(df, year == c(i, i+1, i+2))
mod <- glm(y~var1+var2, data=df_sub1, family=binomial())
df_sub2 <- subset(df, year == i+3)
pred[[i]] <- predict(mod, data=df_sub2, type = "response")
}


# error message
Error in family$linkfun(mustart) :
Argument mu must be a nonempty numeric vector
In addition: Warning messages:
1: In year == c(i, i + 1, i + 2) :
longer object length is not a multiple of shorter object length
2: In year == c(i, i + 1, i + 2) :
longer object length is not a multiple of shorter object length

最佳答案

当 rhs 的长度 > 1 时,错误/警告来自使用 ==。使用 %in%

pred <- vector('list', 8)
names(pred) <- 2000:2007
for(i in 2000:2007){
df_sub1 <- subset(df, year %in% c(i, i+1, i+2))
mod <- glm(y~var1+var2, data=df_sub1, family=binomial())
df_sub2 <- subset(df, year == (i+3))
pred[[as.character(i)]] <- tryCatch(predict(mod,
newdata=df_sub2, type = "response"), error = function(e) NA_real_)
}

-输出

> pred
$`2000`
4
1

$`2001`
5
1

$`2002`
6
1

$`2003`
7
2.220446e-16

$`2004`
8
0.1467543

$`2005`
9
0.001408577

$`2006`
10
2.220446e-16

$`2007`
[1] NA

关于r - 为预测任务生成子集数据的滑动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72509799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com