Невозможно получить доступ к данным из объекта tbl df, которые будут использоваться на ggplot2

Я работаю над набором моделей LDA, чтобы сравнить их прогнозирующую точность в тематических заданиях. Некоторое краткое описание ниже.

Я применил задание по каждому документу для каждой темы, выделив тему с самой высокой "гаммой" (всего 15) для каждого документа, затем я использовал Чанга и Блея (2009). rtm метод, позволяющий получить прогнозирование темы для каждого документа по слову / токену и выбрать наиболее часто встречающуюся тему в данном документе в качестве прогнозируемой темы для этого документа. Наконец, я объединил оба предсказания с topic в качестве заголовка для первого метода consensus как второй метод, соответствующий документу ID и сохраняя оригинальный текст документа. Данные (названные assignments) здесь можно оценить (330 х 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 совместимый объект. Опять же, это не сработало, R до сих пор не смог найти consensus а также topic данные из объекта Tibble.

Я очень запутался и хотел бы, чтобы кто-то взглянул на мой код и просветил меня в этом.

Благодарю.

1 ответ

Решение

Я думаю, что у вас есть проблемы с вашими данными в первой половине функции. Сначала я сгруппировал назначения по темам и консенсусу, чтобы счетчик различался между ними (а не просто возвращал сумму частот), затем применил счет (с переменными в кавычках) и, наконец, изменил:

library(dplyr)

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

Если это переводит данные в формат, который, я думаю, вам нужен, тогда вы сможете построить график!

Другие вопросы по тегам