0

我正在研究一组 LDA 模型,以比较它们对主题分配的预测准确性。下面是一些简短的描述。

我应用每个文档的每个主题分配,为每个文档提取具有最高“gamma”(总共 15 个)的主题,然后我使用 Chang 和 Blei (2009) 的rtm方法来获取每个文档每个单词/标记的主题预测并选择最多给定文档中的频繁主题作为该文档的预测主题。最后,我将两个预测合并在一起,topic作为第一种方法的标题consensus作为第二种方法,按文档匹配ID并保留原始文档文本。assignments可以在此处评估数据(命名为) (330 x 6,不是很大)。

我试图用 可视化方法的预测准确性ggplot2,使用每个文档/每个主题方法作为沿 y 轴绘制的基线,并rtm使用以下代码在 x 轴上评估方法

library(foreign)
library(topicmodels)
library(tm)
library(tidyr)
library(plyr)
library(ggplot2)
library(lda)
library(igraph)
library(scales)

load("~/assignments.Rdata")

assignments %>%
  count(topic, consensus, wt_var = freq) %>%
  group_by(topic) %>%
  mutate(percent = n / sum(n)) %>%
  ggplot(aes(consensus, topic, fill = percent)) +
  geom_tile() +
  scale_fill_gradient2(high = "red", label = percent_format()) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1),
        panel.grid = element_blank()) +
  labs(x = "RTM assignments",
       y = "Documents came from",
       fill = "% of assignments")

但是,我在该行收到一条错误消息count(topic, consensus,...),显示Error in count(., topic, consensus, wt_var = freq) : unused argument (consensus),但是,如果我consensus从代码行中删除,我得到Error in count(., topic, wt_var = freq) : object 'topic' not found . 我怀疑这可能是 S4 类问题(也可能不是),所以我尝试了以下方法。""在变量上使用group_by(),但它不起作用。相反,我收到了此错误消息Error in sum(n) : invalid 'type' (closure) of argument

然后我用来tbl_df(assignments)转换assignments为 tibble 兼容对象。同样,它不起作用,R 仍然无法从 tibble 对象中找到数据consensustopic

我真的很困惑,希望有人看看我的代码并启发我。

谢谢。

4

1 回答 1

1

我认为您在函数的前半部分遇到了数据操作问题。我首先按主题和共识对分配进行分组,以便计数可以区分它们(而不是仅仅返回频率总和),然后应用计数(使用引号中的变量),最后变异:

library(dplyr)

assignments_2 <- assignments %>% group_by(topic, consensus) %>%
    count(vars = "topic", wt_var = "freq") %>%
    mutate(percent = n / sum(n))

如果这将数据放入我认为你想要的格式,那么你应该能够绘制你的图表!

于 2018-03-28T09:40:25.587 回答