【发布时间】:2018-03-28 09:18:03
【问题描述】:
我正在研究一组 LDA 模型,以比较它们对主题分配的预测准确性。下面是一些简短的描述。
我应用每个文档的每个主题分配,为每个文档提取具有最高“gamma”(总共 15 个)的主题,然后我使用 Chang 和 Blei 的 (2009) rtm 方法来获得每个文档每个单词的主题预测/token 并选择给定文档中最常见的主题作为该文档的预测主题。最后,我将两个预测与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 数据。
我真的很困惑,希望有人看看我的代码并就此给予我启发。
谢谢。
【问题讨论】:
-
plyr有一个计数函数,它会与 dplyr 的计数函数发生冲突。如果您需要同时加载两者(不太可能),则需要以正确的顺序加载它们 -
我需要
plyr用于percent_format()代码块中的ggplot。那么我应该在dplyr之前先加载plyr吗? -
如果它只用于一个功能我会使用
plyr::percent_format() -
糟糕,
percent_format()位于scales包中,而不是plyr。对此感到抱歉。
标签: r ggplot2 lda topic-modeling tbl