J'ai créé une solution simple en utilisant une fonction afin que vous puissiez faire cela pour toutes les trames de données (data
) et toute séquence de valeurs ajoutées (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))
}
reproduire, par exemple, pour tester la fonction:
data <- data.frame(colA = rnorm(10), colB = rnorm(10))
res <- glm_add(data)
prédictions de la glm avec le "initial colB" comme covariable:
> 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
prédictions de la glm avec colB + 0,1 , colB + 0,2, colB + 0,3, ... comme covariable:
> 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
EDIT:
L'auteur a demandé en fait de prédire à partir des trames de données modifiées où colB_add
a chacun de ses éléments ont été ajoutés la même valeur 0,1, puis 0,2, etc.
Pour ce faire, , Je vais utiliser lapply()
pour créer un data_list
où chaque élément est une base de données avec la colonne colB_add
appropriée.
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]))
Ensuite, je mets chaque prédictions dans une liste
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
Notez que cela donne les mêmes prédictions pour chaque trame de données modifiées. Ceci est évident à partir de la théorie sur les modèles linéaires puisque chaque covariable change par le même facteur.
Merci pour votre réponse, mais cela ajoute le premier élément de 'add' au premier élément de 'colB', le second au second, etc. Je voudrais ajouter le premier élément de 'add' à TOUS les éléments de colB, puis calculer prédire et enregistrer le résultat, puis ajouter le deuxième élément de 'ajouter' à tous les éléments de colB et recalculer prédire et enregistrer le résultat, etc – Z117
J'ai édité! (va supprimer ce commentaire) –