Question

Je lis une table clairsemée d'un fichier qui ressemble à:

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

Remarque longueurs de ligne sont différentes.

Chaque ligne représente une seule simulation. La valeur du i-ième colonne de chaque ligne indique combien de fois la valeur i-1 a été observée dans cette simulation. Par exemple, dans la première simulation (première ligne), nous avons obtenu un seul résultat avec la valeur « 0 » (première colonne), 7 résultats à valeur « 2 » (troisième colonne) etc.

Je souhaite créer une fonction de distribution cumulative moyenne (CDF) pour tous les résultats de la simulation, afin que je puisse l'utiliser plus tard pour calculer une p-valeur empirique pour les vrais résultats.

Pour ce faire, je peux d'abord résumer chaque colonne, mais je dois prendre des zéros pour les colonnes FNUD.

Comment puis-je lire une telle table avec différentes longueurs de ligne? Comment puis-je résumer des colonnes remplaçant « FNUD » valeurs avec 0' ? Et enfin, comment puis-je créer la CDF? (Je peux le faire manuellement mais je suppose qu'il ya un certain paquet qui peut le faire).

Était-ce utile?

La solution

lira les données:

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)

Entraînant:

> 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
....

Si les données sont dans un fichier, indiquez le nom de fichier au lieu de dat. Ce code suppose que il y a un maximum de 29 colonnes, selon les données fournies. Modifier la 29 en fonction des données réelles.

Nous obtenons les sommes des colonnes en utilisant

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

la fonction ecdf() génère le ECDF que vous vouliez,

df.ecdf <- ecdf(df.csum)

et nous pouvons tracer à l'aide de la méthode plot():

plot(df.ecdf, verticals = TRUE)

Autres conseils

Vous pouvez utiliser le ecdf() (en base R) ou Ecdf() (à partir du Hmisc fonctions de paquets).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top