Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 Laboratorio
 Bioinformatica e Biostatistica
 confronto su valori dello stesso vettore
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

BabyBlue
Nuovo Arrivato



22 Messaggi

Inserito il - 24 dicembre 2013 : 09:50:50  Mostra Profilo  Visita l'Homepage di BabyBlue Invia a BabyBlue un Messaggio Privato  Rispondi Quotando
Ciao a tutti!Avrei un problema: lo semplifico. Dovrei (io uso R) costruire un indicatore su pazienti che hanno avuto una certa diagnosi solo una volta nel corso dell'anno. Il dataset (annuale) ha un record per ogni accesso all'ospedale (quindi non un record per individuo).Dovrei quindi individuare nel vettore della diagnosi, quelli che non hanno avuto altre diagnosi di quella malattia nel corso dell'anno.Dovrei fare un ciclo for penso...però non so come fare!!Avreste qualche suggerimento?
Grazie e buon natale a tutti!!

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 24 dicembre 2013 : 11:47:07  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Se stai usando R e ti ritrovi a dire "dovrei fare un ciclo for" molto probabilmente sei sulla cattiva strada . Mi sembra che ciò che vuoi ottenere sia facilmente "vettorializzabile" ed R è molto più veloce ad agire sui vettori.

Tuttavia per darti una risposta più precisa dovresti forse darci un esempio di come sono fatti i tuoi dati (es. puoi allegare il dataset, oppure crearne uno finto se non vuoi pubblicare dati sensibili? In alternativa puoi incollare l'output di dput(dataset), dove dataset è il nome della variabile che contiene i tuoi dati)


Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

BabyBlue
Nuovo Arrivato



22 Messaggi

Inserito il - 27 dicembre 2013 : 09:21:41  Mostra Profilo  Visita l'Homepage di BabyBlue Invia a BabyBlue un Messaggio Privato  Rispondi Quotando
Innanzitutto..grazie!Non posso allegare il dataset, e non ho mica capito la seconda cosa che mi hai detto???
Ti faccio un tracciato record esempio, dimmi se si capisce:
DATA UTENTE DIAGNOSI
22/10/2011 223344 1
23/10/2011 224455 2
24/10/2011 223344 6
25/11/2011 224455 2
Io uso R perchè ho sempre usato quello, ma una volta capito come fare dovrei provare a farlo anche in Stata...ma a quello ci pensiamo dopo!!
Ho semplificato molto il problema, ma giusto per sciogliere questo nodo qui da cui non esco..
Devo vedere, ad es. quando la diagnosi ==2 di individuare solo i casi che non sono preceduti da un accesso in ospedale con la stessa diagnosi nel corso dell'anno (poi anche nel corso del mese, ecc, ma la logica è la stessa!). Ho un db per anno, dovrò attaccarli per il check sull'anno di distanza.GRAZIE!
Torna all'inizio della Pagina

Glubus
Utente Junior

pinolo



156 Messaggi

Inserito il - 27 dicembre 2013 : 10:46:01  Mostra Profilo  Visita l'Homepage di Glubus Invia a Glubus un Messaggio Privato  Rispondi Quotando
Scusa ma chiedi due cose diverse:
prima chiedi di identificare i soggetti con solo un accesso con una certa diagnosi per anno/dataset, poi chiedi di identificare "i casi che non sono preceduti da un accesso in ospedale con la stessa diagnosi nel corso dell'anno", il che non fa chiarezza su cosa vuoi.
Comunque, nel primo caso:
#leggiamo i dati
> data<-read.table(textConnection(
+ "DATA UTENTE DIAGNOSI
+ 22/10/2011 223344 1
+ 23/10/2011 224455 2
+ 24/10/2011 223344 6
+ 25/11/2011 224455 2"), h=T)
#contiamo le diagnosi per la condizione "1" per soggetto
> ndiagn<-with(data, tapply(DIAGNOSI==1, list(UTENTE), sum))
> ndiagn # 1 per il soggetto 223344 e 0 per il 224455
223344 224455
1 0
#selezioniamo il nome del soggetto con una diagnosi della condizione 1
> (solo1<-names(ndiagn[ndiagn==1]) )
[1] "223344"
# e creiamo un vettore che identifica i record di quel tale soggetto
> data$diag1.1<-data$UTENTE %in% solo1
>
> data
DATA UTENTE DIAGNOSI diag1.1
1 22/10/2011 223344 1 TRUE
2 23/10/2011 224455 2 FALSE
3 24/10/2011 223344 6 TRUE
4 25/11/2011 224455 2 FALSE


dovrebbe funzionare anche con più di due soggetti :)
Fammi sapere se era quello che cercavi. Su come farlo in STATA poi, ...



Citazione:
Messaggio inserito da BabyBlue

Innanzitutto..grazie!Non posso allegare il dataset, e non ho mica capito la seconda cosa che mi hai detto???
Ti faccio un tracciato record esempio, dimmi se si capisce:
DATA UTENTE DIAGNOSI
22/10/2011 223344 1
23/10/2011 224455 2
24/10/2011 223344 6
25/11/2011 224455 2
Io uso R perchè ho sempre usato quello, ma una volta capito come fare dovrei provare a farlo anche in Stata...ma a quello ci pensiamo dopo!!
Ho semplificato molto il problema, ma giusto per sciogliere questo nodo qui da cui non esco..
Devo vedere, ad es. quando la diagnosi ==2 di individuare solo i casi che non sono preceduti da un accesso in ospedale con la stessa diagnosi nel corso dell'anno (poi anche nel corso del mese, ecc, ma la logica è la stessa!). Ho un db per anno, dovrò attaccarli per il check sull'anno di distanza.GRAZIE!

Torna all'inizio della Pagina

BabyBlue
Nuovo Arrivato



22 Messaggi

Inserito il - 27 dicembre 2013 : 13:37:57  Mostra Profilo  Visita l'Homepage di BabyBlue Invia a BabyBlue un Messaggio Privato  Rispondi Quotando
Grazie..!In effetti non mi sono spiegata bene, prob. perchè quello che devo fare è un casino, io ho cercato di presentare solo il "pezzetto" del problema che mi da dubbi, per cui non riesco a spiegarmi bene(d'altronde postare tutto l'indicare che devo fare oltre a essere lungo...non serve nemmeno perchè ci sono pezzi che riesco a fare,per cui non vengo a tediarvi per niente! ).
Allora,quello che mi proponi mi va bene per il caso semplice:solo un db,annuale, conto il numero di casi presenti una volta sola. (e sì, mi servono i casi-gli accessi!gli individui mi servono solo per collegarli al caso precedente temporalmente).
Ma se io devo controllare anche che i soggetti entrati il 1-1-2011 non abbiano ricoveri di quel tipo entro l'anno precente devo attaccarci anche il db 2010 e non posso più solamente contarli, ma devo fare un check sulla differenza delle date. Anche perchè il secondo step è individuare quelli che non hanno avuto ricoveri nel mese precedente alla data di ricovero. Rigrazie...comunque già con questo comando (ndiagn<-with(data, tapply(DIAGNOSI==1, list(UTENTE), sum))) mi hai aperto un mondo!
Torna all'inizio della Pagina

BabyBlue
Nuovo Arrivato



22 Messaggi

Inserito il - 31 dicembre 2013 : 10:50:10  Mostra Profilo  Visita l'Homepage di BabyBlue Invia a BabyBlue un Messaggio Privato  Rispondi Quotando
Ho un po' in mente cosa vorrei fare...non so farlo. Vorrei mettere per ogni idpaziente una sorta di variabile contatore che mi conti da 1..n per ognuno il n°di accessi con diagnosi di quel tipo.Esempio
DATA UTENTE DIAGNOSI CONTATORE_DIAG2
22/10/2011 223344 1 0
23/10/2011 224455 2 1
24/10/2011 223344 6 0
25/11/2011 224455 2 2
In modo da fare un ciclo (che non so come fare) per confrontare la data di ogni ogni accesso con diagnosi 2 con quelle precedenti per vedere se sono >rispettivamente a 1 anno e 30 giorni... ha senso? grazie e buon fine anno!!
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 31 dicembre 2013 : 12:11:37  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Un paio di considerazioni:

Ad es.:

# Creiamo una serie di dati
data <- c(rep("2011/10/22", 2), "2011/10/23", rep("2011/10/24", 5),
          "2011/10/25", rep("2011/10/26", 3))
utente <- c(223344,  223345,  223341,  223341, 223342, 223348, 223344,
            223340,  223355,  223344,  223348, 223366)
diagnosi <- c(1, 2, 6, 6, 4, 2, 2, 3, 7, 2, 3, 1)

df <- data.frame(data = data, utente = utente, diagnosi = diagnosi)


Che ci dà questa serie di dati


         data utente diagnosi
1  2011/10/22 223344        1 <-
2  2011/10/22 223345        2
3  2011/10/23 223341        6
4  2011/10/24 223341        6
5  2011/10/24 223342        4
6  2011/10/24 223348        2
7  2011/10/24 223344        2 <-
8  2011/10/24 223340        3
9  2011/10/25 223355        7
10 2011/10/26 223344        2 <-
11 2011/10/26 223348        3
12 2011/10/26 223366        1


Ad es. il paziente 223344 ha 3 ricoveri, 2 con diagnosi 2 e uno con diagnosi 1 (come indicato dalle frecce)

Se facciamo:


tb <- table(df$utente, df$diagnosi)
tb

         1 2 3 4 6 7
  223340 0 0 1 0 0 0
  223341 0 0 0 0 2 0
  223342 0 0 0 1 0 0
  223344 1 2 0 0 0 0
  223345 0 1 0 0 0 0
  223348 0 1 1 0 0 0
  223355 0 0 0 0 0 1
  223366 1 0 0 0 0 0


Già possiamo vedere il numero di visite per ciascun paziente


num.visite <- rowSums(tb)

num.visite

   223340 223341 223342 223344 223345 223348 223355 223366 
        1      2      1      3      1      2      1      1 


Possiamo vedere chi ha avuto più di una visita con la stessa diagnosi
Troviamo innanzitutto gli id degli elementi della tabella che sono > 1

ids <- which(tb>1)


Gli ID (12 e 34) sono difficili da comprendere così come sono... ma possiamo trovare i labels associati


# col e row trovano il numero della colonna/riga associate ai vari id e
# poi li usiamo questi per indicizzare nomi di colonne e di righe

pazienti <- data.frame(utente=rownames(tb)[row(tb)[ids]],
                       diagnosi=colnames(tb)[col(tb)[ids]])

  utente diagnosi
1 223344        2
2 223341        6


Poi, possiamo vedere quando queste visite sono state fatte


# Applichiamo una funzione a tutti i pazienti con piu' di una diagnosi
visite <- apply(pazienti, 1, function(p)
  {
  # Troviamo gli id corrispondenti alla coppia utente/diagnosi
  ids <- which(df$utente==p[1] & df$diagnosi==p[2])
  # Troviamo le entries del database corrispondenti
  res <- df[ids,]
  # Restituiamo il valore
  res
  })

visite
[[1]]
         data utente diagnosi
7  2011/10/24 223344        2
10 2011/10/26 223344        2

[[2]]
        data utente diagnosi
3 2011/10/23 223341        6
4 2011/10/24 223341        6


Apply ci restituisce una lista con le informazioni richieste (nota che per accedere agli elementi della lista devi usare le doppie quadre, ad es. visite[[1]])

Insomma, poi puoi automatizzare il tutto a seconda di cosa vuoi vedere esattamente, ma spero che questi esempi ti possano essere d'aiuto.

Infine, altra funzione che potre interessante potrebbe essere aggregate, anche se a volte è più complicato usarla...

Ad es, qualcosa del tipo:

aggregate(df$data, by=list(diagnosi=df$diagnosi, utente=df$utente), FUN=length)

   diagnosi utente x
1         3 223340 1
2         6 223341 2
3         4 223342 1
4         1 223344 1
5         2 223344 2
6         2 223345 1
7         2 223348 1
8         3 223348 1
9         7 223355 1
10        1 223366 1

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina