Domanda

Sto leggendo un tavolo sparse da un file che assomiglia a:

1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1  0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1

Nota fila lunghezze sono diverse.

Ogni riga rappresenta una singola simulazione. Il valore nella colonna i-esima in ogni riga dice quante volte il valore di i-1 è stata osservata in questa simulazione. Ad esempio, nella prima simulazione (prima riga), abbiamo ottenuto un singolo risultato con il valore '0' (prima colonna), 7 risultati con valore '2' (terza colonna), ecc.

Vorrei creare una funzione di media di distribuzione cumulativa (CDF) per tutti i risultati della simulazione, così ho potuto poi usarlo per calcolare un valore di p empirica per veri risultati.

Per fare questo posso prima riassumere ogni colonna, ma ho bisogno di prendere zeri per le colonne undef.

Come faccio a leggere una tabella con diverse lunghezze di fila? Come posso riassumere colonne sostituendo 'indefinito' valori con 0' ? E infine, come faccio a creare il CDF? (Posso farlo manualmente, ma credo che ci sia qualche pacchetto che può farlo).

È stato utile?

Soluzione

Questa leggerà i dati in:

dat <- textConnection("1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1  0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1")
df <- data.frame(scan(dat, fill = TRUE, what = as.list(rep(1, 29))))
names(df) <- paste("Val", 1:29)
close(dat)

Con conseguente:

> head(df)
  Val 1 Val 2 Val 3 Val 4 Val 5 Val 6 Val 7 Val 8 Val 9 Val 10 Val 11 Val 12
1     1     0     7     0     0     1     0     0     0      5      0      0
2     1     0     0     1     0     0     0     3     0      0      0      0
3     0     0     0     1     0     0     0     2     0      0      0      0
4     1     0     0     1     0     3     0     0     0      0      1      0
5     0     0     0     1     0     0     0     2     0      0      0      0
....

Se i dati sono in un file, fornire il nome del file, invece di dat. Questo codice presuppone che ci sono un massimo di 29 colonne, come per i dati da Lei forniti. Modificare il 29 per soddisfare i dati reali.

Otteniamo le somme delle colonne utilizzando

df.csum <- colSums(df, na.rm = TRUE)

la funzione ecdf() genera l'ECDF si voleva,

df.ecdf <- ecdf(df.csum)

e possiamo tracciare utilizzando il metodo plot():

plot(df.ecdf, verticals = TRUE)

Altri suggerimenti

È possibile utilizzare la ecdf() (nella base di R) o Ecdf() (dal Hmisc funzioni del pacchetto).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top