2011-09-02 27 views
13

Questa domanda è legata a due domande differenti ho chiesto in precedenza:Plot matrice ponderata in frequenza

1) Reproduce frequency matrix plot

2) Add 95% confidence limits to cumulative plot

desidero riprodurre questo trama in R: boringmatrix

Sono arrivato fino a questo punto, utilizzando il codice sotto l'immagine: multiplot

#Set the number of bets and number of trials and % lines 
numbet <- 36 
numtri <- 1000 
#Fill a matrix where the rows are the cumulative bets and the columns are the trials 
xcum <- matrix(NA, nrow=numbet, ncol=numtri) 
for (i in 1:numtri) { 
x <- sample(c(0,1), numbet, prob=c(5/6,1/6), replace = TRUE) 
xcum[,i] <- cumsum(x)/(1:numbet) 
} 
#Plot the trials as transparent lines so you can see the build up 
matplot(xcum, type="l", xlab="Number of Trials", ylab="Relative Frequency", main="", col=rgb(0.01, 0.01, 0.01, 0.02), las=1) 

La mia domanda è: Come posso riprodurre il grafico superiore in un passaggio, senza tracciare più campioni?

Grazie.

+0

Nonostante il fatto che avessi in mente un grafico più deterministico, ho pensato che il grafico con ponderazione della trasparenza fosse migliore per illustrare la natura statistica di questa domanda. Suppongo che potrebbe essere stato delineato da: 'lines (6:36, 6/(6:36), lty = 3)' per mostrare che le possibilità estreme.) –

+0

@DWin Stranamente sto sbattendo la testa cercando di creare una sorta di heatmap di densità (o hexbin) quindi è più simile alla versione con peso trasparente. Se hai una buona idea di come crearlo, posso fare una nuova domanda? Stavo pensando a qualcosa come [questo] (http://www.actualanalytics.com/density-plot-heatmap-using-r-a58). –

+0

Questo link non funziona per me al momento, ma ho imparato molto dalle tue domande quindi ti incoraggio a chiedere di più. –

risposta

6

È possibile produrre questa trama ...

enter image description here

... utilizzando questo codice:

boring <- function(x, occ) occ/x 

boring_seq <- function(occ, length.out){ 
    x <- seq(occ, length.out=length.out) 
    data.frame(x = x, y = boring(x, occ)) 
} 

numbet <- 31 
odds <- 6 
plot(1, 0, type="n", 
    xlim=c(1, numbet + odds), ylim=c(0, 1), 
    yaxp=c(0,1,2), 
    main="Frequency matrix", 
    xlab="Successive occasions", 
    ylab="Relative frequency" 
    ) 

axis(2, at=c(0, 0.5, 1))  

for(i in 1:odds){ 
    xy <- boring_seq(i, numbet+1) 
    lines(xy$x, xy$y, type="o", cex=0.5) 
} 

for(i in 1:numbet){ 
    xy <- boring_seq(i, odds+1) 
    lines(xy$x, 1-xy$y, type="o", cex=0.5) 
} 
+1

Ciò aiuta davvero. Ho battuto la testa contro un muro di mattoni per giorni e ora, con una scadenza incombente. Ora posso andare avanti con alcune cose. :) –

3

È inoltre possibile utilizzare il metodo di Koshke, limitando le combinazioni di valori da quelli con s < 6 e alla richiesta di Andrie hanno aggiunto la condizione sulla differenza tra Ps $ n e ps $ s per ottenere una configurazione "appuntita".

ps <- ldply(0:35, function(i)data.frame(s=0:i, n=i)) 
plot.new() 
plot.window(c(0,36), c(0,1)) 
apply(ps[ps$s<6 & ps$n - ps$s < 30, ], 1, function(x){ 
    s<-x[1]; n<-x[2]; 
    lines(c(n, n+1, n, n+1), c(s/n, s/(n+1), s/n, (s+1)/(n+1)), type="o")}) 
axis(1) 
axis(2) 
lines(6:36, 6/(6:36), type="o") 
# need to fill in the unconnected points on the upper frontier 

Resulting plot (version 2)

+0

Molto interessante. Grazie. –

+0

Tranne che il numero di prove non è limitato a 31, come nella domanda originale. (Confronta la forma dei grafici sul lato destro.) – Andrie

+0

Oh. Tutto apposto. Aggiungerà la condizione logica per ottenere ciò. –

0

Matrix ponderato in frequenza è chiamata anche posizione del peso Matrix (in bioinformatica). Può essere rappresentato sotto forma di sequence logo. Questo è almeno il modo in cui io grafico la matrice della frequenza ponderata.

library(cosmo) 
data(motifPWM); attributes(motifPWM) # Loads a sample position weight matrix (PWM) containing 8 positions. 
plot(motifPWM) # Plots the PWM as sequence logo.