如何使用训练集进行回归

时间:2018-08-08 14:39:14

标签: r regression tidytext

我想使用输入整齐的文本格式的训练数据框进行回归分析。原始数据文件包括患有明显发育障碍的参与者和可能患有或可能没有发育障碍的参与者。我从一个较大的整洁的文本数据框中创建了一个数据框,该数据框从文本文件中的关键字中挑选出来,并记录了该单词在文本文档中出现了多少次。那些有明显残疾的人的名字前有“ D”。看起来像这样:

Name of Text File     Word       n
    DAdam            autism      3
    DAdam             adhd       2
    DJane            autism      1
     Mark             adhd       4
     Joey             add        3

然后我添加了二进制变量来表示单词是否出现,其中1表示是,0表示否。

df$autism <- 1
df$autism <- if_else(one_dev$word == "autism", 1, 0)

所以现在数据框看起来像这样:

Name of Text File     Word       n   autism  adhd   add
    DAdam            autism      3      1     0      0 
    DAdam             adhd       2      0     1      0
    DJane            autism      1      1     0      0
     Mark             adhd       4      0     1      0 
     Joey             add        3      0     0      1

我希望它看起来像这样:

   Name of Text File    autism  adhd   add
    DAdam                  1     1      0 
    DJane                  1     0      0
     Mark                  0     1      0 
     Joey                  0     0      1

然后,我希望能够进行回归分析,以尝试预测特定参与者是否可能患有发育障碍。

谢谢!

4 个答案:

答案 0 :(得分:0)

tidyr和dplyr的组合可以带您到达那里。从tidytext data.frame开始,您可以继续传播数据,并对第一列之后的所有内容进行变异。

df1 %>% 
  spread(Word, n) %>% 
  mutate_at(-1, function(x) ifelse(is.na(x), 0, 1))

  Name_of_Text_File add adhd autism
1             DAdam   0    1      1
2             DJane   0    0      1
3              Joey   1    0      0
4              Mark   0    1      0

数据:

df1 <- structure(list(Name_of_Text_File = c("DAdam", "DAdam", "DJane", 
"Mark", "Joey"), Word = c("autism", "adhd", "autism", "adhd", 
"add"), n = c(3L, 2L, 1L, 4L, 3L)), class = "data.frame", row.names = c(NA, 
-5L))

答案 1 :(得分:0)

类似于其他答案:

library(dplyr)
library(tidyr)

df1 %>% 
    mutate(n = 1) %>%  
    spread(Word, n, fill = 0)
#   Name_of_Text_File add adhd autism
# 1             DAdam   0    1      1
# 2             DJane   0    0      1
# 3              Joey   1    0      0
# 4              Mark   0    1      0

答案 2 :(得分:0)

您还可以使用Summary来获得所需的输出

library(dplyr)
df2 <- df1 %>% group_by(Name_of_Text_File) %>% summarise(autism = sum(autism), add = sum(add), adhd = sum(adhd))

答案 3 :(得分:0)

如果您的文本整洁,并且希望使用适合建模的格式,则通常需要cast()。我经常使用cast_sparse(),尤其是当我想做glmnet modeling时。

您将这样开始:

library(tidyverse)
library(tidytext)

df <- tribble(~name,  ~disability, ~word, ~count,
              "Adam",  TRUE,   "autism", 3,
              "Adam",  TRUE,   "adhd",   2,
              "Jane",  TRUE,   "autism", 1,
              "Mark",  FALSE,  "adhd",   4,
              "Joey",  FALSE,  "add",    3)

sparse_words <- df %>%
  cast_sparse(name, word, count)

sparse_words
#> 4 x 3 sparse Matrix of class "dgCMatrix"
#>      autism adhd add
#> Adam      3    2   .
#> Jane      1    .   .
#> Mark      .    4   .
#> Joey      .    .   3

然后,您可以继续在任何喜欢矩阵输入的机器学习模型中使用此稀疏矩阵(这是大多数!)。在这里,让我们逐步了解如何制作一个简单的数据框并拟合玩具回归。

df_model <- sparse_words %>% 
  as.matrix() %>% 
  tbl_df() %>% 
  bind_cols(df %>% 
              distinct(name, disability) %>%
              select(disability))

df_model
#> # A tibble: 4 x 4
#>   autism  adhd   add disability
#>    <dbl> <dbl> <dbl> <lgl>     
#> 1      3     2     0 TRUE      
#> 2      1     0     0 TRUE      
#> 3      0     4     0 FALSE     
#> 4      0     0     3 FALSE

lm(disability ~ ., data = df_model)
#> 
#> Call:
#> lm(formula = disability ~ ., data = df_model)
#> 
#> Coefficients:
#> (Intercept)       autism         adhd          add  
#>      0.8000       0.2000      -0.2000      -0.2667

reprex package(v0.2.0)于2018-08-14创建。