绘制以下累积频率图表图表没有问题 像这样。
library(Hmisc)
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, what="f", xlab='Test Results', label.curves=list(keys=1:2))
但我希望以“反向”累积值的形式显示图表&gt; X。 (即相当于什么=“1-f”)。
有办法吗?
除了使用Hmisc之外,R中的其他建议也非常受欢迎。
答案 0 :(得分:5)
来自Hmisc的更一般的Ecdf
函数具有what=
选项:
参数:
x: a numeric vector, data frame, or Trellis/Lattice formula what: The default is ‘"F"’ which results in plotting the fraction of values <= x. Set to ‘"1-F"’ to plot the fraction > x or ‘"f"’ to plot the cumulative frequency of values <= x.
因此,我们可以修改答案from your earlier question并添加what="1-F"
:
# 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, what="1-F", xlab='Test Results', label.curves=list(keys=1:2))
答案 1 :(得分:4)
使用Musa建议:
pre.ecdf <- ecdf(pre.test)
post.ecdf <- ecdf(post.test)
r <- range(pre.test,post.test)
curve(1-pre.ecdf(x), from=r[1], to=r[2], col="red", xlim=r)
curve(1-post.ecdf(x), from=r[1], to=r[2], col="blue", add=TRUE)
您可以设置一些参数,如标题,图例等。
如果你想要频率而不是比例简单的解决方案将是:
pre.ecdf <- ecdf(pre.test)
post.ecdf <- ecdf(post.test)
rx <- range(pre.test,post.test)
ry <- max(length(pre.test),length(post.test))
curve(length(pre.test)*(1-pre.ecdf(x)), from=rx[1], to=rx[2], col="red", xlim=rx, ylim=c(0,ry))
curve(length(post.test)*(1-post.ecdf(x)), from=rx[1], to=rx[2], col="blue", add=TRUE)
答案 2 :(得分:2)
df <- data.frame(x, g)
df$y <- apply(df, 1, function(v){nrow(subset(df, g == v[2] & x >= v[1]))})
library(ggplot2)
qplot(x, y, data=df, geom='line', colour=g)
答案 3 :(得分:1)
假设您只有一个向量x
,那么您可以执行以下操作:
f <- ecdf(x)
plot(1-f(x),x)