2016-11-28 5 views
0

Ich arbeite viel mit Proben, die ich auf größere Populationen verallgemeinern möchte. In den meisten Fällen sind die Abtastwerte jedoch vorgespannt und müssen mit dem survey-Paket gewichtet werden. Ich habe jedoch keine Möglichkeit gefunden, Term Document Matrix auf diese Art von Gewichten zu gewichten. Betrachten Sie dieses BeispielVerwenden Sie Gewichte aus Umfrage-Paket in 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) 
    ) 
) 
) 

, die eine Wordcloud erzeugt, die etwa wie folgt aussieht: enter image description here

Wie Sie sehen können, die von den Männern erwähnten Begriffe sind größer, weil die öfter erscheinen. Allerdings kenne ich die wahre Verteilung dieser Population, daher ist diese Wordcloud verzerrt.

Die wahre Geschlechterverteilung

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

Mit dem Umfrage-Paket kann ich die Daten mit dem Rechen Funktion gewichten

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

Um die Gewichte in der Analyse zu verwenden, Visualisierungen usw. (die sind nicht im Umfragepaket enthalten) Ich füge die Gewichtungen zu den Originaldaten hinzu.

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

So weit so gut. Allerdings würde ich gerne eine wordcloud machen, die diese Gewichte berücksichtigt.

Mein erster Versuch wäre, die Gewichte bei der Erstellung der Term Document Matrix zu verwenden.

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

Aber dann bekomme ich:

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

Ist das überhaupt möglich?

+0

Sie brauchen nicht "Beispiel" für die "Geschlecht" Spalten in Ihrem Beispiel. 'data.frame (Geschlecht = 1, ...'tue –

+0

Sie könnten möglicherweise die [inverse Dokumenthäufigkeit (idf)] (https://en.wikipedia.org/wiki/Tf%E2%80%93idf) verwenden, um den Begriff Frequenzen zu gewichten. Oder teilen Sie die Häufigkeit der Häufigkeit für jedes Geschlecht durch die Anzahl der Umfragen von jedem Geschlecht. – emilliman5

+0

Yeah, @ emilliman5, es war so etwas, woran ich auch dachte. Nur nicht sicher, wie ich es programmieren würde. Vermutlich muss ich mit dem TM-Paket herumprobieren, das eine Funktion zum Spezifizieren von Gewichten hat. Da die Gewichte auch Dinge wie politische Voreingenommenheit, Alter usw. betrachten können, suche ich nach einer ausgefeilteren Methode. – FilipW

Antwort

0

Ich kann noch nicht kommentieren, so dass ich die Antwort benutzen, um Ihre Frage zu kommentieren:

Sie könnten in dem R-Paket stm (strukturierte Themenmodelle) interessiert sein. Es bietet Möglichkeiten, latente Themen zu Meta-Variablen (kontinuierlich und/oder diskret) abzuleiten.

können Sie verschiedene Arten von Plots erzeugen, um zu prüfen, wie Metavariablen beeinflussen

a) die ausgewählten Themen abhängig,

b) die bevorzugten Worte in ein Thema,

c) und einige mehr :)

Einige Links, wenn Sie interessiert sind:

Paper describing the R package

R documentation

Some more Papers < - das ist eine wirklich gute Sammlung, wenn Sie in das Thema etwas mehr tauchen wollen!

+0

Danke für den Tipp. Interessantes Paket. Wenn ich mich jedoch richtig erinnere, bietet das TM-Paket auch die Möglichkeit, Meta-Variablen zu speichern, trotzdem ist die stm-Modellierung interessant. Trotzdem, nicht wirklich das, wonach ich suche. In seiner einfachsten Form bin ich daran interessiert, jedem Begriff Häufigkeitsgewichte zu geben, die auf Metavariablen basieren. – FilipW

Verwandte Themen