★ 相関付多変量の{0,1}「二値分布」発生方法? ★

 24 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/23 (水) 19:47
  30 Re: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/24 (木) 19:00
   35 Re^2: 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/25 (金) 13:19
    45 Re^3: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/25 (金) 15:06
    38 Re^3: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/25 (金) 13:47
     39 Re^4: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/25 (金) 13:57
      48 Re^5: 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/25 (金) 18:50
       52 Re^6: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/26 (土) 21:06
       49 Re^6: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/26 (土) 15:36
        64 Re^7: 相関付多変量の{0,1}「二値分布」発生方法?(お礼)  岡本  2000/02/29 (火) 18:15
   31 Re^2: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/24 (木) 19:45


24. 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/23 (水) 19:47
どうにも困っているので,お力添えを。
{0,1}二値のみを等確率(0.5)でとる変量(分散=0.25)がn個あります。共分散/分散で相関係数を定義します。nC2通りの2変量ペアについて相関係数を入力すると,n個の{0,1}値を発生するプログラムを作りたいのですが,効率的な方法が思い浮かびません。2^n通りの組み合わせを考え,それぞれに確率を付与させようとし,n>=3で挫折してしまいました。
よい切り口・ヒント等ご指導くださいませ。
なお,[0,1]一様乱数発生ルーチンは所与とします。

     [このページのトップへ]


30. Re: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/24 (木) 19:00
> {0,1}二値のみを等確率(0.5)でとる変量(分散=0.25)がn個あります。共分散/分散で相関係数を定義します。nC2通りの2変量ペアについて相関係数を入力すると,n個の{0,1}値を発生するプログラムを作りたいのですが,効率的な方法が思い浮かびません。

[0,0],[0,1],[1,0],[1,1]の4種類しかデータはないのですね。
ちょっと計算してみると,以下の関係が簡単に導けます。

相関係数を r としたとき,
[0,0]の個数 = [1,1]の個数
[0,1]の個数 = [1,0]の個数
[0,0]の個数 : [0,1]の個数 = 1 + r : 1 - r
となります。

データの総数 n と相関係数 r が与えられると4種類のデータの個数が確定します。このデータセットの中からランダムにn個抜き取るようなルーチンを作ればいいのだと思います。

     [このページのトップへ]


35. Re^2: 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/25 (金) 13:19
>>{0,1}二値のみ等確率でとる変量n個。nC2通りの2変量ペアについて相関係数を入力すると,n個の{0,1}値を発生するプログラム
> [0,0],[0,1],[1,0],[1,1]の4種類しかデータはないのですね。
ひの 様,まずは丁寧なご回答有難うございます。
ただ,小生の理解不足か説明不良か。

2次元0/1のベクトルをn個発生させるということではないんです。n個というのは,データ個数でなく次元です。つまり,多次元相関付の{0,1}2値の分布ということです。n=3ならベクトルV=(x1,x2,x3)で,corr(xi,xj)=ρij 但し(i,j)=(1,2),(2,3),(3,1)。よって相関係数は3C2=3個出てきます。また全iについて,mean(xi)=0.5,var(xi)=0.25です。

如何なものでしょうか?

     [このページのトップへ]


45. Re^3: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/25 (金) 15:06
> 2次元0/1のベクトルをn個発生させるということではないんです。n個というのは,データ個数でなく次元です。つまり,多

あ,n次元でしたか。少なくとも2次元については先に示したように簡単に解けましたから,n次元についても解析的に解けるのではないかと思います。実際にどのくらいの大きさのnを扱いたいのかによりますが...。

     [このページのトップへ]


38. Re^3: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/25 (金) 13:47
多変数の場合,どのような相関係数行列でもいいわけではないということはおいておくとして,0/1データの場合は,やはりかなり難しそうですね。

連続変数なら
http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/gendata.html
http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/gendata2.html
という感じですが。

     [このページのトップへ]


39. Re^4: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/25 (金) 13:57
多次元正規乱数を求めて,各変数ごとに平均値未満を0,平均値以上を1に変換してやって,近似的なもので我慢するとか....(相関係数はかなり違ったものになると思う)

     [このページのトップへ]


48. Re^5: 相関付多変量の{0,1}「二値分布」発生方法?  岡本  2000/02/25 (金) 18:50
> 多次元正規乱数を求めて,各変数ごとに平均値未満を0,平均値以上を1に変換してやって,近似的なもので我慢す

当座は0/1が等確率なのでおっしゃるようなコーディングにしました。相関係数は,2次元の場合を考えて,関係式正規相関係数ρ,2値相関係数r=sin-1(πr/2) を導き,変換させることにしました。ここで質問なのですが,
Q1 上記「平均値」は標本平均でなく母平均ですよね?
Q2 意味のある相関係数行列は,非負定つまり全固有値>=0で考えればよいのでしょうか?
Q3 等確率でなく,各0/1変量毎にばらばら(つまり,平均や分散も個々に指定)だとすると,やはり難問?

五月雨的質問で恐縮ですが,ご指導お願い申し上げます。

なお,次元は10くらいまでを考えています。解析的解法は挫折中です>ひの様

     [このページのトップへ]


52. Re^6: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/26 (土) 21:06
役に立つかどうかわかりませんが,一言...

2×2分割表におけるファイ係数は,それぞれのカテゴリーを2値データとしたときのピアソンの積率相関係数に一致します。

http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc005/258.html#269
を参照。

     [このページのトップへ]


49. Re^6: 相関付多変量の{0,1}「二値分布」発生方法?  青木繁伸  2000/02/26 (土) 15:36
> Q1 上記「平均値」は標本平均でなく母平均ですよね?

件のプログラムを使うとすると,いったん得られた多変量正規分布の,各変数の標本平均値は0,標本分散は1(母平均,母分散もそれぞれ0と1ですが)です。出てきた変数ごとに負の値なら0,非負なら1にすればいいでしょう。 (件のプログラムは,指定された相関係数を正確に反映した多変量正規分布データを生成します)

> Q2 意味のある相関係数行列は,非負定つまり全固有値>=0で考えればよいのでしょうか?

そういうことになるのかと思います。要するに,理論的に可能な相関係数行列ということ。そうでない場合には,件のプログラムは,文句を言って止まります。

> Q3 等確率でなく,各0/1変量毎にばらばら(つまり,平均や分散も個々に指定)だとすると,やはり難問?

どうなんでしょうね。カットポイントをずらすだけでは対処しきれないと思いますが。相関係数の読み替えをすると言うところは気づかないまま,変数5000個くらいの多変量正規分布データを0/1多変量データに変換したところでは,所与の相関係数行列とは相当異なったデータ行列が得られました。
うまく行くといいのですが。

     [このページのトップへ]


64. Re^7: 相関付多変量の{0,1}「二値分布」発生方法?(お礼)  岡本  2000/02/29 (火) 18:15
青木様,ひの様,

この度の質問については,ご親切なアドバイスを頂きまして,有難うございました。おかげさまで,曲がりなりにも当初の目的に達することができました。お礼申し上げます。

この掲示板,非常に有意義ですね。これからも大いに活用させていただきます。

     [このページのトップへ]


31. Re^2: 相関付多変量の{0,1}「二値分布」発生方法?  ひの  2000/02/24 (木) 19:45
参考までに,コーディング例です(言語は Object Pascal)
procedure RandBiBiNominal(const r : extended; var x, y : integer);
var
  rnd : extended;
begin
  rnd := Random * 4;
  if rnd < 1 + r then begin
    X := 0; Y := 0;
  end else if rnd < 2 + 2*r then begin
    X := 1; Y := 1;
  end else if rnd < 3 + r then begin
    X := 0; Y := 1;
  end else begin
    X := 1; Y := 0;
  end;
end;

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 007 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る