ggplot2 geom_smooth因scale_y_probit错误而失败

时间:2011-09-28 12:07:42

标签: r ggplot2

我试图绘制最适合累积密度的线条 我使用reciprobit图表来表示结果(log latency vs 概率累积概率)。

grp<-c("g1","g1","g1","g1","g2","g2","g2","g2","g3","g3","g3","g3")
lat<-c(1, 4, 6, 8, 2, 3, 7, 9, 1, 4, 8, 8)

data<-data.frame(grp,lat)

d.f <- arrange(data,grp,lat)  # sort data into ascending values
d.f.ecdf <- ddply(d.f, .(grp), transform, ecdf=ecdf(lat)(lat) )  #
calculate ecdf

p <- ggplot( d.f.ecdf, aes(lat, ecdf, colour = grp) )

p+geom_point()+
scale_x_log10()+
scale_y_probit()

到目前为止一切正常,但如果我添加

p+scale_y_probit()+geom_smooth()

OR

p+scale_y_probit()+stat_smooth()

我收到错误: 错误:外部函数调用中的NA / NaN / Inf(arg 1)

它适用于大多数其他发行版,例如

p+geom_point()+
scale_x_log10()+
scale_y_inverse()+
geom_smooth()

有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

您为每个组计算ECDF,这会导致多个值完全等于1.在1处评估的probit函数是无限的。 (Probit(1)应该给你一个标准正态随机变量的值,其中所有的左边是其他值,即该值左边的区域应该是1.所以,无限。 )

散点图平滑方法(以及大多数其他拟合方法)不能很好地与无限响应值一起使用。

构建数据框后,您可以将ecdf中1的所有值更改为略小于1的值,并且您的代码将运行且没有错误。