1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ジェンダー論で読み解く統計検定2級:回帰分析とPythonフェミニスト

Posted at

  1. 回帰とは

回帰式は「目的変数を説明変数で表す」数学的モデル。

社会を読み解くとき、目的変数 y を「女性の進学率」や「賃金格差」とし、説明変数 x を「学校の性別比」「管理職割合」などに設定することで、差別の構造が数値として浮かび上がる。

例:
女性の賃金(y) = a + b × 管理職割合(x) + 誤差

  1. 単回帰式と重回帰式

単回帰式(説明変数が1つ):
y = a + b x + ε
→ 「一因だけ」で女性の不利益を説明するのは不十分な場合が多い。

重回帰式(説明変数が複数):
y = a + b₁x₁ + b₂x₂ + … + ε
→ 家庭・職場・公共空間といった複数の要因を同時に考えることで、差別の交差性(intersectionality)を反映できる。

  1. 誤差と残差

誤差 ε:モデルで説明できない「社会の複雑さ」や「不可視化された差別」。

残差 e:推定式と実際のデータとの差。
→ 数学的に「残差を最小にする」ことは、社会的に「見過ごされてきた不公平をできるだけ少なく説明する」ことに対応する。

  1. 最小二乗法と偏回帰係数

方法:残差の二乗和を最小にする a, b を決める。

数式:
b̂ = Σ (xᵢ - x̄)(yᵢ - ȳ) / Σ (xᵢ - x̄)²
â = ȳ - b̂ x̄

ここで b̂ は「x が1増えると y がどれだけ変化するか」を示す。
→ フェミニスト的には「管理職比率が1%増えると、女性賃金がどのくらい改善するか」を示す指標になりうる。

  1. 回帰式の特徴

回帰直線は (x̄, ȳ) を必ず通る。
→ 社会平均における「女性の現状」を必ず反映する。

平均への回帰(Regression to the mean):極端な差別事例も、長期的には平均に近づいて見える。
→ しかし「平均化」によって差別の深刻さが薄められる危険がある。

  1. 誤差の仮定

E[ε] = 0 (差別が偏っていないと仮定)

Var(ε) = σ² (差別の影響が常に同じ強さと仮定)

誤差は独立・正規分布に従う
→ 実際の社会では「誤差が系統的に偏っている」(特定の属性が繰り返し差別される)ため、この仮定は現実には崩れがち。

  1. フェミニスト的読み替え

回帰式は「差別や格差をデータで可視化するツール」。

事前に「差別はない」という前提を置いてしまうと、数理モデルもその偏見を再生産する。

回帰分析をフェミニスト的に使うとは、 「誤差」に潜む不可視の差別を読み解く」 ことでもある。


!pip install statsmodels matplotlib pandas

import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

# -------------------------
# 1. Create sample data
# -------------------------
# y: Women’s income (10,000 JPY units)
# x1: Manager ratio (%)
# x2: Years of education
# x3: Weekly housework hours

data = {
    "manager_ratio": [5, 10, 15, 20, 8, 25, 12, 18, 7, 22],
    "education":     [12, 14, 16, 18, 12, 20, 15, 17, 13, 19],
    "housework":     [35, 30, 25, 15, 40, 10, 28, 20, 38, 15],
    "income":        [250, 300, 350, 500, 220, 600, 330, 420, 240, 550]
}
df = pd.DataFrame(data)

# -------------------------
# 2. Simple regression (Income ~ Manager ratio)
# -------------------------
X1 = sm.add_constant(df["manager_ratio"])
y = df["income"]
model1 = sm.OLS(y, X1).fit()

print("=== Simple Regression: Women’s Income ~ Manager Ratio ===")
print(model1.summary())

# -------------------------
# 3. Multiple regression (Income ~ Manager ratio + Education + Housework)
# -------------------------
X2 = df[["manager_ratio", "education", "housework"]]
X2 = sm.add_constant(X2)
model2 = sm.OLS(y, X2).fit()

print("\n=== Multiple Regression: Women’s Income ~ Manager Ratio + Education + Housework ===")
print(model2.summary())

# -------------------------
# 4. Feminist interpretation
# -------------------------
print("\n--- Feminist Interpretation ---")
print("・If the coefficient of Manager Ratio is positive, women’s promotion directly improves income.")
print("・If the coefficient of Education is significant, unequal access to education explains part of the wage gap.")
print("・If the coefficient of Housework is negative, domestic workload structurally reduces women’s economic outcomes.")
print("・Biased residuals suggest invisible discrimination (e.g., cultural norms, workplace environment) not captured by the model.")

# -------------------------
# 5. Visualization (Manager ratio vs Women’s income)
# -------------------------
plt.scatter(df["manager_ratio"], df["income"], color="blue", label="Data")
plt.plot(df["manager_ratio"], model1.predict(X1), color="red", label="Fitted line")
plt.xlabel("Manager Ratio (%)")
plt.ylabel("Women’s Income (10,000 JPY)")
plt.title("Simple Regression: Manager Ratio vs Women’s Income")
plt.legend()
plt.grid(True)
plt.show()

  1. 重回帰分析とは

重回帰分析は、目的変数を複数の説明変数で表す統計手法。

数式:
y = β₀ + β₁x₁ + β₂x₂ + β₃x₃ + … + ε

例: 「女性の年収(y)」を「学歴(x₁)」「勤務時間(x₂)」「家事負担(x₃)」「職場文化(x₄)」で説明。

フェミニスト的に言えば、「女性の成果や待遇は単一の要因だけでは説明できず、複数の構造的要因が交差的に影響する」という考えに合致する。

  1. 偏回帰係数

βᵢは「他の変数を固定したときに、その変数が1増えるとyがどれだけ変わるか」を示す。

例: 他条件が同じなら「管理職比率が1%上昇すると女性の昇進率が何ポイント改善するか」を数値化できる。

「一部の要因だけに責任を押し付けない」点で、構造的差別の分析に有効。

  1. 標準偏回帰係数

各変数を標準化して比較可能にした指標。

係数の大小比較により、どの変数が最も影響力を持つかを明らかにできる。

例: 年収格差に対して「学歴」より「家事負担」の係数が大きければ、家庭内の性別役割分業が構造的要因であることが示される。

  1. 有意性の検定

各偏回帰係数がゼロかどうかを検定(t検定)。

複数変数の効果をまとめて検定(F検定)。

有意なら「統計的に意味のある要因」。

「偶然の差別」ではなく「構造的に有意な差別」が存在するかを数理的に確認できる。

  1. 信頼区間

偏回帰係数には「どの範囲に真の値が含まれるか」を示す信頼区間が設定できる。

例: 家事負担の係数が95%信頼区間で「−3 ~ −1」と出れば、「確実に女性にマイナスの影響を与えている」と解釈できる。

  1. ダミー変数

カテゴリカルデータを0/1で数値化。

例: 性別(男性=0, 女性=1)を説明変数に入れると、「性別による効果」が数値として表れる。

これにより「ジェンダー差別」をモデルに直接組み込むことが可能。

  1. 残差と誤差

誤差 ε: 真のモデルとの差(理論的に見えない部分)。

残差 e: 推定モデルと実データとの差(計算で確認可能)。

残差を分析することで「モデルでは説明しきれない不可視の差別や偏見」が見えてくる。

  1. 決定係数

R² = 回帰変動 ÷ 全変動

値が1に近いほど、説明変数が目的変数をよく説明している。

例: 女性の進学率の55%が「学校の性別比や立地」で説明できる場合、残り45%は他の不可視要因(文化、家庭規範など)に依存している。

  1. フェミニスト的読み替え

重回帰分析は「女性の経験を単一要因に矮小化せず、複数の社会的要因を同時に扱える」点が強み。

説明変数を選ぶ段階でジェンダーバイアスが入り込むリスクがあるため、批判的に扱う必要もある。

数式は中立に見えても、解釈は権力構造に依存する。


!pip install statsmodels matplotlib pandas

import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

# -------------------------
# 1. データ作成(仮想データ)
# -------------------------
# 女性の年収を目的変数 (y)
# 学歴, 勤務時間, 家事負担, 職場文化 を説明変数 (x1...x4)

data = {
    "education":   [12, 16, 14, 18, 12, 20, 15, 17, 13, 19],  # 学歴(年数)
    "work_hours":  [30, 40, 35, 50, 25, 55, 38, 42, 28, 48],  # 勤務時間(週)
    "housework":   [30, 20, 25, 10, 35, 5, 22, 15, 33, 12],   # 家事負担(時間/週)
    "culture":     [2, 3, 3, 4, 1, 5, 3, 4, 2, 5],            # 職場文化(1-5尺度)
    "income":      [250, 400, 300, 600, 200, 700, 350, 500, 220, 650] # 年収(万円)
}
df = pd.DataFrame(data)

# -------------------------
# 2. 重回帰モデルの構築
# -------------------------
X = df[["education", "work_hours", "housework", "culture"]]
y = df["income"]

X = sm.add_constant(X)  # 切片 β0 を追加
model = sm.OLS(y, X).fit()

# -------------------------
# 3. 結果の表示
# -------------------------
print(model.summary())

# -------------------------
# 4. フェミニスト的読み替え(解釈の例)
# -------------------------
print("\n--- Feminist Interpretation ---")
print("・学歴の係数が正なら、教育機会の拡充が女性の年収を押し上げる証拠。")
print("・勤務時間の係数が正でも、家事負担の係数が負なら、二重負担の構造が示唆される。")
print("・職場文化の係数が大きければ、『ジェンダー平等な職場環境』が女性の成果を強く規定している可能性。")
print("・残差に偏りがあれば、モデルに含めていない構造的差別の要因が潜んでいると考えられる。")

# -------------------------
# 5. 可視化(例: 学歴と収入の関係)
# -------------------------
plt.scatter(df["education"], df["income"], color="blue")
plt.xlabel("Years of Education")
plt.ylabel("Income ")
plt.title("Education vs Income (Feminist Regression Example)")
plt.grid(True)
plt.show()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?