我正在研究一组LDA模型,以比较它们对主题分配的预测准确性。下面简短说明。
我为每个主题分配应用了每个文档,为每个文档提取了具有最高“gamma”(总共15个)的主题,然后我使用Chang和Blei(2009)rtm
方法来获取每个文档的主题预测每个单词/标记,并选择给定文档中最常用的主题作为该文档的预测主题。最后,我将两个预测与topic
合并为第一个方法consensus
的标头,作为第二个方法,与文档ID
匹配并保留原始文档文本。可以评估数据(名为assignments
)here(330 x 6,不是很大)。
我尝试用ggplot2
可视化方法的预测准确性,使用每个文档/每个主题方法作为沿y轴绘制的基线和在x-上评估的rtm
方法轴包含以下代码
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对象中找到consensus
和topic
数据。
我真的很困惑,希望有人看看我的代码并启发我。
感谢。
答案 0 :(得分:1)
我认为您在函数的前半部分遇到了数据操作问题。我首先按主题和共识对分配进行分组,以便计数区分它们(而不仅仅是返回一个频率之和),然后应用计数(变量用引号)并最终变异:
library(dplyr)
assignments_2 <- assignments %>% group_by(topic, consensus) %>%
count(vars = "topic", wt_var = "freq") %>%
mutate(percent = n / sum(n))
如果将数据放入我认为您想要的格式,那么您应该能够绘制图表了!