cpsievert/LDAvis

Error with 2 topics

yogesh-bansal opened this issue · 2 comments

I was using this package's createJSON() function while my topicmodel was for 2 topics and received this error
Error in stats::cmdscale(dist.mat, k = 2) : 'k' must be in {1, 2, .. n - 1}
Then I tested with reproducible example given here
http://cpsievert.github.io/LDAvis/reviews/reviews.html
by putting K=2 and keeping everything same and bumped into this error again in createJSON().

Upon seeing the source code of createJSON(), the issue is in function jsPCA().
In jsPCA(), while K=2, the dist.mat comes out to be a single value which throws an error in line
pca.fit <- stats::cmdscale(dist.mat, k = 2)

Any advice how to get past this error?

I got the same error, do you find a way to fix this problem? k=2

I know this is a super old issue and I am not sure whether it is still needed, but I noticed some other errors occasionally with jsPCA(). This is why I rewrote the function in the following way:

jsPCA_updated <- function(phi) {
  dist.mat <- philentropy::distance(phi, 
                       method = "jensen-shannon",
                       unit = "log2")
  pca.fit <- stats::cmdscale(dist.mat, k = 2)
  data.frame(x = pca.fit[,1], y = pca.fit[,2])
}

You can then call it in the createJSON() function by setting mds.method = jsPCA_updated.

@cpsievert I haven't yet figured out why this function occasionally throws errors. I particularly noticed that it occurs more often, when using models created with the topicmodels package. Sometimes the built-in jsPCA creates one or more infinite values and stats::cmdscale throws an error. createJSON catches the error, but reports NA values instead of infinite values. If you don't mind the philentropy dependency, I'd open a pull request.

PS: Thanks for generating this package. I think it's super handy!