首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R上ecdf()和Ecdf()的差异

R上ecdf()和Ecdf()的差异
EN

Stack Overflow用户
提问于 2012-06-21 22:16:59
回答 1查看 4.5K关注 0票数 0

我正在尝试绘制数据集的这种behaviour。我尝试过使用Ecdf()

代码语言:javascript
复制
library(Hmisc)
dd<-read.table('critical.1.dat',head=F)
cdf<-Ecdf(dd$V1)
df<-hist(dd$V1)
ll<-((1-cdf$y[df$mids])/(df$density))
plot(df$mids,ll)

似乎一切都很顺利。在这个answer之后,我尝试了使用ecdf()

代码语言:javascript
复制
dd<-read.table('critical.1.dat',head=F)
cdf<-ecdf(dd$V1)
df<-hist(dd$V1)
ll<-(1-cdf(df$mids))/df$density
plot(df$mids,ll)

结果看起来与Ecdf()非常不同。

我的错误在哪里?为什么他们看起来和我不一样?

First Edit:我的实际代码是

代码语言:javascript
复制
library(Hmisc)
dd<-read.table('critical.1.dat',head=F)

cdf<-Ecdf(dd$V1)
ccdf<-ecdf(dd$V1)

df<-hist(dd$V1)

ll<-((1-cdf$y[df$mids])/(df$density))
llc<-(1-ccdf(df$mids))/df$density

par( mfrow = c( 2, 1 ) )

plot(df$mids,ll,ylab='Ecdf()')
plot(df$mids,llc,ylab='ecdf()')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-21 22:24:06

Ecdf返回列表,而ecdf返回函数:

代码语言:javascript
复制
> set.seed(1)
> ch <- rnorm(1000, 200, 40)
> Echol <- Ecdf(ch, xlab="Serum Cholesterol")
> e.chol <- ecdf(ch)
> str(Echol)
List of 2
 $ x: num [1:1001] 79.7 79.7 80.1 82.4 84.4 ...
 $ y: num [1:1001] 0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 ...
 - attr(*, "N")=List of 2
  ..$ n: num 1000
  ..$ m: num 0

> e.chol <- ecdf(ch)   
> str(e.chol)
function (v)  
 - attr(*, "class")= chr [1:3] "ecdf" "stepfun" "function"
 - attr(*, "call")= language ecdf(ch)

总结一下下面的评论...ECDF的列表表示需要与函数表示不同的访问方法。因此,在处理从Ecdf()返回的对象时,至少有一个错误是在cdf$y[df$mids]中使用df$mids。base::ecdf函数的美妙之处在于它可以直接处理X值,而列表表示将需要使用像findInterval()这样的函数来构造适当的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11140185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档