Frage

Ich lese eine spärliche Tabelle aus einer Datei, die wie folgt aussieht:

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

Hinweis Zeilenlängen unterschiedlich sind.

Jede Zeile stellt eine einzige Simulation. Der Wert in der i-ten Spalte in jeder Zeile sagt, wie oft Wert auf i-1 wurde in dieser Simulation beobachtet. Zum Beispiel in der ersten Simulation (erste Reihe), bekamen wir ein einzelnes Ergebnis mit dem Wert ‚0‘ (erste Spalte), 7 Ergebnisse mit dem Wert ‚2‘ (dritter Spalte) etc.

Ich mag eine durchschnittliche kumulative Verteilungsfunktion (CDF) für alle die Simulationsergebnisse erstellen, so dass ich später verwenden könnte einen empirischen p-Wert für echte Ergebnisse zu berechnen.

Um dies zu tun, kann ich zunächst jede Spalte zusammenzufassen, aber ich brauche Nullen für die undef Spalten zu nehmen.

Wie kann ich eine solche Tabelle mit unterschiedlichen Zeilenlängen lesen? Wie Summe I Spalten ersetzen ‚undef‘ Werte mit 0' up? Und schließlich, wie erstelle ich die CDF? (Ich kann dies manuell tun, aber ich denke, es gibt einige Paket ist, die das tun können).

War es hilfreich?

Lösung

Damit werden die Daten eingelesen:

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)

Resultat:

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

Wenn die Daten in einer Datei sind, geben Sie die Dateinamen statt dat. Dieser Code setzt voraus, dass es maximal 29 Spalten, wie pro die Daten, die Sie geliefert. Ändern Sie den 29 die realen Daten zu entsprechen.

Wir bekommen die Spaltensummen mit

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

die ecdf() Funktion erzeugt die ECDF Sie wollten,

df.ecdf <- ecdf(df.csum)

und wir können sie zeichnen die plot() Methode:

plot(df.ecdf, verticals = TRUE)

Andere Tipps

Sie können die ecdf() verwenden (in der Basis R) oder Ecdf() (aus dem Hmisc Paket) Funktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top