2026/05/21
df2 = pd.merge(df, df_ind, on=["銘柄コード", "会社名"])
df2["営業利益"] = df2["売上高"] - df2["売上原価"] - df2["販管費"]
df2["roa"] = df2["営業利益"] / df2["総資産"]
df2["売上高利益率"] = df2["営業利益"] / df2["売上高"]
df2["総資産回転率"] = df2["売上高"] / df2["総資産"]
df2_clean = df2.loc[
(df2["棚卸資産"] <= df2["棚卸資産"].quantile(0.99)) &
(df2["売上原価"] <= df2["売上原価"].quantile(0.99))
]分析で使いたい概念が直接データとして存在しない場合がある。たとえば「経営者の能力」や「ブランド力」は数字で測れない。そこで、その概念と相関が高い別の変数(代理変数)を代わりに使う。
| 測りたい概念 | 代理変数の例 |
|---|---|
| 経営能力 | ROA(資産をどれだけ効率よく使えているか) |
| 企業の規模感 | 売上高、総資産 |
| 成長性 | 売上高の前年比 |
代理変数はあくまで「近似」なので、その限界を意識しながら使うことが重要。
分析を始める前に、変数の関係を図で整理することで「何を推定しているか」が明確になる。
リビーボックスとは、以下の3種類の変数を並べたフレームワーク:
[独立変数 X] → [従属変数 Y]
↑
[コントロール変数 Z]
| 変数の種類 | 役割 | 例 |
|---|---|---|
| 従属変数(Y) | 説明したい結果 | 売上原価 |
| 独立変数(X) | 関心がある要因 | 棚卸資産 |
| コントロール変数(Z) | 取り除きたい交絡 | 売上高(企業規模) |
分析を始める前にリビーボックスを書くことで、「どの変数をモデルに含めるべきか」「何を主張できるか」が整理される。
学術論文では複数のモデルを横に並べた係数表を掲載するのが慣習。モデル(1)は基本モデル、モデル(2)以降でコントロール変数を追加するという構成が多い。
stargazer を使うと、複数モデルを自動で整形した表を生成できる。
| Dependent variable: 売上原価 | ||
| (1) | (2) | |
| Intercept | 136448.211*** | 10055.778 |
| (45180.446 , 227715.977) | (-10882.869 , 30994.426) | |
| 売上高 | 0.759*** | |
| (0.682 , 0.836) | ||
| 棚卸資産 | 3.523*** | -0.369 |
| (2.208 , 4.839) | (-0.830 , 0.093) | |
| Observations | 17 | 17 |
| R2 | 0.685 | 0.990 |
| Adjusted R2 | 0.664 | 0.989 |
| Residual Std. Error | 85922.924 (df=15) | 15491.847 (df=14) |
| F Statistic | 32.579*** (df=1; 15) | 724.805*** (df=2; 14) |
| Note: | *p<0.1; **p<0.05; ***p<0.01 | |
モデル(1)からモデル(2)に移ったとき、棚卸資産 の係数がどう変わるかを確認する。係数が大きく変わる場合、売上高 が交絡変数として機能していたことを意味する。
ゼミ