反比例っぽいグラフはどのようにして生まれるのか？

# 前略
[こちらの記事](https://qiita.com/fmfm_mdk/items/61d86fef2ed26656369d)の考察はとても面白かったですね。自分も「いいね」をもらうとやる気が出るので、ちょっと参考になりました。コードは書くつもりだけど。

ところで、私も分析をしていると度々記事の中にあった最初のグラフのような図に出会います。反比例っぽいなーと思いつつ、実はこれは反比例ではないのでは？と思ったので、似たようなグラフがどのようにしたら出力されるか、ちょっと試してみました。

# 反比例のグラフ
当たり前ですが反比例のグラフは下図のようになります。

```python
import numpy.random as rnd
import matplotlib.pyplot as plt
plt.style.use("seaborn")

x = np.linspace(0.1, 10, 100)
y = 1/x

plt.plot(x, y)
plt.show()
```
<img width="486" alt="スクリーンショット 2020-01-23 1.22.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/5b088863-b0e8-950c-dbb3-b6098376cc50.png">

さて、上のデータは手動で作成したのですが、これを所与のものであったと考えてみます。つまり、下記のようなデータフレームが最初から与えられていたとします。

```python
import pandas as pd

df = pd.DataFrame({"x": x, "y": y})
```
<img width="143" alt="スクリーンショット 2020-01-23 1.25.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/739130f5-143c-f6db-6db9-a2088215ee34.png">

このxとyをプロットして反比例か確認しても良いのですが、より良い確認方法として、グラフが線形になるように変数を変換することが考えられます。つまり、xの逆数をとった次のような列を考えます。

```python
df["1/x"] = 1/df["x"]

df.plot(x="1/x", y="y")
plt.show()
```
<img width="487" alt="スクリーンショット 2020-01-23 1.29.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/2b28d47d-68d5-f1f2-4729-878d7b0c47bc.png">

こうすると、直線になるので、曲線の目視確認よりもより正確に確認することが出来ます。また、比例係数も読み取ることも出来ます。


## 反比例っぽいグラフ
反比例っぽいグラフを作るにあたって最初に思いついたのは、xとyがそれぞれ独立に、指数分布のような原点で最大値をとり急激に単調減少する分布に従うというものです。

### 指数分布の場合
y=xの方向にグラデーションになっています。これは再生性があるためだと考えられます（もう少し考察が必要）。反比例っぽい曲線感はないです。

```python
import numpy.random as rnd
import matplotlib.pyplot as plt
plt.style.use("seaborn")

lam = 0.008
x = rnd.exponential(1./lam, size=10000)
y = rnd.exponential(1./lam, size=10000)

plt.figure(figsize=(5, 5))
plt.plot(x, y, ".", alpha=0.2)
plt.xlim(0, 1600)
plt.ylim(0, 1600)
plt.show()
```
<img width="338" alt="スクリーンショット 2020-01-23 1.35.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/6d011826-948e-0847-4e7c-22dbbf4e257c.png">

### 幾何分布の場合
離散分布でも試してみます。こちらも曲線感はないです。

```python
import numpy.random as rnd
import matplotlib.pyplot as plt
plt.style.use("seaborn")

x = rnd.geometric(p=0.01, size=10000)
y = rnd.geometric(p=0.01, size=10000)

plt.figure(figsize=(5, 5))
plt.plot(x, y, ".", alpha=0.2)
plt.xlim(0, 1600)
plt.ylim(0, 1600)
plt.show()
```

<img width="338" alt="スクリーンショット 2020-01-23 1.38.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/8a8c6ea0-f965-3179-e134-3fdf13007d36.png">

### カイ二乗分布の場合
ちょっとそれっぽい曲線感があります。

```python
import numpy.random as rnd
import matplotlib.pyplot as plt
plt.style.use("seaborn")

x = 100*rnd.chisquare(1, size=10000)
y = 100*rnd.chisquare(1, size=10000)

plt.figure(figsize=(5, 5))
plt.plot(x, y, ".", alpha=0.2)
plt.xlim(0, 1600)
plt.ylim(0, 1600)
plt.show()
```

<img width="338" alt="スクリーンショット 2020-01-23 1.42.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/a9a98e04-5c3c-39bd-26c6-3e7ebe941ecd.png">

xについて逆数をとり、yと一緒にプロットしてみます。

```python
plt.plot(1/x, y, '.')
plt.show()
```
<img width="489" alt="スクリーンショット 2020-01-23 1.46.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/bb3d482a-e4d7-763f-ab0f-4c737c3c3c70.png">

拡大してみます。

```python
plt.plot(1/x, y, '.')
plt.xlim(0, 50)
plt.show()
```
<img width="489" alt="スクリーンショット 2020-01-23 1.47.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211712/1ff21c71-18cc-517f-ba0f-7ec733716879.png">

反比例のグラフのような直線にはならないことがわかりました。

# 草々
カイ二乗分布のグラフは反比例感がちょっとだけあるグラフになりました。ただ、このようなグラフが得られたとき、原点付近にデータが有ることを考えると、反比例ではないと推測するのが妥当だと思います。

今回の検証での重要な点は、xとyに関係があるようなグラフに見えても、実はxとyが独立にサンプリングされた組であるケースがあるということです。