質問

私は次のように見えるファイルからまばらなテーブルを読んでいます:

1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1  0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1

注意行の長さは異なります。

各行は単一のシミュレーションを表します。各行のi番目の列の値には、このシミュレーションでI-1の値がいくつあるかを示しています。たとえば、最初のシミュレーション(最初の行)では、値「0」(最初の列)、値「2」(3番目の列)などの結果が1つの結果が得られました。

すべてのシミュレーション結果に対して平均累積分布関数(CDF)を作成したいので、後でそれを使用して、真の結果の経験的なp値を計算できます。

これを行うには、最初に各列を合計することができますが、ゼロをUNDEF列に使用する必要があります。

列の長さが異なるこのようなテーブルを読むにはどうすればよいですか? 「UNDEF」値を0に置き換える列を合計するにはどうすればよいですか?そして最後に、CDFを作成するにはどうすればよいですか? (私はこれを手動で行うことができますが、それを行うことができるパッケージがあると思います)。

役に立ちましたか?

解決

これにより、データが読み取られます。

dat <- textConnection("1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1  0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1")
df <- data.frame(scan(dat, fill = TRUE, what = as.list(rep(1, 29))))
names(df) <- paste("Val", 1:29)
close(dat)

その結果:

> head(df)
  Val 1 Val 2 Val 3 Val 4 Val 5 Val 6 Val 7 Val 8 Val 9 Val 10 Val 11 Val 12
1     1     0     7     0     0     1     0     0     0      5      0      0
2     1     0     0     1     0     0     0     3     0      0      0      0
3     0     0     0     1     0     0     0     2     0      0      0      0
4     1     0     0     1     0     3     0     0     0      0      1      0
5     0     0     0     1     0     0     0     2     0      0      0      0
....

データがファイルにある場合は、 dat. 。このコードは、提供したデータに従って、最大29列があると推定しています。変更します 29 実際のデータに合わせて。

列の合計を使用します

df.csum <- colSums(df, na.rm = TRUE)

ecdf() 関数あなたが望むECDFを生成します、

df.ecdf <- ecdf(df.csum)

そして、それを使用してプロットできます plot() 方法:

plot(df.ecdf, verticals = TRUE)

他のヒント

使用できます ecdf() (ベースRで)または Ecdf() (から hmisc パッケージ)機能。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top