2013-03-15 103 views
1

我想從R中的topicmodels包使用LDA模型。 我需要測量方法的不穩定性,所以我已經從W = 3000字的Dirichlet分佈生成真實參數,t = 8個主題和d = 50名的文件與大約60個字中的每個之一:錯誤與功能topicmodels :: lda在R

Theta = t(rdirichlet(d, alpha)) 

Phi = t(rdirichlet(t, beta)) 

docs = matrix(0, nrow = d, ncol = w) 

for (i in 1:d) { 
    curn = rnorm(1, mean = 60, sd = 10)  
    for (j in 1:curn) { 
     curt = rdiscrete(1, Theta[,d], 1:t) 
     curw = rdiscrete(1, Phi[,curt], 1:w) 
     docs[i, curw] = docs[i, curw] + 1 
     } 
    } 

因此,我的文檔矩陣是稀疏矩陣d * w和幾乎所有元素都是0或1。

然後我需要我的文檔矩陣將成爲DocumentTermMatrix類的一個對象,以便在topicmodels中使用它:lda():

docs = as.DocumentTermMatrix(docs, weighting = weightTf) 

我需要用吉布斯抽樣的方法,所以我寫

ldafitmodel <- lda(docs, t, method = "Gibbs") 

然後我得到:

錯誤lda.default(文檔,T,方法= 「吉布斯」 ): nrow(X)和長度(分組)是不同的

我想這topicmodels包使用MASS包,但隨後這個分組p參數是我無法明確控制的,我能嗎?或者我的數據有什麼問題?

請幫幫我!因爲你沒有d,T,W,α或定義的測試版,不加載相應的軟件包爲您rdirichlet()rdiscrete()函數調用

BR, 瑪麗亞

+0

請讓您的情況具有可重複性,即向我們提供模擬您的情況所需的數據和代碼。有關如何執行此操作的更多提示,請參閱http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example。 – 2013-03-15 10:23:22

+0

@PaulHiemstra,完成:) – FrauHahnhen 2013-03-15 10:49:54

回答

2

你確切的問題是不可重現。不過,我敢肯定你的問題是從MASS包中調用lda()函數 - 這是用於線性判別分析,而不是潛在的dirichlet分配 - 而不是來自topicmodels包的LDA()函數。 R是區分大小寫的,所以這些上限是有區別的。同樣值得注意的是,如果您認爲將來可能遇到類似問題,但對象名稱完全相同,則可以通過命名空間以::形式指定您想要的確切對象,例如topicmodels::LDA()

無論如何,我不能重現你的例子,但我認爲這個例子應該說明你的錯誤和工作解決方案。

> library(topicmodels) 
> data(AssociatedPress) 
> docs = AssociatedPress[1:100] 
> ldafitmodel <- lda(docs, 4, method = "Gibbs") 
Error in lda.default(docs, 4, method = "Gibbs") : 
    nrow(x) and length(grouping) are different 
> (ldafitmodel <- LDA(docs, 4, method = "Gibbs")) 
A LDA_Gibbs topic model with 4 topics.