理学部の男女数に偏りがあるのは入試のせい?

【イントロ】
出会いが欲しい・・・

はっ!

現実か。。。

 異性と出会うためには、異性と出会えるイベントが存在しないといけません[1]。そのため、男女の人数差が大きい集団では、そうした機会がどうしても少なくなってしまいます。実際、小中高と男女ほぼ同数の環境を卒業し大学に入ってしまうと、男子しかいない、女子しかいない、といった状況が生じてしまいます。
 そう、たとえば、理学部とか。

 ところで、近頃明らかとなった医学部入試の点数操作問題[2]は、様々な問題を抱えており、お茶の間を賑わせています。
 そう、たとえば、黙って男女の合格者数に偏りをつけるとか。

 つまり何がいいたいかというと、「理学部の男女数は”不思議なチカラ”によって偏っているのか?」という疑問が浮かんでくるということです。
 そこで本記事では、上記の疑問を「男女の理学部入試合格率に有意な差はあるのか?」という問題に焼き直して、公開データを用いて調べてみることにしました。

【方法】
 まず、Web上の入試情報から各大学の男女別の入試受験者数と合格者数の情報を集めました[3]。集めたのは旧帝大と有名私立大がメインで、図1のようになりました。やはり女子のほうが少ないのが見て取れます。
 さらに、合格率=合格者数/受験者数として、求めた結果を棒グラフにしたものを図2に示します。合格率5割の大学から、2割程度の大学までばらつきがあることがわかります。また、男女合格率にも差があることが見て取れますが、これが有意な差なのかPythonをつかって検定することにしました。

図1、各大学の男女別受験者数と合格者数


図2、各大学の男女別合格率

【実験結果】 
 具体的な方法は、こちらのQiita記事[4]を参考にしました。
 1つ目に実施したのはQiita記事と同じ、下記仮説を検定する方法です。
帰無仮説:「女性が合格する確率は、(総合格者数)/(総受験者数)に等しい」
 有意水準5%となったのは図3のとおりです。pandas便利すぎん!?


図3、帰無仮説が棄却される大学たち

 京大、東工大、早稲田、横浜国立大学の4大学の合格率には男女で有意な差がありそう、と言う結果になりました。男ばかりでネタになる東工大は合格率から既に差が。。。なにか不思議なチカラが働いてる可能性が微レ存( ;・`д・´)

 続いてもう一つの方法、χ二乗検定を実施しました。これは「男・女」と「合格・不合格」が独立な事象なのかを検定する方法です。こちらのQiita記事[5]を参考に検定を実施しました。結果は図4のとおりです。

図4、χ二乗検定による男女別合格・不合格の有意差検定

 こちらも、同様に京大、東工大、早稲田、横浜国立大学の4大学に有意差がある結果となりました。こうしてみると、大学ごとにp値も全然違うんですね。
 少なくともこの4大学以外は、そもそも女子の志願者が少ないので男女の人数差が生じているようです。理学部たのしいのに・3・

【まとめ】
 本記事では、各大学の入試合格者数に優位な差があるか検定を実施しました。その結果、京大、東工大、早稲田、横浜国立大学の4大学では、男女の合格率が有意に違うことがわかりました。
 この結果は(前述のQiita記事でも触れられていますが)、有意差が付いた原因までを示すものではありません。有意差がつく理由としては、「生まれつき男女の能力に差がある」「元々の能力に差がなくても社会的要因で差がついた」「所詮統計なのでたまたま」「不思議なチカラ」など様々な原因が考えられます。
 因果関係の証明は薮の中といった趣ですが、少なくとも上記4大学では何らかの理由により男女の合格率に差が生じているようです。
 それが、イデオロギー的に許される理由かはわかりませんが。

【参考文献】
1,出会いがない社会人必見!異性との出会いを増やす方法
2,2018年における医学部不正入試問題(Wikipedia)
3,各大学の参照データURL
大阪大学
京都大学
東北大学
北海道大学
東工大
早稲田
広島大
琉球大
千葉大
埼玉大
大阪市大
横浜国立大
明治大
立教大
岡山大
4,Qiita「医科大・医学部入試の男女差をPythonで仮説検定する
5,Qiita「クロス集計とカイ二乗検定



【使用したコード】

使用コードその1
import numpy as np
import pandas as pd
from scipy import stats

data = pd.read_csv("data-blog.csv")
print(data)

# カラム追加
data["総受験者数"] = data["男子受験者数"] + data["女子受験者数"]
data["総合格者数"] = data["男子合格者数"] + data["女子合格者数"]
data["合格率"] = data["総合格者数"] / data["総受験者数"]

# p値を計算
data["p値"] = np.array([
    stats.binom_test(data["女子合格者数"][i], data["女子受験者数"][i], 
    data["合格率"][i])
    for i in range(0, 15)
])

result = data[data["p値"] < 0.05]["大学名"]
print(result)


使用コードその2
import numpy as np
import pandas as pd
from scipy import stats

data = pd.read_csv("data-blog.csv")

for i in range(0,15):
    dg=data["男子合格者数"][i]
    df=data["男子不合格者数"][i]
    jg=data["女子合格者数"][i]
    jf=data["女子不合格者数"][i]

    dat=np.array([[dg,df],[jg,jf]])

    squared,p,dof,ef=stats.chi2_contingency(dat)
    #print("統計検定量:"+str(squared))
    #print("p-value:"+str(p))
    #print("degrees of freedom:"+str(dof))
    #print("expectation")
    #print(str(ef))
    
    #print(data["大学名"][i]+": p-value:"+str(p))

     if p<0.05:
        print(data["大学名"][i]+": p-value:"+str(p))

コメント

このブログの人気の投稿

交代磁性があるのかないのかどっちなんだい!~RuO2の場合~

狂気!室温超伝導体は脳内にあった!!!

まだ最小二乗法で消耗してるの? ~Passing Bablok法について~