我应该如何处理多项选择/响应(全部选中)数据?

时间:2019-07-17 04:00:47

标签: r machine-learning statistics rstudio survey

我正在处理一些我感兴趣的调查数据,但遇到了一个小问题。有一些问题要求受访者从候选人中选出前三名...

例如,

  • 这是水果列表,您可以从中选择3种。 1)香蕉2)苹果3)葡萄柚4)桃5)西瓜

  • ,然后,多个受访者对该问题给出了不同的答案。

    • 受访者a-1、3、4(香蕉,葡萄柚,桃子)
    • 受访者b-1,2,5
    • 受访者c-3,4
    • (依此类推)
  • 以及负责清理调查数据的人将其分为三列,每一列代表被访者做出的三种选择之一。

     Q1_1  Q2_2  Q3_3
    a   1     3     4
    b   1     2     5
    c   3     4     NA
  • 我的问题是...有什么办法可以将其排成一列?我知道我可以将它们虚拟化,并根据其中的水果类型制作5列...
        Banana Apple Grapefruit Peach Watermelon
      a    1     0        1       1        0
      b    1     1        0       0        1
      c    0     0        1       1        0
  • 但是,我担心这可能会损害我期望在以后的研究中运行的预测模型的准确性。问题之一为受访者提供了大约990个选项。如果我坚持模型化,数据的维度将大大增加...

请告诉我是否有任何好的方法!我也很想知道是否有指定用于此类事件的R​​包。

1 个答案:

答案 0 :(得分:1)

我建议使用dplyrgather()将三个水果变量转换为单个long变量。请注意,在我的玩具示例中,每个受访者可能都有来自sample()的重复水果响应,因此我删除了重复的行。

df <- data.frame(id=1:100,
                 fruit1=sample(c('banana','apple','grape','peach','watermelon'),100,T),
                 fruit2=sample(c('banana','apple','grape','peach','watermelon'),100,T),
                 fruit3=sample(c('banana','apple','grape','peach','watermelon'),100,T),
                 outcome=runif(100))

# find respondents with duplicated fruits (eg, putting apple twice)
dupl <- df %>% gather(k,v,-id,-outcome) %>% 
  count(id,v)

# only keep one of the duplicated rows
df1 <- df %>% gather(k,v,-id,-outcome) %>% left_join(dupl) %>% 
  group_by(id,v,n) %>% slice(1) %>% select(-n)

lm(outcome~v,df1)

Call:
lm(formula = outcome ~ v, data = df1)

Coefficients:
(Intercept)      vbanana       vgrape       vpeach  vwatermelon  
   0.482981    -0.023715     0.020129     0.008117    -0.053460