2025/07/04
前回は
コスト構造を理解し,意思決定やコストマネジメントに役立てるためのコスト構造の推定を扱いました。
今回は,
企業のコスト構造を推定し,それを通して投資の判断や政策判断に役立てよう,というイメージです。
具体的には公表財務諸表データを使ったコストビヘイビア分析を扱います。
伝統的には,コストと活動量(売上高)は比例関係にあるとされてきた
だけど, Anderson, Banker, and Janakiraman (2003) は売上高の増加時におけるコストの増加率が,同額の売上高の減少時におけるコストの減少率より小さい場合があることを発見。
売上高の変化とコストの変化は単純な比例関係を想定していたけど,どうも違うみたいだ。
Balakrishnan, Petersen, and Soderstrom (2004)
公表財務データは基本的にすごく高いデータベースから入手します。
政府の提供するEDINETからもデータをとってくることができますが
提供期間が限られる
XBRLというデータ格納形式の操作性
等の問題から使い勝手が悪く研究目的で使われているのをみたことがありません。
今回は,小笠原先生(甲南大学)と早田さん(神戸大学の大学院生のはず)が抽出し,教育目的で提供してくださっているEDINET経由で取得したデータを使います (小笠原 and 早田 2021) 。
| 変数名 | 内容 | 変数名 | 内容 | 
|---|---|---|---|
| f1 | EDINETコード | x20 | 資本金 | 
| f2 | 証券コード | x21 | 資本剰余金 | 
| f3 | 会計期間終了日 | x22 | 利益剰余金 | 
| f4 | 提出日 | x23 | 自己株式 | 
| f5 | 当事業年度開始日 | x24 | 評価・換算差額等 | 
| f6 | 当事業年度終了日 | y1 | 売上高 | 
| x1 | 現金及び現金同等物の残高 | y2 | 売上原価 | 
| x2 | 資産 | y3 | 売上総利益又は売上総損失 | 
| x3 | 流動資産 | y4 | 販売費及び一般管理費 | 
| x4 | 固定資産 | y5 | 給料及び手当 | 
| x5 | 有形固定資産 | y6 | 減価償却費/販売費及び一般管理費 | 
| x6 | 無形固定資産 | y7 | 研究開発費 | 
| x7 | 投資その他の資産 | y8 | 営業利益又は営業損失 | 
| x8 | 負債 | y9 | 営業外収益 | 
| x9 | 流動負債 | y10 | 営業外費用 | 
| x10 | 短期借入金 | y11 | 支払利息 | 
| x11 | 1年内償還予定の社債 | y12 | 経常利益又は経常損失 | 
| x12 | 1年内返済予定の長期借入金 | y13 | 特別利益 | 
| x13 | 固定負債 | y14 | 特別損失 | 
| x14 | 社債 | y15 | 税引前当期純利益又は税引前当期純損失 | 
| x15 | 転換社債型新株予約権付社債 | y16 | 親会社株主に帰属する当期純利益又は親会社株主に帰属する当期純損失 | 
| x16 | コマーシャル・ペーパー | y17 | 包括利益 | 
| x17 | 長期借入金 | z1 | 営業活動によるキャッシュ・フロー | 
| x18 | 純資産 | z2 | 減価償却費/営業活動によるキャッシュ・フロー | 
| x19 | 株主資本 | z3 | 投資活動によるキャッシュ・フロー | 
| z4 | 財務活動によるキャッシュ・フロー | 
ufo <- ufo |>
  rename(
    id = f1,
    code = f2,
    end = f3,
    submit = f4,
    year_start = f5,
    year_finish = f6,
    cash = x1,
    asset = x2,
    current_assets = x3,
    fixed_assets = x4,
    tangible = x5,
    intangible = x6,
    other_assets = x7,
    liability = x8,
    current_liability = x9,
    short_debt = x10,
    bonds_due_within_1_year = x11,
    long_term_debt_due_within_1_year = x12,
    fixed_liability = x13,
    bonds = x14,
    convertible_bonds = x15,
    commercial_paper = x16,
    long_debt = x17,
    net_worth = x18,
    shareholders_equity = x19,
    capital_stock = x20,
    capital_surplus = x21,
    retained_earnings = x22,
    treasury_stock = x23,
    valuation_and_translation_adjustments = x24,
    sales = y1,
    cogs = y2,
    gross = y3,
    sga = y4,
    salary = y5,
    depreciation = y6,
    r_and_d = y7,
    operating_income_loss = y8,
    non_operating_income = y9,
    non_operating_expenses = y10,
    interest = y11,
    ordinary_income = y12,
    extraordinary_income = y13,
    extraordinary_losses = y14,
    income_before_income_taxes = y15,
    net_income_attributable_to_owners_of_the_parent = y16,
    comprehensive_income = y17,
    cf_from_operating_activities = z1,
    depreciation_expenses_cf = z2,
    cf_investing = z3,
    cf_financing = z4
  )
ufo <- ufo |>
  mutate(code = code / 10) |>
  mutate(code = as.character(code))企業名が欲しかったので,日本証券取引所グループから持ってきた会社コードと企業名一覧データをくっつける
\(Cost\)を何らかの費用( Anderson et al. (2003) やそれに続く研究では販売費及び一般管理費 ),\(Sales\) を売上高とすると
\[ \log \frac{Cost_{i,t}}{Cost_{i,t-1}} = \beta_0 + \beta_1 \log \frac{Sales_{i,t}}{Sales_{i,t-1}} + \beta_2 Dec_{i,t} \log \frac{Sales_{i,t}}{Sales_{i,t-1}} + \varepsilon_{i,t} \tag{1}\]
ただし,\(i\)は企業,\(t\)は年度を表し,\(Dec\) は企業の売上高が減少した場合に 1,そうでない場合に0を取るダミー変数。
つまり
\[ \begin{cases} \log \frac{Cost_{i,t}}{Cost_{i,t-1}} = \beta_0 + \beta_1 \log \frac{Sales_{i,t}}{Sales_{i,t-1}} + \varepsilon_{i,t} & 増収時 \\ \log \frac{Cost_{i,t}}{Cost_{i,t-1}} = \beta_0 + (\beta_1 + \beta_2 ) \log \frac{Sales_{i,t}}{Sales_{i,t-1}} + \varepsilon_{i,t} & 減収時 \end{cases} \]
となる。ここで,\(\frac{Cost_{i,t}}{Cost_{i,t-1}}(\frac{Sales_{i,t}}{Sales_{i,t-1}})\)はコスト(売上高)の前年比,それにlogをとっているので,前年比コスト(売上高)の変化率,と解釈できる。
増収時と減収時の売上高の変化率に対するコストの変化率が違うかどうかを知りたいので,注目するのは,\(\beta_1\)(増収時)と\(\beta_1 + \beta_2\)(減収時)の差。
model <- lm(
  dlogsga ~ dlogsales + dec_dlogsales,
  data = data
)
m <- summary(model)
modelsummary(
  list(model),
  stars = stars,
  estimate = "{estimate}{stars}",
  align = 'ld',
  fmt = fmt_decimal(digits = 2, pdigits = 3),
  gof_map = c("nobs", "r.squared", 'adj.r.squared')
) |>
  style_tt(i = 5, background = '#C6DBCE')| (1) | |
|---|---|
| (Intercept) | 0.02*** | 
| (0.00) | |
| dlogsales | 0.49*** | 
| (0.01) | |
| dec_dlogsales | -0.06*** | 
| (0.01) | |
| Num.Obs. | 8390 | 
| R2 | 0.403 | 
| R2 Adj. | 0.403 | 
その後の研究で,Bankerらは,このようなコストの非対称性が起こる理由を資源調整コストに求めるように(Banker and Byzalov 2014; Banker, Byzalov, Fang, and Liang 2018)
ある年の売上高が前年より下がったとしても,それに対応して,経営資源を削減できる?
この考えに従うと,固定費と直接費も,資源調整コストの大きさによって区分し直すことができる。
文書なら
html)docx)tex)pdf)スライドなら
html)pptx)pdf)その他にも
などなど色々な形で出力できます
また,
といった様々なプログラミング言語での分析結果を含めることができます
Note
詳しくはQuarto公式ページ
これらは,Rstudioと同じPosit社が提供するQuartoというサービスで実現されます。
ここからは,
って話をした後で
について簡単に説明します
ワード文書は,文書の形式(フォントの種類とか大きさとか枠とか)を調整することと中身書くことを同時にやることになります。
パワポではさらに複雑で,文書や文字,図表の配置と中身を考えることを同時にやります
これってすごく非効率では?
Quartoを使うと,中身はテキスト形式で書いていけます。
というふうに作業を分割できます。
使い回しもしやすいです
文献の引用→文献リスト作成も自動でできるように設定可能
数式の挿入はワードよりはるかに便利
スライドのレイアウトはほぼ自動
普通?分析の結果はスライドや文書ファイルにまとめる。その際分析結果の図表をRなどの分析環境からコピーして貼る
通常分析はやってみて検討してやり直してを繰り返す
Quartoなら
データ分析において重要なことの一つが「再現性」
Quartoを使って分析からレポート作成までしておくとコードとその出力結果を一つのドキュメントにまとめることができます。
といったことが明確に記録される
これにより、どのようなコードが実行され、どのような結果が得られたかを一目で確認でき、他の人が同じコードを実行することで同じ結果を再現できます。
Quartoでレポートやスライドを作るにあたって,分析コード(RとかPythonとか)以外に必要なのが,Markdown記法に関する知識
特にスライドやWebページを作るとき,デザインに凝りたいならhtmlやcssの知識が必要です
見出し
「#」の後に半角スペースで見出しになります。「##」のように増やすと小見出しになります。
箇条書き
「-」の後に半角スペースで箇条書きになります。
「1.」の後に半角スペースで番号付きリストになります。
太字と斜め字
「*」で囲むとその間の文字が 「斜めに」(⌘ + Iでも)
「**」で囲むとその間の文字が 太字になります。(⌘ + Bでも)
コード
「`」で囲むとその間の文字がコードになります(⌘ + Dでも)
「```」と打つとコードブロックが作れます
1+1
lm(y~x,data=data)数式
「$」で囲むと数式になります : \(y = ax +b\)
「$$」で囲むと真ん中寄せの数式に
\[ y = ax +b \]
横線
「-」を3つ連続で打つと横線が出ます
ページ分けはレベル2以上の見出し(##)か,水平線
その他色々できます(公式サイト)
完成したら,⇨Renderボタンを押す
文書の一番上,囲まれている部分はyamlヘッダーとかいって,タイトル,著者情報,日付なんかを入れられる。
スライドの細かい設定もここをいじったらできる(めちゃくちゃ色々設定できる)
revealjsというのはスライドの形式。ここをhtmlとかpdfとかdocxとかに変えたら,違う形式で出力できる
Quartoを使うと,データ分析からレポート・スライド作成まで一気通貫にできます
慣れたらwordやpower pointよりも便利です
分析・執筆作業と体裁を整える作業を分離できるので作業効率が上がる(気がします)
期末レポート作る際とかに試してみてください
コストの下方硬直性の研究は,販売費及び一般管理費(SG&A)を対象として研究されてきました。
一方で,販管費には何百,何千もの費目が含まれているとも言われます(Tracy and Tracy 2014)
経営者の戦略的な意思決定を捉えるためには,より細分化された費目を用いた分析も役に立ちそうです 。
以下の分析コードと説明内容をQuartoのqmdファイルで提出してください。分析コードは実行可能なようにR Code Chunkに書いてください。
data <- data |>
  group_by(code) |> 
  mutate(lag_salary = lag(salary),
         lag_r_and_d = lag(r_and_d),
         lag_cogs = lag(cogs),
         dlogsalary = log(salary/lag_salary),
         dlogr_and_d = log(r_and_d/lag_r_and_d),
         dlogcogs = log(cogs/lag_cogs))
data <- data |>
  mutate(dlogr_and_d = ifelse(is.infinite(dlogr_and_d) | is.nan(dlogr_and_d), NA, dlogr_and_d))
# 回帰
Salary <- lm(dlogsalary ~ dlogsales + dec_dlogsales, data = data) 
RandD <- lm(dlogr_and_d ~ dlogsales + dec_dlogsales, data = data) 
cogs <- lm(dlogcogs ~ dlogsales + dec_dlogsales, data = data) 
list(Salary = Salary,RandD = RandD,CoGS = cogs) |> 
  modelsummary(stars = stars,
             estimate = "{estimate}{stars}",
             align = 'lddd',
             fmt = fmt_decimal(digits = 2, pdigits = 3),
             gof_map = c("nobs", "r.squared", 'adj.r.squared')) |> 
  style_tt(i = 5, background = '#C6DBCE') | Salary | RandD | CoGS | |
|---|---|---|---|
| (Intercept) | 0.03*** | 0.02** | 0.01*** | 
| (0.00) | (0.01) | (0.00) | |
| dlogsales | 0.32*** | 0.02 | 0.90*** | 
| (0.02) | (0.07) | (0.01) | |
| dec_dlogsales | -0.05** | 0.11 | 0.09*** | 
| (0.03) | (0.10) | (0.01) | |
| Num.Obs. | 3406 | 3395 | 8322 | 
| R2 | 0.169 | 0.001 | 0.767 | 
| R2 Adj. | 0.169 | 0.000 | 0.767 | 
販売費及び一般管理費の明細を使っていろんな費目を推定してみた論文
2025 経営データ分析(会計)