2017-10-16 54 views
0

我有一個R數據框,它有兩列colA和colB以及一個合適的glm對象。 現在,我可以使用預測數據框和glm對象來預測結果。然而,我也想預測colB + 0.1,colB + 0.2,colB + 0.3等的結果。Map(purrr)將一系列數字逐個添加到列中

我正在考慮用map(purrr包)來做這件事,但我不知道如何。什麼到目前爲止,我已經試過是創造一個向量:

library(tibble) 
range <- data_frame(colC = seq(-1, 1, by=0.1)) 

現在我無法弄清楚如何做到:

  1. COLC的第一個元素添加到COLB
  2. 的所有元素
  3. 然後預測()上可樂COLB與GLM對象
  4. 集團這一結果由可樂,並將其保存到新的矢量
  5. 重複1-3中COLC下一元素並將結果附加到新的載體,所以這個新的vect或者有colC和預測並分組的colB。

我希望我的問題很清楚。任何人都知道如何做到這一點? 順便說一下,它不需要與purrr

回答

0

我已經使用函數創建了一個簡單的解決方案,以便您可以對任何數據幀(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 

請注意,這給每個被修改的數據幀中的相同的預測。這從線性模型的理論上是顯而易見的,因爲每個協變量都以相同的因子變化。

+0

感謝您的回覆,但是這會將'add'的第一個元素添加到'colB'的第一個元素,第二個元素等等。我想將「add」的第一個元素添加到所有colB的元素,然後計算預測並保存結果,然後將第二個元素「add」添加到colB的所有元素,並重新計算預測並保存結果等。 – Z117

+0

我編輯過! (將刪除此評論) –

相關問題