2013-04-10 5 views
7

Ich versuche, eine optimale Matching-Analyse mit TraMineR durchzuführen, aber es scheint, dass ich ein Problem mit der Größe des Datasets habe. Ich habe einen großen Datensatz von europäischen Ländern, der Beschäftigungszauber enthält. Ich habe mehr als 57.000 Sequenzen, die 48 Einheiten lang sind und aus 9 verschiedenen Zuständen bestehen. Um eine Vorstellung von der Analyse zu bekommen, hier ist der Kopf des Sequenzobjekts employdat.sts:Problem mit großen Daten (?) Während der Berechnung von Sequenzabständen mit TraMineR

[1] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-... 
[2] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-... 
[3] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-... 
[4] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-... 
[5] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-... 
[6] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-... 

In einem kürzeren SPS-Format, das wie folgt lautet:

Sequence    
[1] "(EF,48)"    
[2] "(EF,48)"    
[3] "(ST,48)"    
[4] "(ST,36)-(MS,3)-(EF,9)" 
[5] "(EF,48)"    
[6] "(ST,24)-(EF,24)" 

diese Sequenz Objekt Nach dem Passieren zur seqdist() Funktion, erhalte ich die folgende Fehlermeldung:

employdat.om <- seqdist(employdat.sts, method="OM", sm="CONSTANT", indel=4)  
[>] creating 9x9 substitution-cost matrix using 2 as constant value 
[>] 57160 sequences with 9 distinct events/states 
[>] 12626 distinct sequences 
[>] min/max sequence length: 48/48 
[>] computing distances using OM metric 
Error in .Call(TMR_cstringdistance, as.integer(dseq), as.integer(dim(dseq)), : negative length vectors are not allowed 

Ist dieser Fehler auf die große Anzahl von disti bezogen nct, lange Sequenzen? Ich benutze eine x64-Maschine mit 4GB RAM und ich habe es auch auf einer Maschine mit 8-GB-RAM versucht, die die Fehlermeldung reproduziert. Kennt jemand einen Weg, um diesen Fehler zu beheben? Darüber hinaus funktionierte die Analyse für jedes einzelne Land mit der gleichen Syntax mit einem Index für das Land gut und lieferte aussagekräftige Ergebnisse.

+0

Bitte Code anzeigen – sashkello

Antwort

8

Ich habe diesen Fehlercode nie zuvor gesehen, aber es könnte gut wegen Ihrer hohen Anzahl von Sequenzen sein. Es gibt mindestens zwei Dinge, die Sie versuchen können, zu tun:

  • Gebrauch das Argument "full.matrix=FALSE" in seqdist (siehe Hilfeseite). Es berechnet nur die untere Dreiecksmatrix und gibt ein "dist" -Objekt zurück, das direkt in der hclust-Funktion verwendet werden kann.
  • Sie können identische Sequenzen aggregieren (Sie haben nur 12626 verschiedene Sequenzen anstelle von 57160 Sequenzen), berechnen Sie die Abstände, clustern Sie die Sequenzen mithilfe von Gewichten (die entsprechend der Häufigkeit der einzelnen Sequenzen im Dataset berechnet werden) und dann Fügen Sie das Clustering zu Ihrem ursprünglichen Dataset zurück. Dies kann mit der Bibliothek WeightedCluster ganz einfach gemacht werden. Der erste Anhang des WeightedCluster Manuals bietet eine Schritt-für-Schritt-Anleitung, um dies zu tun (das Verfahren ist auch auf der Webseite http://mephisto.unige.ch/weightedcluster beschrieben).

Hoffe das hilft.

+0

Leider löst das Argument "full.matrix = FALSE" das Problem nicht. Aber ich werde versuchen, die gewichtete Cluster-Methode, das scheint in der Tat ein sehr vielversprechender Ansatz, wie es die Anzahl der Zeilen und Spalten um mehr als 4 Mal reduziert. –

+1

Die Aggregat- und Gewichtungsfunktion des 'WeightedCluster'-Pakets funktionierte für mein Dataset. Die Beschreibung im Anhang des Handbuchs ist in der Tat sehr nützlich. Vielen Dank! –

2

Eine einfache Lösung, die oft gut funktioniert, besteht darin, nur eine Stichprobe Ihrer Daten zu analysieren. Zum Beispiel

employdat.sts <- employdat.sts[sample(nrow(employdat.sts),5000),] 

würde eine zufällige Stichprobe von 5000 Sequenzen extrahieren. Das Erforschen solch einer wichtigen Probe sollte weitgehend ausreichend sein, um die Eigenschaften Ihrer Sequenzen einschließlich ihrer Diversität herauszufinden.

Um die Repräsentativität zu verbessern, können Sie sogar auf eine geschichtete Stichprobe zurückgreifen (z. B. nach dem ersten oder letzten Status oder nach einigen Kovariaten, die in Ihrem Datensatz verfügbar sind). Da Sie den ursprünglichen Datensatz zur Hand haben, können Sie das Stichprobenentwurfsdesign vollständig steuern.

Verwandte Themen