質問の相関係数の問題をPythonで予想してみた。

 質問相関係数の問題をPythonで予想してみました。(^_^;
 結果は等しくならないようです。直感的には、AとBの相関係数があったとしても、Cが乱数の数列だった場合、それを掛けたり割ったりすると元の相関関係を乱しそうな気がします。(^_^;
 でも、正の相関関係があるデータでやってみるとAとBの相関係数は、A'とB'の相関係数と等しくなりませんが、正の相関関係が増しているようです。何回かやってみましたが、全部増えてます。(^_^;
 また、負の相関関係があるときは、正の方向に移りますが、相関関係が乱れてしまうようです。(^_^;
 結局、#1の回答者さんの仰る通り1に近づいているのかな。
 ちなみに、正の相関関係があるデータを作るのに、乱数で発生させたデータをA,Bともに(昇順)ソートしました。また、負の相関関係があるデータを作るのに、A,Bともにソートした後、Bだけ逆順(降順)にしました。

● corrcoef1.py

# coding: UTF-8
# corrcoef1.py

import numpy as np
import random

print(u"//--- AとBに相関関係がない場合 ---//")
for i in range(10):
  a  = [1+100*random.random() for n in range(100)]
  b  = [1+100*random.random() for n in range(100)]
  c  = [1+100*random.random() for n in range(100)]
  ap = [a[n]/c[n] for n in range(100)]
  bp = [b[n]/c[n] for n in range(100)]
  corr1 = np.corrcoef(a , b )[0,1]
  corr2 = np.corrcoef(ap, bp)[0,1]
  print("% f, % f, %s"%(corr1, corr2, corr1==corr2))
print("")
print(u"//--- AとBに正の相関関係がある場合 ---//")
for i in range(10):
  a  = [1+100*random.random() for n in range(100)]
  a.sort()
  b  = [1+100*random.random() for n in range(100)]
  b.sort()
  c  = [1+100*random.random() for n in range(100)]
  ap = [a[n]/c[n] for n in range(100)]
  bp = [b[n]/c[n] for n in range(100)]
  corr1 = np.corrcoef(a , b )[0,1]
  corr2 = np.corrcoef(ap, bp)[0,1]
  print("% f, % f, %s"%(corr1, corr2, corr1==corr2))
print("")
print(u"//--- AとBに負の相関関係がある場合 ---//")
for i in range(10):
  a  = [1+100*random.random() for n in range(100)]
  a.sort()
  b  = [1+100*random.random() for n in range(100)]
  b.sort(); b.reverse()
  c  = [1+100*random.random() for n in range(100)]
  ap = [a[n]/c[n] for n in range(100)]
  bp = [b[n]/c[n] for n in range(100)]
  corr1 = np.corrcoef(a , b )[0,1]
  corr2 = np.corrcoef(ap, bp)[0,1]
  print("% f, % f, %s"%(corr1, corr2, corr1==corr2))

●実行結果

//--- AとBに相関関係がない場合 ---//
-0.025214,  0.686795, False
 0.157423,  0.746589, False
 0.091167,  0.865728, False
-0.229702,  0.635960, False
 0.130638,  0.894326, False
 0.001264,  0.865877, False
-0.020685,  0.332463, False
 0.145793,  0.920812, False
 0.038279,  0.875156, False
 0.087788,  0.414037, False

//--- AとBに正の相関関係がある場合 ---//
 0.995502,  0.998423, False
 0.993498,  0.998999, False
 0.989803,  0.993874, False
 0.989562,  0.997700, False
 0.995002,  0.999534, False
 0.986260,  0.991144, False
 0.983907,  0.996094, False
 0.993021,  0.997851, False
 0.993222,  0.998407, False
 0.988198,  0.993218, False

//--- AとBに負の相関関係がある場合 ---//
-0.992124,  0.453908, False
-0.997307,  0.403669, False
-0.990387,  0.707864, False
-0.992374,  0.002376, False
-0.991883,  0.379366, False
-0.997567,  0.238354, False
-0.997132,  0.111592, False
-0.995502,  0.510397, False
-0.979774,  0.843017, False
-0.995349,  0.438905, False

※参考URL
Pythonで相関係数を求める - ぱたへね
乱数値(ランダム)の生成 - Python入門から応用までの学習サイト

Pythonスタートブック

Pythonスタートブック