如何 运行 使用训练集进行回归

How to run a regression with a training set

我想 运行 使用我已放入整洁文本格式的训练数据框进行回归。原始数据文件包括有明显发育障碍的参与者和可能有或没有发育障碍的参与者。我从一个更大的整洁文本数据框中创建了一个数据框,该数据框选取了我的文本文件中的关键词,并记录了该词在文本文档中出现的次数。那些有显着残疾的人在他们的名字前面有 "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

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

谢谢!

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))

与其他答案类似:

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

您也可以使用 summarize 来获得所需的输出

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

如果您有格式整洁的文本,并且希望它的格式适合建模,您通常希望 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。