ただのメモ

他の人に見せても良い方のメモ

歪度を求める

レクチャーを受けた。その感想を含めて書き残しておく。

マルファン症候群をもっと世間に周知することが、マルファン症候群の患者さんがより良い生活及び人生を送ることを支援する上で、必要不可欠である。

これは、決して一般的な話だけに留まらず、病院内での職員もその症状を知っておくべきだ、という話である。

(気持ち:最近確率を勉強しているので、そこと絡めてみよう。)

そのためにも、まず、マルファン症候群の患者さんとどれくらいの確率で出会うのか、という情報を知っていても損では無い。

マルファン症候群の患者さんは、5000人に1人と言われている。

1000人の集団を1000回集めた時に、何人マルファン症候群の患者さんがいるか、を考えて見る。

 

結果について。点が小さいくて見にくい(申し訳ない)が、8割で0人、2割で1人、3%程で、2人といったところだ。

 

平均値も求めると、2.21だった。一学年160人の6年制大学なら、2人はいるだろう、というところだ。(6年制大学、という条件によるバイアスがかかっていることは忘れてはならない)

 

次に、歪度なる特徴量を取り出してみる。

歪度については、こちら

どうやら、歪度とは、確率変数が従う分布の、非対称性を扱う値であるようだ。

左向きを正の向きと取ったときに、右に山があれば、歪度は正。逆に、左に山があれば、歪度は負、となる。

歪度は、2.23と出た。無事、正であることも確認できた。

似たような特徴量として、尖度というものがあるらしいが、3乗が4乗に変わっただけなので、今回はパス。(平均との近さと裾の重さを反映しているらしい)

from numpy import sin, cos
import numpy as np
import matplotlib.pyplot as plt
import random

#マルファン症候群は5000人から10000人に1人
#ここでは、5000人に1人とする
p=1/5000
#日本の人口は1.258億
N=1000
M=1000
def binomial(p,x):
    if x<p:
        return 1
    else:
        return 0
ans=[0]*(N+1)
random.seed(25)
for j in range(M):
    h=[binomial(p,random.random()) for i in range(N)]
    ans[sum(h)]+=1
for i in range(N+1):
    plt.scatter(i,ans[i]/M,s=1)


plt.xlabel("number of patients per 1000")
plt.ylabel("probability")
plt.title("Marfan disease")
plt.show()

def expected(x):
    mu=0
    for i in range(N+1):
        mu+=x[i]*i/M
    return mu

mu=expected(ans)
def sd(x):
    s=0
    for i in range(N+1):
        s+=(i-mu)**2*x[i]/M
    return s

def skewness(x):
    sk=0
    for i in range(N+1):
       sk+=(i-mu)**3*x[i]/M
    return sk
skew=skewness(ans)/(sd(ans)**(3/2))
print(skew,"skewness")

 

めでたしめでたし。