0

この種のデータセットの動作をプロットしようとしています。私は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()')
4

1 に答える 1

1

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 のリスト表現には、関数表現とは異なるアクセス方法が必要です。cdf$y[df$mids]したがって、エラーの少なくとも 1 つは、からの戻りオブジェクトを処理するときにdf$mids を使用することにありましたEcdf()。base::ecdf 関数の優れた点は、X 値を直接処理できることですが、リスト表現ではfindInterval()、適切なインデックスを作成するために関数を使用する必要があります。

于 2012-06-21T14:24:05.700 に答える