5

1 と 0 が入力された行列から n 個のランダムな点のサンプルを取得するにはどうすればよいですか?

a=rep(0:1,5)
b=rep(0,10)
c=rep(1,10)
dataset=matrix(cbind(a,b,c),nrow=10,ncol=3)

dataset
      [,1] [,2] [,3]
 [1,]    0    0    1
 [2,]    1    0    1
 [3,]    0    0    1
 [4,]    1    0    1
 [5,]    0    0    1
 [6,]    1    0    1
 [7,]    0    0    1
 [8,]    1    0    1
 [9,]    0    0    1
[10,]    1    0    1

N 個のサンプルを取得した位置 (行、列) がランダムであることを確認したいと思います。

私が知ってsample {base}いる他の方法は、x、yを追加して空間オブジェクトに変更し、再び通常の行列に戻すことを強制する空間方法です。

詳しくは

ランダムとは、「マトリックス空間」内にも広がることを意味します。たとえば、結果として4つの隣接ポイントを持ちたくない4つのポイントのサンプリングを行う場合、それらを「マトリックス空間」に広げます。

ランダムなポイントを取り出したマトリックス内の位置 (行、列) を知ることも重要です。

4

2 に答える 2

12

Rが内部的に行列をベクトルとして表すことを理解していれば、機能する行列をサンプリングする非常に簡単な方法があります。

これはsample、マトリックスで直接使用できることを意味します。たとえば、置換して10ポイントをサンプリングするとします。

n <- 10
replace=TRUE

次に、マトリックスで使用sampleします。

set.seed(1)
sample(dataset, n, replace=replace)
 [1] 1 0 0 1 0 1 1 0 0 1

これがどのように機能するかを示すために、2つのステップに分解してみましょう。ステップ1はサンプリング位置のインデックスを生成することであり、ステップ2はマトリックス内のそれらの位置を見つけることです。

set.seed(1)
mysample <- sample(length(dataset), n, replace=replace)
mysample
 [1]  8 12 18 28  7 27 29 20 19  2

dataset[mysample]
 [1] 1 0 0 1 0 1 1 0 0 1

そして、ちょっとプレスト、2つの方法の結果は同じです。

于 2012-02-02T09:45:20.820 に答える
4

サンプルはあなたにとって最善の策のようです。1000 のランダムな位置を取得するには、次のようにします。

rows = sample(1:nrow(dataset), 1000, replace = TRUE)
columns = sample(1:ncol(dataset), 1000, replace = TRUE)

これはあなたが望むものを与えると思いますが、もちろん私は間違っている可能性があります.

マトリックスからアイテムを抽出するには、次のようにします。

random_sample = mapply(function(row, col) 
                           return(dataset[row,col]), 
                    row = rows, col = columns)

サンプリング戦略

コメントでは、サンプルを広める必要があると話しています。無作為標本には、無作為な性質があるため、クラスターが存在しないという保証はありません。探索するのが興味深いかもしれないいくつかのサンプリング スキームがあります。

  • 定期的なサンプリング、ランダム性をスキップして、定期的にサンプリングするだけです。マトリックス空間全体を均等にサンプリングしますが、ランダム性はありません。
  • 層化ランダム サンプリングでは、行列空間を通常のサブセットに分割し、それらのサブセットでランダムにサンプリングします。ランダムと通常の組み合わせを提示します。

ランダム サンプリングで良い結果が得られるかどうかを確認するには、ランダム サンプリングを数回繰り返して、結果を比較します (サンプリングが別の分析の入力になると思いますか?)。

于 2012-02-02T09:48:25.340 に答える