2016-04-03 16 views
1

Ich bin neu bei R. Ich war über Stack Overflow und suche vielleicht nicht richtig nach der Antwort, die ich möchte.Wahrscheinlichkeitsverteilung über die Zeit?

Ich habe eine Matrix mit eindeutigen dyadischen Beziehungen als Zeilen und Jahre als Spalten. Die Zellen sind mit einer 0 besetzt, wenn die beiden Personen in diesem Jahr nicht interagieren, und eine 1, wenn sie es taten.

Ich versuche, ein Prozent für jede Zelle zu berechnen - die Anzahl der Male 1 auftritt relativ zu der Anzahl der Einträge nach dem ersten Auftreten von 1. Umgangssprachlich wäre dies nur wie oft zwei Menschen jedes Jahr seit ihrer Begegnung interagiert haben .

Das erste Auftreten von 1 in einer Zeile wäre immer 100%. Zum Beispiel, Reihe B aus dem Beispiel unten:

V1 V2 V3 V4 
A 0 0 1 0 
B 1 1 0 0 

Wird

100 100 66 50 

ich die kumulative Summe für jede Zelle der Matrix so weit bekam

als Berechnung
data <- matrix(sample(0:1,5*4,rep=T),4) 
test<-t(apply(data,1,cumsum)) 

Und dann meine Die Idee war, eine Funktion wie die folgende zu erstellen, aber ich bleibe bei dem Ausdruck, der für den Nenner verwendet werden soll (unten wird nur die Anzahl der Einträge vor dem ersten Auftreten von einem entfernt). Ich weiß nicht genau, wie man zukünftige Fälle abschneidet, oder referenziere direkt den Spaltenindex einer Matrix.

mm<-function(x){(x)/(ncol(data)-(which(x>0)[1]))} 
tmp_int<-apply(data, 1:2, mm) 

Oder gibt es eine viel einfachere Möglichkeit, dies zu tun? Ich versuchte, die ecdf Funktion zu benutzen, aber es gab NA zurück.

Vielen Dank.

+0

Sind nicht teilen 't (anwenden (Daten, 1, cumsum)/(1: ncol (daten))) * 100' was du suchst? – nicola

Antwort

1
data <- matrix(sample(0:1, 5 * 4, rep = TRUE), 4) 

f <- function(m) t(apply(m, 1, cumsum)) 
f(data)/(f(f(data) >= 1) + (f(data) == 0)) * 100 
#  [,1] [,2]  [,3]  [,4] [,5] 
# [1,] 100 50 66.66667 75.00000 60 
# [2,] 100 100 66.66667 50.00000 40 
# [3,] 0 100 50.00000 33.33333 25 
# [4,] 100 50 66.66667 50.00000 60 

Hier f ist das, was Sie bereits haben, f(f(data) >= 1) fast geeignete Nenner für die elementweise Division gibt, während f(data) == 0 stellt sicher, dass wir durch 0.

Verwandte Themen