簡體   English   中英

R 上 ecdf() 和 Ecdf() 的差異

[英]Differences in ecdf() and Ecdf() on R

我正在嘗試繪制數據集的這種行為 我試過 Ecdf()

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)

似乎一切順利。 在這個答案之后,我嘗試了 ecdf()

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()。

我的錯誤在哪里? 為什么他們看起來與我不同?

第一次編輯:我的實際代碼是

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()')

Ecdf返回一個列表,而ecdf返回一個函數:

> 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()類的函數來構造適當的索引。

親愛的朋友,我在 agroclim 包中運行frostfreqs 函數時遇到了類似的問題。 它返回以下內容:

 frostFreqs(mn = tm, dates = seq.Date(as.Date('1987-01-01'),
+                                      as.Date('2017-12-31'), by ='day'))
Error in ecdf(ff) : 'x' must have 1 or more non-missing values
In addition: Warning message:
In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE


~~~~~~~~
Any one having solution for the problem please?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM