2011-09-02 26 views
13

Esta pregunta se relaciona con dos cuestiones diferentes que han solicitado previamente:parcela matriz de frecuencia ponderada

1) Reproduce frequency matrix plot

2) Add 95% confidence limits to cumulative plot

deseo de reproducir esta parcela en I: boringmatrix

Llegué hasta aquí usando el código debajo del gráfico: 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) 

Mi pregunta es: ¿Cómo puedo reproducir la gráfica superior en una sola pasada, sin graficar múltiples muestras?

Gracias.

+0

A pesar del hecho de que había un gráfico de más trayectoria determinista en mente, pensé que su gráfico transparencia ponderado era mejor para ilustrar la naturaleza estadística de esta pregunta. Supongo que podría haber sido delineado por: 'líneas (6:36, 6/(6:36), lty = 3)' para mostrar las posibilidades extremas.) –

+0

@DWin Curiosamente ahora me estoy golpeando la cabeza tratando de crear algún tipo de mapa de calor de densidad (o hexbin) por lo que se parece más a la versión de ponderación transparente. Si tienes una buena idea de cómo crearla, ¿puedo hacerte una nueva pregunta? Estaba pensando en algo como [esto] (http://www.actualanalytics.com/density-plot-heatmap-using-r-a58). –

+0

Ese enlace no funciona para mí en este momento, pero he aprendido mucho de sus preguntas, así que lo aliento a que pregunte más. –

Respuesta

6

Puede producir esta parcela ...

enter image description here

... mediante el uso de este código:

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

Eso realmente ayuda. He estado golpeándome la cabeza contra una pared de ladrillos durante días y con una fecha límite amenazante. Ahora puedo continuar con algunas cosas. :) –

3

También puede utilizar el método de Koshke, mediante la limitación de las combinaciones de valores de aquellos con s < 6 ya pedido de Andrie agregaron la condición de la diferencia de Ps $ ny ps $ s para obtener una configuración "puntiaguda".

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

Muy interesante. Gracias. –

+0

Excepto que el número de intentos no está limitado a 31, como en la pregunta original. (Compare la forma de los gráficos en el borde derecho). – Andrie

+0

Oh. Bien. Agregará la condición lógica para lograr eso. –

0

matriz ponderada en frecuencia también es llamada Posición Peso Matrix (en bioinformática). Se puede representar en forma de sequence logo. Esto es al menos cómo trazado la matriz de frecuencia ponderada.

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