Как построить два кумулятивных частотных графика вместе - PullRequest
1 голос
/ 19 марта 2010

У меня есть данные, которые выглядят так:

#val  Freq1 Freq2
0.000 178 202
0.001 4611 5300
0.002 99 112
0.003 26 30
0.004 17 20
0.005 15 20
0.006 11 14
0.007 11 13
0.008 13 13
...many more lines..

Полную информацию можно найти здесь: http://dpaste.com/173536/plain/

То, что я намерен сделать, это иметь накопительный график с "val" в качестве оси x с "Freq1" и "Freq2" в качестве ось Y, график вместе на 1 графике.

У меня есть этот код. Но он создает два графика вместо 1.

dat <- read.table("stat.txt",header=F);
val<-dat$V1
freq1<-dat$V2
freq2<-dat$V3

valf1<-rep(val,freq1)
valf2<-rep(val,freq2)

valfreq1table<- table(valf1)
valfreq2table<- table(valf2)
cumfreq1=c(0,cumsum(valfreq1table))
cumfreq2=c(0,cumsum(valfreq2table))

plot(cumfreq1, ylab="CumFreq",xlab="Loglik Ratio")
lines(cumfreq1)
plot(cumfreq2, ylab="CumFreq",xlab="Loglik Ratio")
lines(cumfreq2)

Какой правильный подход к этому?

Ответы [ 3 ]

6 голосов
/ 19 марта 2010
data <- read.table("http://dpaste.com/173536/plain/", header = FALSE)

sample1 <- unlist(apply(as.matrix(data),1,function(x) rep(x[1],x[2])))
sample2 <- unlist(apply(as.matrix(data),1,function(x) rep(x[1],x[3])))

plot(ecdf(sample1), verticals=TRUE, do.p=FALSE,
main="ECDF plot for both samples", xlab="Scores", 
ylab="Cumulative Percent",lty="dashed")

lines(ecdf(sample2), verticals=TRUE, do.p=FALSE,
col.h="red", col.v="red",lty="dotted")

legend(100,.8,c("Sample 1","Sample 2"),
col=c("black","red"),lty=c("dashed","dotted"))
3 голосов
/ 19 марта 2010

Попробуйте функцию ecdf() в базе R --- которая использует plot.stepfun(), если память служит --- или функцию Ecdf() в Hmisc Фрэнка Харрелла. Вот пример из help(Ecdf), который использует переменную группировки для отображения двух ecdf-файлов на одном графике:

 # Example showing how to draw multiple ECDFs from paired data
 pre.test <- rnorm(100,50,10)
 post.test <- rnorm(100,55,10)
 x <- c(pre.test, post.test)
 g <- c(rep('Pre',length(pre.test)),rep('Post',length(post.test)))
 Ecdf(x, group=g, xlab='Test Results', label.curves=list(keys=1:2))
1 голос
/ 19 марта 2010

Просто для записи, вот как вы можете получить несколько строк на одном графике «вручную»:

plot(cumfreq1, ylab="CumFreq",xlab="Loglik Ratio", type="l") 
          # or type="b" for lines and points
lines(cumfreq2, col="red") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...