我已经使用函数创建了一个简单的解决方案,以便您可以对任何数据帧(data
)和任何添加值序列(add
)对“colB”执行此操作。
# data has a column named 'colB' from which we cant to predict with added values.
# add is the vector of adding values to colB
'glm_add' <- function(data, add = seq(0.1, by = 0.1, length.out = nrow(data))){
data <- cbind.data.frame(data, colB_add = data$colB + add)
glm <- glm(colA ~ colB, data = data)
glm_add <- glm(colA ~ colB_add, data = data)
pred <- predict(glm, data)
pred_add <- predict(glm_add, data)
return(list(pred = pred, pred_add = pred_add))
}
重现的实例以测试功能:从与最初的 “COLB” 的GLM
data <- data.frame(colA = rnorm(10), colB = rnorm(10))
res <- glm_add(data)
预测作为协变量:从与COLB + 0.1 GLM
> res$pred :
1 2 3 4 5 6 7 8 9 10
0.13415502 0.17283282 0.27074470 0.47279826 0.01846426 0.13072748 0.21737383 0.12426569 0.25197290 0.30230644
预测,colB + 0.2,colB + 0.3,...作为协变量:
> res$pred_add
1 2 3 4 5 6 7 8 9 10
0.19407251 0.23911968 0.39659313 0.75172751 -0.13896182 0.04575049 0.18184197 -0.02324061 0.19078440 0.25795416
编辑:
作者实际问从那里colB_add
已它的每个元素中加入相同的值0.1,则0.2的任何修改的数据帧来预测,等等
要做到这一点,我将使用lapply()
创建一个data_list
,其中每个元素都是具有适当的colB_add
列的数据帧。
add <- seq(0.1, by = 0.1, length.out = nrow(data))
data_list <- lapply(1:length(add), function(i) cbind.data.frame(data, colB_add = data$colB + add[i]))
然后,我把每一个预测到一个列表
pred_list <- list()
> lapply(1:length(add), function(x){
+ glm <- glm(colA ~ colB_add, data = data_list[[x]])
+ pred_list[[x]] <<- predict(glm, data_list[[x]])
+ })
[[1]]
1 2 3 4 5 6 7 8 9 10
-0.25321920 0.93795112 -0.04791986 -0.51229077 -0.20971718 0.36441752 0.38477508 -0.26853199 -0.00754999 0.04868279
[[2]]
1 2 3 4 5 6 7 8 9 10
-0.25321920 0.93795112 -0.04791986 -0.51229077 -0.20971718 0.36441752 0.38477508 -0.26853199 -0.00754999 0.04868279
[[3]]
1 2 3 4 5 6 7 8 9 10
-0.25321920 0.93795112 -0.04791986 -0.51229077 -0.20971718 0.36441752 0.38477508 -0.26853199 -0.00754999 0.04868279
请注意,这给每个被修改的数据帧中的相同的预测。这从线性模型的理论上是显而易见的,因为每个协变量都以相同的因子变化。
感谢您的回复,但是这会将'add'的第一个元素添加到'colB'的第一个元素,第二个元素等等。我想将“add”的第一个元素添加到所有colB的元素,然后计算预测并保存结果,然后将第二个元素“add”添加到colB的所有元素,并重新计算预测并保存结果等。 – Z117
我编辑过! (将删除此评论) –