SSブログ

共通の分母で割り算して対数を取った値同士の相関 [統計]

生態学にありがちな、共通の変数で割り算して対数を取った変数同士の相関(log(葉面積あたりの○○)とlog(葉面積あたりの××)とか)を考えてみました。対数値としては、共通の変数をひいてやったことになります。

まずは一例。X, Y, Zが、サンプルサイズN=100でそれぞれ標準正規分布にしたがう変数のとき、A=Y-XとB=Z-Xを計算し、これらの散布図行列と相関係数を出力させました。
pairs.png

これだけではよくわからないので、シミュレーションで実験してみました。詳細は下のRコードにありますが、上の設定で乱数を発生させ、相関係数を10000回計算させました。結果は以下です。正の方向にかたよりがみられます。
r1.png

サンプルサイズを500としましたが、やはりかたよりがあります。
r2.png

Xの標準偏差を5にすると(サンプルサイズは100)、かたよりがはげしくなりました。
r3.png

ちょっと考えればわかるように、Xのレンジが大きくなると、A=Y-XとB=Z-Xの相関はだんだん-Xと-Xとの相関に近くなります。ということで、当然1にちかづくわけです。

シミュレーションのRコードです。

これだけではなんなので、AとBが既知だがXが未知(ただし平均だけはわかっている)という場合に、X, Y, Zの値を推定するというのをやってみました。

RコードとStanコード

結果です。

> print(fit, pars = c("mu_Y", "mu_Z", "sigma"))
Inference for Stan model: diff_model.
4 chains, each with iter=2000; warmup=1000; thin=1; 
post-warmup draws per chain=1000, total post-warmup draws=4000.

         mean se_mean   sd  2.5%   25%  50%  75% 97.5% n_eff Rhat
mu_Y     0.11       0 0.14 -0.16  0.02 0.12 0.21  0.38  2795    1
mu_Z     0.02       0 0.14 -0.25 -0.07 0.02 0.12  0.29  3139    1
sigma[1] 0.98       0 0.12  0.75  0.89 0.97 1.05  1.21  2173    1
sigma[2] 0.93       0 0.12  0.69  0.85 0.92 1.00  1.16  1879    1
sigma[3] 1.01       0 0.11  0.80  0.94 1.01 1.09  1.24  2979    1

diff_model.png

だいたいうまく推定できたようです。


タグ:STAn R
nice!(1)  コメント(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント