2016-11-28 7 views
0

私はより大きな集団に一般化したいサンプルをたくさん使っています。しかし、ほとんどの場合、サンプルは偏っており、surveyパッケージで重み付けする必要があります。しかし、私は、この種の重み付けでTerm Document Matrixを重み付けする方法を見つけていません。この例で、このようになりますwordcloudを生成TermDocumentMatrixの調査パッケージの重みを使用してください

library(tm) 
library(wordcloud) 

set.seed(123) 

# Consider this example: I have performed a sample from a population and now have 
# 1000 observations of text. In the data I also have information about gender. 

# The sample 
data <- rbind(data.frame(gender = "M", 
        words = sample(c("education", "money", "family", 
            "house", "debts"), 
            600, replace = TRUE)), 
       data.frame(gender = "F", 
        words = sample(c("career", "bank", "friends", 
             "drinks", "relax"), 
            400, replace = TRUE))) 
# I create a simple wordcloud 
text <- paste(data$words, collapse = " ") 
matrix <- as.matrix(
    TermDocumentMatrix(
    VCorpus(
     VectorSource(text) 
    ) 
) 
) 

に考えてみましょう: enter image description here

あなたが見ることができるように、より頻繁に表示されるので、男性が言及した用語を大きくしています。しかし、私はこの人口の真の分布を知っているので、このワードクラウドは偏っています。

調査パッケージに真の性別分布

true_gender_dist <- data.frame(gender = c("M", "F"), freq = nrow(data) * c(0.49,0.51)) 

Iは、その(レーキ機能解析、可視化などに重みを使用するために

library(survey) 
rake_data <- rake(design = svydesign(ids = ~1, data = data), 
        sample.margins = list(~gender), 
        population.margins = list(true_gender_dist)) 

とデータを重み付けすることができます調査パッケージには含まれません)元のデータに重みを追加します。

data_weighted <- cbind(data, data.frame(weights = weights(rake_data))) 

これまでのところとても良いです。しかし、私はこれらの重さを考慮に入れて言葉を出したいと思います。

私の最初の試みは、用語ドキュメントマトリックスの作成にウェイトを使用することです。

text_corp <- VCorpus(VectorSource(text)) 
w_tdm <- TermDocumentMatrix(text_corp, 
           control = list(weighting = weights(rake_data))) 

しかし、その後、私が手:

Error in .TermDocumentMatrix(m, weighting) : invalid weighting 

が、これがすべてで可能ですか?

+0

あなたの例の「性別」列には 'sample'は必要ありません。 'data.frame(gender = 1、...'do will do –

+0

用語頻度を重み付けするために、[逆文書頻度(idf)](https://en.wikipedia.org/wiki/Tf%E2%80%93idf)を使用することができます。または、各性別の用語頻度を各性別の調査数で除算するだけです。 – emilliman5

+0

ええ、私はemilliman5、それは私も心に持っていたようなものでした。どのように私はそれをプログラムするか分からない。私は重みを指定する機能を持つTMパッケージを試してみる必要があります。体重はまた政治的偏見、年齢などと思うかもしれないので、私はより洗練された方法を探しています。 – FilipW

答えて

0

私はまだコメントできませんので、私はあなたの質問をコメントに答えを使用します:

あなたはRパッケージSTM(構造化トピックモデル)に興味がある可能性があります。メタ変数(連続的および/または離散的)に関する潜在的なトピックを推論する可能性を提供する。

あなたはメタ変数がどのように影響するかチェックアウトするプロットの種類を生成することができます

a)の選択によってはトピック、

b)1種のトピック内部の好適な言葉、

C)といくつかのより多くの:)

いくつかのリンク、もし興味があるなら:

Paper describing the R package

R documentation

Some more Papers < - あなたは件名にいくつかの詳細をダイビングしたい場合は、これは、本当に良いコレクションです!

+0

チップをありがとう。面白いパッケージ。しかし、私が正しく覚えていれば、TMパッケージはメタ変数を格納する能力を提供しますが、stmモデリングは面白いです。まだ、私が探しているものではありません。最も基本的な形式では、メタ変数に基づいて各項の頻度重みを与えることに興味があります。 – FilipW

関連する問題