ggplot2无法访问tbl_df数据及LDA模型主题预测准确率对比问题
Hi Chris,
Let's tackle both your LDA model comparison workflow and the tbl_df/ggplot2 issue you're facing:
LDA Topic Assignment Comparison Workflow
Here's a structured breakdown of your process with actionable code snippets to implement each step:
- Document-level topic assignment (gamma-based):
For each document, extract the topic with the highest gamma value (posterior probability of the document belonging to the topic). Using thetopicmodelspackage in R, this can be done with:# Assuming lda_model is your trained 15-topic LDA model # Quick method to get top 1 topic per document doc_gamma_topics <- topics(lda_model, 1) # If you need manual gamma extraction for verification: gamma_df <- as.data.frame(lda_model@gamma) doc_gamma_topics <- apply(gamma_df, 1, which.max) - Token-level topic prediction (RTM method):
After implementing Chang & Blei's (2009) Relational Topic Model to get token-level topic assignments, aggregate to the document level by selecting the most frequent topic per document:# Assuming token_topics is a tibble with columns: document_id, token_topic doc_rtm_topics <- token_topics %>% group_by(document_id) %>% count(token_topic) %>% slice_max(n, n = 1) %>% pull(token_topic) - Merge results for comparison:
Combine both document-level topic assignments into a single dataset to evaluate prediction accuracy:comparison_df <- tibble( document_id = seq_along(doc_gamma_topics), gamma_assigned_topic = doc_gamma_topics, rtm_assigned_topic = doc_rtm_topics )
Fixing tbl_df Data Extraction for ggplot2
Tibbles (tbl_df) play nicely with ggplot2, but common missteps cause extraction issues. Here are quick fixes:
- Use tidyverse syntax directly: You don't need to "extract" columns explicitly—ggplot2 works natively with tibbles. Reference columns by name in the
aes()call:# Example: Plot distribution of gamma-based topics ggplot(comparison_df, aes(x = factor(gamma_assigned_topic))) + geom_bar(fill = "#2c3e50") + labs(x = "Gamma-Assigned Topic", y = "Document Count") - Convert to base data frame if needed: If you prefer base R column extraction, convert the tibble first:
comparison_df_base <- as.data.frame(comparison_df) # Now you can use syntax like comparison_df_base[, "gamma_assigned_topic"] - Ungroup if your tibble is grouped: If you have leftover grouping from prior
dplyroperations, ungroup before plotting:comparison_df <- comparison_df %>% ungroup()
Let me know if you need adjustments for your specific model setup or dataset structure!
内容的提问来源于stack exchange,提问作者Chris T.
相关产品推荐
相关产品推荐

