1

次のようなファイルからスパース テーブルを読み込んでいます。

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

行の長さが異なることに注意してください。

各行は、1 つのシミュレーションを表します。各行の i 番目の列の値は、このシミュレーションで値 i-1 が観測された回数を示します。たとえば、最初のシミュレーション (最初の行) では、値が '0' の単一の結果 (最初の列)、値が '2' の 7 つの結果 (3 番目の列) などを取得しました。

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

これを行うには、最初に各列を合計しますが、undef 列のゼロを取る必要があります。

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

4

2 に答える 2

4

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

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)
于 2010-11-04T17:44:41.103 に答える
2

ecdf()(ベース R の) またはEcdf()( Hmiscパッケージの) 関数を使用できます。

于 2010-11-04T17:31:48.467 に答える