我试图绘制最适合累积密度的线条 我使用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()
有没有解决这个问题的方法?
答案 0 :(得分:1)
您为每个组计算ECDF,这会导致多个值完全等于1.在1处评估的probit函数是无限的。 (Probit(1)应该给你一个标准正态随机变量的值,其中所有的左边是其他值,即该值左边的区域应该是1.所以,无限。 )
散点图平滑方法(以及大多数其他拟合方法)不能很好地与无限响应值一起使用。
构建数据框后,您可以将ecdf
中1的所有值更改为略小于1的值,并且您的代码将运行且没有错误。