2011-09-02 17 views
13

Câu hỏi này có liên quan đến hai câu hỏi khác nhau tôi đã yêu cầu trước đó:Lô ma trận tần số trọng

1) Reproduce frequency matrix plot

2) Add 95% confidence limits to cumulative plot

Tôi muốn để tái tạo âm mưu này vào R: boringmatrix

Tôi đã đạt được điều này, sử dụng mã bên dưới hình ảnh: 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) 

Câu hỏi của tôi là: Làm cách nào để tái tạo lô trên cùng trong một lần, mà không vẽ nhiều mẫu?

Cảm ơn.

+0

Mặc dù thực tế là bạn đã có đồ họa xác định đường đi nhiều hơn, tôi nghĩ biểu đồ có độ trong suốt của bạn tốt hơn để minh họa tính chất thống kê của câu hỏi này. Tôi cho rằng nó có thể được vạch ra bởi: 'dòng (6:36, 6/(6:36), lty = 3)' để chỉ ra những khả năng cực đoan.) –

+0

@DWin Vui vẻ đủ Tôi đang đập đầu cố gắng tạo ra một số loại bản đồ nhiệt độ mật độ (hoặc hexbin) vì vậy nó giống như phiên bản có trọng số trong suốt. Nếu bạn có ý tưởng hay về cách tạo nó, tôi có thể hỏi một câu hỏi mới? Tôi đã nghĩ về một cái gì đó như [this] (http://www.actualanalytics.com/density-plot-heatmap-using-r-a58). –

+0

Liên kết đó hiện không hoạt động cho tôi, nhưng tôi đã học được rất nhiều từ câu hỏi của bạn vì vậy tôi khuyến khích bạn hỏi thêm. –

Trả lời

6

Bạn có thể tạo ra âm mưu này ...

enter image description here

... bằng cách sử dụng mã này:

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

Điều đó thực sự hữu ích. Tôi đã đập đầu vào một bức tường gạch trong nhiều ngày nay, và với một thời hạn hiện ra lờ mờ. Bây giờ tôi có thể tiếp tục với một số thứ. :) –

3

Bạn cũng có thể sử dụng phương pháp Koshke của, bằng cách giới hạn sự kết hợp của các giá trị để những người có s < 6 và theo yêu cầu của Andrie, thêm điều kiện về sự khác biệt của Ps $ n và ps $ s để có được cấu hình "nhọn".

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

Rất thú vị. Cảm ơn. –

+0

Ngoại trừ số lượng thử nghiệm không giới hạn ở 31, như trong câu hỏi ban đầu. (So ​​sánh hình dạng của biểu đồ ở cạnh bên phải.) – Andrie

+0

Oh. Ổn thỏa. Sẽ thêm điều kiện hợp lý để thực hiện điều đó. –

0

Weighted Tần Matrix còn được gọi là vị trí cân Matrix (trong tin sinh học). Nó có thể được thể hiện dưới dạng sequence logo. Điều này ít nhất là cách tôi vẽ đồ thị tần số có trọng số.

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