2013-04-10 8 views
7

Sto provando a eseguire un'analisi di corrispondenza ottimale usando TraMineR ma sembra che sto incontrando un problema con la dimensione del set di dati. Ho un grande set di dati di paesi europei che contiene periodi di occupazione. Ho più di 57.000 sequenze lunghe 48 unità e composte da 9 stati distinti. Per avere un'idea dell'analisi, ecco la testa dell'oggetto sequenza employdat.sts:Problema con big data (?) Durante il calcolo delle distanze di sequenza usando 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 un formato SPS breve, questo è formulato come segue:

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)" 

Superato questo oggetto sequenza alla funzione seqdist(), ricevo il seguente messaggio di errore:

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 

È questo errore relativo al numero enorme di distinta s nct, lunghe sequenze? Sto usando una macchina x64 con 4 GB di RAM e l'ho anche provato su una macchina con 8 GB di RAM che riproduceva il messaggio di errore. Qualcuno conosce un modo per affrontare questo errore? Inoltre, le analisi per ogni singolo paese che utilizzano la stessa sintassi con un indice per il paese hanno funzionato bene e hanno prodotto risultati significativi.

+0

Si prega di mostrare il codice – sashkello

risposta

8

Non ho mai visto questo codice di errore prima, ma potrebbe essere dovuto al tuo alto numero di sequenze. Ci sono almeno due cose che puoi provare a fare:

  • utilizzare l'argomento "full.matrix=FALSE" in seqdist (vedere la pagina di aiuto). Calcolerà solo la matrice triangolare inferiore e restituirà un oggetto "dist" che può essere utilizzato direttamente nella funzione hclust.
  • È possibile aggregare sequenze identiche (si hanno solo 12626 sequenze distinte invece di 57160 sequenze), calcolare le distanze, raggruppare le sequenze usando pesi (che vengono calcolate in base al numero di volte in cui ciascuna sequenza distinta appare nel set di dati) e quindi aggiungere il clustering al set di dati originale. Questo può essere fatto abbastanza facilmente usando la libreria WeightedCluster. La prima appendice del manuale WeightedCluster fornisce una guida passo passo per farlo (la procedura è descritta anche nella pagina web http://mephisto.unige.ch/weightedcluster).

Spero che questo aiuti.

+0

Sfortunatamente l'argomento "full.matrix = FALSE" non risolve il problema. Ma proverò con il metodo del cluster ponderato, questo sembra davvero un approccio molto promettente in quanto riduce il numero di righe e colonne di oltre 4 volte. –

+1

L'utilizzo della funzione di aggregazione e ponderazione del pacchetto 'WeightedCluster' ha funzionato per il mio set di dati. La descrizione nell'appendice del manuale è davvero molto utile. Grazie! –

2

Una soluzione semplice che spesso funziona bene è analizzare un campione solo dei dati. Per esempio

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

estrarrebbe un campione casuale di 5000 sequenze. Esplorare un campione così importante dovrebbe essere in gran parte sufficiente per scoprire le caratteristiche delle tue sequenze, compresa la loro diversità.

Per migliorare la rappresentatività, è persino possibile ricorrere a un campionamento stratificato (ad esempio, in base al primo o all'ultimo stato o tramite alcune covariate disponibili nel set di dati). Poiché hai a portata di mano il set di dati originale, puoi controllare completamente il progetto di campionamento casuale.

Problemi correlati