R语言STM模型:生成指定格式Topic Proportion表格及相关技术问题咨询
解答:STM模型主题占比表格生成与主题存在性判断
作为STM和R语言的初学者,你要的这种主题占比表格其实不难实现——STM包本身没有直接生成该格式的函数,但我们可以通过提取模型输出的核心数据,手动整理出你需要的结果。下面是具体的步骤和示例代码:
1. 获取百分比形式的主题全局占比
STM模型训练完成后,会输出一个theta矩阵,这个矩阵的每一行对应一篇文档,每一列对应一个主题,值代表该文档中对应主题的占比。我们可以基于这个矩阵计算全局的主题占比(转成百分比):
# 假设你的STM模型对象命名为stm_model library(stm) # 提取文档-主题分布矩阵theta theta_matrix <- stm_model$theta # 计算每个主题的全局占比(转成百分比,保留两位小数) topic_proportions <- colSums(theta_matrix) / nrow(theta_matrix) * 100 topic_prop_df <- data.frame( Topic = paste0("Topic ", 1:length(topic_proportions)), `Topic Proportions in %` = round(topic_proportions, 2) )
2. 生成带“是否出现在Literate”列的表格
首先得明确你说的“Literate”指的是哪类文档——比如你有一个元数据变量(比如doc_data$is_literate)标记了文档是否属于Literate类别。我们可以筛选出这类文档的主题分布,然后判断每个主题是否在其中出现(这里设定主题占比>0.01就算出现,你可以根据需求调整阈值):
# 假设你的文档元数据框是doc_data,其中is_literate是逻辑向量(TRUE表示属于Literate) # 筛选Literate文档的theta矩阵 literate_theta <- theta_matrix[doc_data$is_literate, ] # 判断每个主题是否在Literate文档中出现 topic_in_literate <- apply(literate_theta, 2, function(x) any(x > 0.01)) # 把结果添加到之前的数据框 topic_prop_df$`Present in Literate` <- ifelse(topic_in_literate, "Yes", "No")
如果要生成美观的可导出表格,可以用knitr和kableExtra包优化样式:
library(knitr) library(kableExtra) # 生成带样式的表格 kable(topic_prop_df, caption = "Topic Proportion Summary") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
3. 补充说明
STM包没有内置直接生成这种表格的函数,但核心的theta矩阵已经包含了所有需要的信息,通过简单的求和、筛选和判断就能快速得到你要的结果。如果你的“Literate”定义不是文档类别,而是指特定文本特征,只需要调整筛选文档的逻辑即可。
内容的提问来源于stack exchange,提问作者JS J




