---
title: "14 最終レポートの説明"
date: 2026/07/17
draft: false
format:
html: default
---
## 概要 {data-name="概要"}
- 提出期限は,2026年8月9日(日)23:55とし,提出先はBEEF+の指定された場所(財務会計・管理会計別々)とします.
- ファイル形式は,`.qmd`ファイル(あるいは`.Rmd`ファイル)とし,ファイル名は財務会計は `学籍番号_名前_FA`,管理会計は`学籍番号_名前_MA`とすること.
- 採点基準は,(1)指示通りのことを実現するコードが書けているか否か,及び(2)コードの可読性,(3) 結果の解釈である.(2) は,第三者が提出されたコードを見たとき,なぜそのようなコードを書いているのかが一目瞭然に分かるかどうかにより評価する.したがって,適宜適切にコード内にコメントを付すこと.適切なコメントは,第三者による可読性を高めるほか,再現可能性の向上にも寄与するものである.
## 課題1(財務会計) {data-name="課題1"}
- 本課題の目的は,会計研究の金字塔とも呼ぶのに相応しい @1996_Sloan の分析をシミュレーション・データにより追試することを通じて,実践的な財務・株式データのハンドリング,及び会計情報の株式市場での役立ちに精通することである.
### 課題を解く前に:アクルーアルズの基礎知識
本課題を解くために必要となる会計とファイナンスの前提知識を,ここで簡単に整理しておく.講義中に詳しく扱わなかった内容なので,コーディングに取りかかる前に必ず一読してほしい.
#### 利益はキャッシュではない
現行の会計は**発生主義** (accrual basis) を採用している.すなわち,収益は現金を受け取ったときではなく,財・サービスを引き渡して稼得したときに計上され,費用も現金を支払ったときではなく,収益との対応関係に基づいて計上される.その結果,損益計算書の当期純利益と,同じ期間に営業活動から実際に増えた現金(営業活動によるキャッシュ・フロー)は,一般に一致しない.
数値例で確認しよう.A社の当期の売上高は12,000であるが,うち現金で回収済みなのは7,500に留まり,残りの4,500は掛売り(未回収の売掛金)である.また,費用4,000のうち現金で支払済みなのは3,000であり,残りの1,000は掛仕入れによる未払い(買掛金)である.このとき,
| | 損益計算書(発生主義) | 現金収支(現金主義) |
|------|------------------:|------------------:|
| 収益・収入 | 12,000 | 7,500 |
| 費用・支出 | 4,000 | 3,000 |
| **差引** | **当期純利益 8,000** | **営業CF 4,500** |
となり,利益8,000とキャッシュ・フロー4,500の間には3,500のズレが生じる.このズレこそが**アクルーアルズ**である.
::: {.callout-important icon="false"}
#### 定義:アクルーアルズ(会計発生高; accruals)
$$
\text{アクルーアルズ} \equiv \text{当期純利益} - \text{営業活動によるキャッシュ・フロー}
$$
当期純利益のうち,営業活動による現金増加の**裏付けのない**部分.A社の例では $8{,}000 - 4{,}500 = 3{,}500$.
:::
A社の売掛金4,500は,将来回収されれば現金になる「はず」の金額であるが,貸倒れや回収遅延のリスクを伴う.つまり,アクルーアルズを多く含む利益は,経営者の見積もりや将来の不確実性を多く含む利益である.
#### 利益の質(Quality of Earnings)
同じ金額の当期純利益でも,その中身は企業によって大きく異なる.例えば,(先ほどのA社とは別に)いずれも当期純利益が70のC社とD社を考えよう.
| | 営業活動によるCF | アクルーアルズ | 当期純利益 |
|------|---:|---:|---:|
| C社(質が低い) | 30 | 40 | 70 |
| D社(質が高い) | 90 | $-20$ | 70 |
C社の利益70の大部分は現金の裏付けのないアクルーアルズであり,D社の利益は現金収入に十分に裏付けられている.このとき,D社の利益はC社よりも**質が高い**という.なお,アクルーアルズが負になるのは,減価償却費のように現金支出を伴わない費用が計上される場合や,過年度に計上した売掛金を当期に回収した場合などであり,健全な企業でもごく普通に観察される.
#### アクルーアルズの反転と利益の持続性
アクルーアルズは,現金収支と損益の期間帰属のズレであるから,翌期以降に必ず**反転** (reversal) する.例えば,当期に掛売りで計上した売上は,翌期に回収された時点で,キャッシュ・フローを増やす一方でアクルーアルズを減らす(当期にプラスだった分が翌期にマイナスとして現れる).
営業活動によるCFが毎期200で安定している企業が,$t$期に大きな正のアクルーアルズ($+100$)を計上したケースを考えよう.
| | $t-5$ | $t-4$ | $t-3$ | $t-2$ | $t-1$ | $t$ | $t+1$ | $t+2$ | $t+3$ | $t+4$ | $t+5$ |
|------|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| ① 営業活動によるCF | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 200 |
| ② アクルーアルズ | $-50$ | $-40$ | $-30$ | $-10$ | 50 | **100** | $-20$ | $-20$ | $-20$ | $-10$ | $-20$ |
| ①+② 当期純利益 | 150 | 160 | 170 | 190 | 250 | **300** | 180 | 180 | 180 | 190 | 180 |
この数値例を図示すると,次のようになる.
::: {style="text-align: center;"}
<img src="images/accruals_reversal.png" alt="アクルーアルズの反転と利益の持続性" style="width: 92%;"/>
:::
$t$期の利益300は,営業の実態(CF 200)から大きく上方に乖離しているが,$t+1$期以降はアクルーアルズの反転により,利益は180前後の水準へと戻ってしまう.すなわち,**アクルーアルズ主導でかさ上げされた利益は持続しない**.反対に,キャッシュ・フローに裏付けられた利益は持続しやすい.これが @1996_Sloan の仮説1の内容であり,本課題の問題2(FIGURE 1の再現)で実際のデータから確認する現象である.
#### 効率的市場仮説とアクルーアルズ・アノマリー
ファイナンスの**効率的市場仮説** (Efficient Market Hypothesis; EMH) によれば,市場が効率的である限り,公表された情報は即座に株価に織り込まれる.裏を返せば,決算数値のような**公表済みの情報を使って,将来のリスク調整後リターンを系統的に予測することはできない**はずである.
ところが,投資家が利益の「額面」だけに注目し,その中身がキャッシュ・フローなのかアクルーアルズなのかを無視して株価を形成しているとしたらどうなるだろうか.先のC社とD社は同じ利益70であるから,両社には同じ株価(例えば100)が付くことになる.しかし翌期以降,C社の利益はアクルーアルズの反転によって実力相応の水準へと下がり,D社は高い利益を維持する.すると株価も,C社は本来の理論価値(例えば96)へと下落し,D社は理論価値(例えば105)へと上昇していく.つまり,ポートフォリオ形成時点で誰もが知っているはずのアクルーアルズの大小によって,**将来のリターンが予測できてしまう**.
これはEMHと矛盾する現象,すなわち**アノマリー**であり,**アクルーアルズ・アノマリー** (accruals anomaly) と呼ばれる. @1996_Sloan はこれを最初に体系的に示した研究であり,その検証を追体験するのが本課題の問題3である.
#### コーディングへの橋渡し
以上の概念は,本課題では次のように計算・検証される.
| 概念 | 本課題での対応 |
|------|------|
| 当期純利益 | `d01110` |
| 営業活動によるキャッシュ・フロー | `f01001` |
| アクルーアルズ | $\text{Net Income} - \text{Cash-Flow}$(定義通りの引き算) |
| 規模の標準化 | 各変数を前期末の資産合計(`b01110`のラグ)で割る |
| 反転・持続性の確認 | 問題2:イベント・イヤー分析(FIGURE 1) |
| アノマリーの検証 | 問題3:アクルーアルズ・ポートフォリオのCAPMアルファ |
補足が二点ある.第一に,各変数を前期末の資産合計$\text{TA}_{j,t-1}$で割る(デフレートする)のは,規模の異なる企業を横並びで比較するためである.金額のままでは大企業のアクルーアルズは必然的に大きくなってしまうが,期首の資産1円当たりのフローに直せば,規模によらず比較できる.第二に,アクルーアルズは売掛金や棚卸資産等の貸借対照表項目の増減から積み上げて計算する方法もあるが,本課題ではキャッシュ・フロー計算書を用いた上記の定義(利益-営業CF)をそのまま用いればよい.
### 問題1
- 現行の発生主義会計によって計算される会計利益は,二つの構成要素に分けることができる.すなわち,(1)営業活動によるキャッシュ・フロー要素と(2)それ以外のアクルーアルズ(会計発生高)要素である.前者は,当期純利益のうち営業活動によって現金増加の裏付けのある金額を示し,他方,後者は,それ以外の金額を表す.したがって,同額の当期純利益を計上する二つの企業があったとしても,前者が多く,後者が少ない企業の当期純利益は質が高い一方で,後者が大部分を占める企業の当期純利益は質が低いと見なすことができる.
- シミュレーション・データ [financial_data.csv](https://www.dropbox.com/scl/fi/g6qqm3faxt5t2j9258r79/financial_data.csv?rlkey=1wk1t1a437itez5j89jo9cam8&dl=0)を利用し,以下で定義される各変数を計算し, @1996_Sloan のTABLE 1のPanel Aを再現し,自身で作成した`output`フォルダに`table1.csv`として出力せよ.
$$
\begin{align*}
\text{Cash-Flow}_{j,t} &\equiv \frac{\text{Cash-Flow from Operation}_{j,t}}{\text{TA}_{j,t-1}} \\
\text{Net Income}_{j,t} &\equiv \frac{\text{X}_{j,t}}{\text{TA}_{j,t-1}} \\
\text{Accruals}_{j,t} &\equiv \text{Net Income}_{j,t} - \text{Cash-Flow}_{j,t}
\end{align*}
$$
- ただし,$\text{Cash-Flow from Operation}_{j,t}$は企業$j$の$t$期の営業活動によるキャッシュ・フロー,$\text{X}_{j,t}$は当期純利益,$\text{TA}_{j,t-1}$は$t-1$時点(すなわち,$t-1$期末)の資産合計をそれぞれ表す.
- 本課題全体を通じて,分析対象は,上記の三変数が計算可能で,かつ,3月末決算企業としよう.
- 表の形式は問わない(例えば,1列目にポートフォリオ・ランキング,2列目以降に各変数の平均値と中央値を配置する形式でも構わない)一方,年度ごとに$\text{Accruals}_{j,t}$に応じてポートフォリオ・ソートを行い,十個のポートフォリオのそれぞれについて,各変数の平均値と中央値を報告すること.また,桁数は小数第三位まで表示すること.
- `financial_data.csv`に収録されている各項目の概要は,以下の通りである.財務項目については,全て百万円単位で収録されている.
| 項目 | 説明 |
|--------|--------------------------------------------------------------------|
| acc | 決算年月 (YYYY-MM形式) |
| macc | 決算月数 |
| scflg | 連結/単独フラグ (1: 単独, 2: 連結) |
| secflg | 連結会計基準フラグ (1: 日本基準, 2: SEC基準, 3: IFRS基準, 0: 単独) |
| d01110 | 当期純利益 |
| f01001 | 営業活動によるキャッシュ・フロー |
| b01110 | 資産合計 |
| WC | 正味運転資本 (Net Working Capital) |
| NCO | 非流動営業資産 (Non-Current Operating Assets) |
| FIN | 純金融資産 (Net Financial Assets) |
### 問題2
- @1996_Sloan の仮説1は,次の通りである.
**H1:** The persistence of current earnings performance is decreasing in the magnitude of the accrual component of earnings and increasing in the magnitude of the cash flow component of earnings (p. 291).
- これは,かみ砕いて言うと,「当期利益の質が低い高アクルーアルズ企業(裏を返せば,低営業キャッシュ・フロー企業)ほど,将来の利益が相対的に低迷する」という仮説である.この仮説を検証するために,`ggplot2`を用いて,@1996_Sloan のFIGURE 1を再現せよ.図の形式は問わない一方,それぞれの折れ線グラフが,いずれのポートフォリオのものを指すかが明確になるように,凡例を適切に設定すること.また,$x$軸と$y$軸のラベルは,原論文に従い,それぞれ`Event Year`と`Mean Earnings`としよう.
- 2005年から2012年のそれぞれの年度において,$\text{Net Income}_{j,t}$,$\text{Accruals}_{j,t}$,$\text{Cash-Flow}_{j,t}$の大きさに応じてポートフォリオ・ソートを行い,両極端なポートフォリオ,すなわち,第1十分位と第10十分位ポートフォリオに属する企業の平均的な$\text{Net Income}_{j,t}$を前後5期にわたって計算し,それを描画すること.したがって,手順としては年度$t$において各変数の大きさに応じて十分位ポートフォリオを作成し,各企業の$\text{Net Income}_{j,t - 5}$から$\text{Net Income}_{j,t + 5}$を求める.あとは,$t-5$期から$t+5$期の11期間にわたって,それをポートフォリオごとに集計することでグラフを描画することができる.
- なお,平均の計算にあたっては,八つの形成年(2005年から2012年)をプールした上で,ポートフォリオごと・イベント・イヤーごとに$\text{Net Income}$を平均すればよい.また,上場廃止や新規上場等により前後5期の一部のデータが存在しない企業・年度については,欠損値として計算から除外して構わない.
- 三つのグラフが完成したら,それを一つの`png`ファイルへと集約し,自身で作成した`output`フォルダに`figure1.png`として出力せよ.
### 問題3
- 仮説1が示唆する通り,高アクルーアルズ企業ほど,将来的に利益が低迷するという現象は,実は国を問わず,広く観察される.このようなアクルーアルズの性質は,広く知られた事実であり,投資家が合理的である限り,高アクルーアルズ企業の株価は低く付され,反対に低アクルーアルズ企業の株価は高く付されるはずである.ただし,もし投資家が,利益の質を考慮せず(アクルーアルズの多寡を無視して),当期純利益だけを見てナイーブに投資しているとすれば,高アクルーアルズ銘柄も低アクルーアルズ銘柄も同じように評価されることになる.結果として,当初,高(低)アクルーアルズ銘柄の株価は割高(割安)に形成され,将来的にその銘柄のリターンは低下(上昇)することになる.こうした背景から, @1996_Sloan は,仮説2(ii)の仮説を提示している.
**H2(ii):** A trading strategy taking a long position in the stock of firms reporting relatively low levels of accruals and a short position in the stock of firms reporting relatively high levels of accruals generates positive abnormal stock returns.
- この仮説を検証するため, @1996_Sloan は,年度ごとに$\text{Accruals}_{j,t}$に基づいてポートフォリオ・ソートを行い,ポートフォリオ内の各銘柄に等金額を配分する等加重ポートフォリオを形成した.ポートフォリオ形成後,12ヶ月間にわたるリターンを計算しては,またポートフォリオを組み直す(これを**リバランス**と言う)という戦略を分析対象期間を通じて行い,確かに高(低)アクルーアルズ・ポートフォリオほど,将来リターンが低い(高い)傾向にあることを明らかにし,仮説2(ii)を支持する証拠を得た.
- その分析に用いられているのが,CAPMアルファである.各ポートフォリオについて,分析対象期間にわたって実現超過リターン$R_{P,t}^{e}$が毎月得られるわけであるから,CAPMを前提として**時系列回帰**^[講義資料第8回参照.] (time-series regression)を実行することにより,各ポートフォリオのCAPMアルファ$\alpha_{P}$を推定することができる.
$$
\begin{align*}
\underbrace{R_{P,t}^{e}}_{\substack{\textbf{ポートフォリオ$P$の} \\ \textbf{実現超過リターン}}} = \alpha_{P} + \beta_{P} \underbrace{R_{M,t}^{e}}_{\substack{\textbf{市場ポートフォリオの} \\ \textbf{実現超過リターン}}} + \varepsilon_{P,t}
\end{align*}
$$
::: {style="text-align: center;"}
<img src="images/Fig22.png" alt="Figure 22" style="width: 80%;"/>
:::
- 教科書第6.4節で述べているように,証券投資の実務においては,アルファはファンド運用者の運用スキルの評価基準として利用される.その理由は,CAPMを始めとするファクター・モデルは,ファンド運用のリスクに応じた適切なリターンのベンチマークとして利用されており,アルファはファンド運用者の固有の付加価値を表すものとして,彼らの報酬決定の基準となるからである.すなわち,実現超過リターンの平均値は,(1)CAPMを前提として,そのポートフォリオのリスクに応じたリターン$\hat{\beta}_{P}\bar{R}_{M}^{e}$と(2)それを更に超えたリターン$\hat{\alpha}_{P}$に分解することができるので,正のアルファが得られるポートフォリオに投資したファンド運用者はリスクに応じたリターンを超える異常なリターンを獲得したと賞賛されることになるのである.
::: {style="text-align: center;"}
<img src="images/Fig40.png" alt="Figure 40" style="width: 60%;"/>
:::
- 高(低)アクルーアルズ・ポートフォリオほど,低い(高い)アルファが得られるのかを分析することで仮説2(ii)を検証してみよう.最初に各$t$年3月期の$\text{Accruals}_{j,t}$を基に十分位ポートフォリオを作成しよう.有価証券報告書は一般的に決算期末から起算して90日以内に公表されることを鑑み,実際にポートフォリオを運用する期間は$t$年7月から$t+1$年6月の12ヶ月間とする.このように,決算期末からポートフォリオの運用を始めるまで三ヶ月のラグを置くことによって,投資家が決算短信や有価証券報告書を通じて,間違いなくアクルーアルズ情報を知っていることを保証する.それでもなお,既知のアクルーアルズが,将来リターンを予測できるか否かがこの問題の焦点である.
- ポートフォリオ形成年は,問題1の分析対象に含まれる全ての年度(2000年3月期から2017年3月期)としよう.したがって,ポートフォリオ・リターンの計算期間は,2000年7月から2018年6月までの216ヶ月間となる.
- 各銘柄への投資ウェイトは同額としよう.分析対象期間にわたって,年一回リバランスを行い,各月各ポートフォリオの実現超過リターンをベースにCAPMアルファを推定すると共に,各ポートフォリオの平均実現超過リターンとCAPMアルファを報告し,それぞれの$t$値を一覧表にまとめ,`output`フォルダに`table2.csv`として出力せよ.表の形式は問わないが,平均実現超過リターンとCAPMアルファは小数第三位まで,$t$値は小数第二位まで表示すること.
- それに加えて,ポートフォリオごとのCAPMアルファを棒グラフにより描画し,それを`output`フォルダに`figure2.png`として出力せよ.なお,$x$軸と$y$軸のラベルは,それぞれ`Portfolio Accruals Ranking`と`CAPM alpha`とすること.
- なお,各月の無リスク金利`R_F`や市場ポートフォリオの超過リターン$R_{M} - R_{F}$ (`R_Me`)に関する情報は[factor_data.csv](https://www.dropbox.com/scl/fi/mnh5q4bfghpnfocmd1f0o/factor_data.csv?rlkey=0blq5aymoas8h0b78m4n2scls&dl=0)に,個別銘柄の株式データは[stock_data.csv](https://www.dropbox.com/scl/fi/d6txxkv0f0gfy455l9bwp/stock_data.csv?rlkey=00150yd219v20rfyyrlaympa9&dl=0)に収録されている.`stock_data.csv`内に収録されている各項目は,以下の通りである.なお,各CSVファイルに収録されているリターンは,全て%表示であることに注意すること.
| 項目 | 説明 |
|----------------------|--------------------|
| `month` | 年月 (YYYY-MM形式) |
| `stock_price` | 株価 |
| `shares_outstanding` | 発行済株式数 |
| `R` | トータル・リターン |
::: callout-tip
#### ヒント!
- **`lubridate`を利用した日付処理:** 日付データを扱う際には,`financial_data.csv`の`acc`や`stock_data.csv`の`month`のようなデータを処理するために,`lubridate`パッケージが非常に便利である.このパッケージは日付操作を簡略化し,分析をより効率的に遂行するのを手助けしてくれる.
- **決算月数が12ヶ月の観測値のフィルタリング:** Accrualsのようなフロー測定を計算する際には,必ず12ヶ月の会計年度を持つ企業のみを分析に含めることが重要である.企業は会計期末をしばしば変更するため,このステップを踏むことにより,各変数について,全社横並びでの比較ができるようになる.
- **ラグ変数の取り扱い:** ラグ変数を計算する際には,前期の会計基準フラグ`secflg`に特に注意を払う必要がある.`secflg`が一貫している場合にのみラグ変数を計算することが重要である.これを怠ると,誤った解釈や歪んだ結果を招く可能性があるので,注意が必要である.
:::
## 課題2(管理会計) {data-name="課題2"}
企業の持つデータはさまざまなレベルで集計し,考察することができます。仮想データを使った分析を通して,体験してみてください。使用するデータは,[データのページ](data/index.qmd)第14回にあります。
### 設定
ある企業K社は,3つの工場(Factory1からFactory3)でコンピューター部品を作っています。部品は全部で3種類(A, B, C)です。データには,各工場での製品別の原価情報が含まれています。このデータを用いて,企業全体,各製品の収益性や工場のパフォーマンスについて検討したいと考えています。
なお,各製品の販売単価は,A = 180, B = 235, C = 300です。
```{r}
#| echo: false
#| output: false
options(scipen = 999)
pacman::p_load(tidyverse, magrittr, readxl, modelsummary, tinytable, here, patchwork, ggpubr)
set.seed(1)
generate_data <- function(n) {
# 各月に各工場が各製品を1つだけ作るようにするための組み合わせを生成
combinations <- expand.grid(
month = 1:12, # 月を数字にする
factory = c("Factory1", "Factory2", "Factory3"),
product = c("A", "B", "C")
)
# 必要な数の行をランダムに選択
selected_combinations <- combinations[sample(nrow(combinations), min(n, nrow(combinations))), ]
tibble(
month = selected_combinations$month,
factory = selected_combinations$factory,
product = selected_combinations$product,
quantity = round(runif(nrow(selected_combinations), 1000, 5000)), # 生産量を増やす
material_cost = case_when(
product == "A" ~ round(runif(nrow(selected_combinations), 50, 100) * quantity + runif(nrow(selected_combinations), 10000, 20000)),
product == "B" ~ round(runif(nrow(selected_combinations), 60, 110) * quantity + runif(nrow(selected_combinations), 12000, 22000)),
product == "C" ~ round(runif(nrow(selected_combinations), 70, 120) * quantity + runif(nrow(selected_combinations), 15000, 25000))
),
labor_cost = case_when(
product == "A" ~ round(runif(nrow(selected_combinations), 30, 60) * quantity + runif(nrow(selected_combinations), 10000, 20000)),
product == "B" ~ round(runif(nrow(selected_combinations), 40, 70) * quantity + runif(nrow(selected_combinations), 12000, 22000)),
product == "C" ~ round(runif(nrow(selected_combinations), 50, 80) * quantity + runif(nrow(selected_combinations), 15000, 25000))
),
overhead_cost = case_when(
product == "A" ~ round(runif(nrow(selected_combinations), 20, 40) * quantity + runif(nrow(selected_combinations), 15000, 25000)),
product == "B" ~ round(runif(nrow(selected_combinations), 30, 50) * quantity + runif(nrow(selected_combinations), 18000, 28000)),
product == "C" ~ round(runif(nrow(selected_combinations), 40, 60) * quantity + runif(nrow(selected_combinations), 20000, 30000))
),
other_cost = case_when(
product == "A" ~ round(runif(nrow(selected_combinations), 10, 20) * quantity + runif(nrow(selected_combinations), 5000, 10000)),
product == "B" ~ round(runif(nrow(selected_combinations), 15, 25) * quantity + runif(nrow(selected_combinations), 6000, 12000)),
product == "C" ~ round(runif(nrow(selected_combinations), 20, 30) * quantity + runif(nrow(selected_combinations), 7000, 15000))
)
) %>%
mutate(total_cost = material_cost + labor_cost + overhead_cost + other_cost)
}
data <- generate_data(180)
# 工場ごとの効率性の違いを反映:Factory1は労働集約的(材料費・労務費が割高),Factory3は設備集約的(間接費・その他費用が割高だが材料費・労務費は効率的)
# 注意:このDGP変更により,問題3(3-2・3-3)の具体的な数値・記述は変わる可能性があるため,採点前に本ファイルを再実行して確認してください。
factory_multiplier <- tibble(
factory = c("Factory1", "Factory2", "Factory3"),
variable_mult = c(1.15, 1.00, 0.85),
fixed_mult = c(0.85, 1.00, 1.30)
)
data <- data |>
left_join(factory_multiplier, by = "factory") |>
mutate(
material_cost = round(material_cost * variable_mult),
labor_cost = round(labor_cost * variable_mult),
overhead_cost = round(overhead_cost * fixed_mult),
other_cost = round(other_cost * fixed_mult),
total_cost = material_cost + labor_cost + overhead_cost + other_cost
) |>
select(-variable_mult, -fixed_mult)
data <- data |>
arrange(factory, month)
factories <- unique(data$factory)
for (factory in factories) {
factory_data <- data %>% filter(factory == !!factory)
# 費目が行、月が列になるように変形し、製品ごとに分割
transformed_data <- factory_data %>%
select(month, product, quantity, material_cost, labor_cost, overhead_cost, other_cost, total_cost) %>%
pivot_longer(cols = c(quantity, material_cost, labor_cost, overhead_cost, other_cost, total_cost), names_to = "cost_type", values_to = "cost") %>%
unite("item", product, cost_type, sep = ":::") %>%
pivot_wider(names_from = month, values_from = cost, values_fill = list(cost = 0)) |>
separate(item, into = c("product", "cost_type"), sep = ":::") |>
arrange(product)
# ファイルに保存
write_csv(transformed_data, here(paste0("data/", factory, ".csv")))
}
# 標準原価表(会社全体で共通の標準単価・固定費目標;工場ごとの効率差はここには反映しない)
standard_rates <- tibble(
product = c("A", "B", "C"),
material_rate_std = c(75, 85, 95),
material_fixed_std = c(15000, 17000, 20000),
labor_rate_std = c(45, 55, 65),
labor_fixed_std = c(15000, 17000, 20000),
overhead_rate_std = c(30, 40, 50),
overhead_fixed_std = c(20000, 23000, 25000),
other_rate_std = c(15, 20, 25),
other_fixed_std = c(7500, 9000, 11000)
)
# 標準原価表をファイルに保存
write_csv(standard_rates, here("data", "standard_cost.csv"))
product_prices <- c(A = 180, B = 235, C = 300)
```
### 問題1
データは工場ごとのファイルに分かれています。ファイルには製品別・月別の生産量及び原価情報が含まれています。これらを結合して,分析可能な形に直してください。なお,データセットの名前は`data`とし,各費目の列名は`cost_type`列に入っている費目名をそのまま使ってください。月は`month`,工場は`factory` という名前の列名をつけてください。
| | | | |
| --- | --- | --- | --- |
| `product` | 製品を識別する変数 | `overhead_cost` | 間接費 |
| `quantity` | 生産量 | `other_cost` | その他費用 |
| `material_cost` | 原材料費 | `total_cost` | 総費用 |
| `labor_cost` | 人件費 | | |
: `cost_type`に入っている変数
| | | | |
| --- | --- | --- | --- |
| `month` | 月 | `factory` | 工場を識別する変数 |
: 新しく作る変数
::: {.callout-note icon="false"}
#### ヒント
- 各ファイルでは,列が月,製品別の生産量・費目が行になっています。これを修正する必要があります。
- データの中に,どの工場のデータかを識別する情報は入っていません。各工場のデータを結合する前に,工場を識別するための変数を作っておく必要があります。
:::
::: content-hidden
```{r}
# 工場ごとのファイルを読み込み、元の形式に戻す
factories <- c("Factory1", "Factory2", "Factory3")
all_data <- list()
for (factory in factories) {
# ファイルを読み込む
factory_data <- read_csv(here("data", paste0(factory, ".csv")))
# データを元の形式に戻す
factory_data_modified <- factory_data %>%
pivot_longer(cols = c(-product, -cost_type),
names_to = "month",
values_to = "cost") |>
pivot_wider(names_from = cost_type,
values_from = cost)
# 工場名を追加
factory_data_modified <- factory_data_modified %>%
mutate(factory = factory)
# データをリストに追加
all_data[[factory]] <- factory_data_modified
}
# リストのデータを結合
data <- bind_rows(all_data)
```
:::
### 問題2
企業全体の収益性を確認し,全社的な業績目標に対する現状を検討したいと考えています。
1. まず,企業全体の固定費と変動費の構造を推定します。その準備として全工場での各月の合計生産量(`quantity_month`)と総費用(`total_month`)を算出し,企業・月単位のデータ(`data_month`)を作ってください。
1. 最小二乗法で固定費と変動費率を推定してください。推定結果から,この企業のコスト構造について説明してください。
1. この企業の製品の平均価格を,1年間で作った各製品の生産量と製品価格を使った加重平均で算出してください。
1. 費用関数と売上関数を図示してください。x軸は生産量(`quantity_month`),y軸は総費用(`total_month`)としてください。x軸は"`Quantity`" y軸は"`Amount of Money`"というラベルをつけてください。
1. 損益分岐点を計算してください。
1. この企業の目標売上高利益率(利益は売上高 - 総費用で計算)は10%です。目標を達成するために必要な数量を計算してください。
1. 損益分岐点の数量,目標利益率の数量と実績を見比べて現状を分析してください。
::: {.callout-note icon="false"}
#### ヒント
`data`は月×工場×製品単位ですが,`data_month`は,月単位のデータです。なので,加工前のデータは12ヶ月×3工場×3製品の108行あるはずですが,`data_month`の行数は12になるはずです。重複した行を削除するコマンドとしては,`distinct()`などがあります。
:::
::: content-hidden
#### 2-1.
固定費と変動費を最小二乗法で推定するには,総費用を数量で回帰すれば良いので
```{r}
# 月毎の業績変数を作成
data_month <- data |>
group_by(month) |>
summarise(total_month = sum(total_cost),
quantity_month = sum(quantity)) |>
ungroup()
data_month <- data_month |>
mutate(month = as.numeric(month))
data_month <- data_month |>
arrange(month)
```
#### 2-2.
```{r}
## 回帰分析
cost_line <- lm(total_month ~ quantity_month,
data = data_month)
summary(cost_line)
```
#### 2-3.
それぞれの製品の総生産量を計算する
```{r}
products <- c("A", "B", "C")
product_prices <- c(A = 180, B = 235, C = 300)
# 各製品の数量と価格を計算して合計
total_summary <- data |>
filter(product %in% products) |>
group_by(product) |>
summarise(
total_quantity = sum(quantity, na.rm = TRUE),
total_value = sum(quantity * product_prices[product],
na.rm = TRUE)) |>
ungroup()
# 全製品の合計数量と合計価格を計算
total_quantity <- sum(total_summary$total_quantity)
total_value <- sum(total_summary$total_value)
# 平均価格を計算
av_price <- total_value / total_quantity
```
#### 2-4.
図示
```{r}
data_month |>
ggplot(aes(x = quantity_month, y = total_month)) +
geom_smooth(method = "lm", se = FALSE,
fullrange = TRUE) +
geom_abline(slope = av_price,
intercept = 0,
linetype = "dashed") +
scale_x_continuous(limits = c(15000, 30000),
breaks = seq(15000, 30000, by = 2000)) +
scale_y_continuous(limits = c(4000000, 7000000)) +
xlab("Quantity") + ylab("Amount of Money")
```
#### 2-5.
損益分岐点
```{r}
a <- matrix(c(coef(cost_line)["quantity_month"], -1,
av_price, -1),
nrow = 2, byrow = TRUE)
b <- matrix(c(-coef(cost_line)["(Intercept)"], 0),
nrow = 2, byrow = TRUE)
ans <- solve(a, b)
ans_1 <- ceiling(ans[1])
```
答えは `{r} ans_1`
#### 2-6.
売上高利益率10%
$$
\begin{split}
\frac{Sales - Cost}{Sales} &= 0.1 \\
Sales - Cost &=0.1Sales \\
0.9Sales &= Cost
\end{split}
$$
なので,
$$
\begin{cases}
Cost = aq + b \\
Sales = pq
\end{cases}
$$
に代入して
$$
\begin{cases}
0.9Sales = aq + b \\
Sales = pq
\end{cases}
$$
となり,
$$
\begin{cases}
aq - 0.9Sales = - b \\
pq - Sales = 0
\end{cases}
$$
```{r}
a <- matrix(c(coef(cost_line)["quantity_month"], -0.9,
av_price, -1),
nrow = 2, byrow = TRUE)
b <- matrix(c(-coef(cost_line)["(Intercept)"], 0),
nrow = 2, byrow = TRUE)
ans <- solve(a, b)
ans_2 <- ceiling(ans[1])
```
となり,答えは `{r} ans_2`
#### 2-7.
損益分岐点は常に確保されている一方で,目標利益に到達している月は1月しかない。
```{r}
data_month |>
ggplot(aes(x = quantity_month, y = total_month)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE,
fullrange = TRUE) +
geom_abline(slope = av_price,
intercept = 0,
linetype = "dashed") +
scale_x_continuous(limits = c(19000, 32000),
breaks = seq(19000, 32000, by = 1000)) +
scale_y_continuous(limits = c(4000000, 7000000)) +
geom_vline(xintercept = ans_2) +
geom_vline(xintercept = ans_1)
```
:::
### 問題3
次に,製品別の収益性を確認し,今後どの製品にどれぐらい力を入れるべきか検討します。
1. 製品別の固定費・変動費を最小二乗法で推定してください。
1. それぞれの製品の損益分岐点を計算してください。
1. 製品ごとの特徴を考察してください。
::: content-hidden
#### 3-1.
```{r}
# 月毎の業績変数を作成
data_month_p <- data |>
group_by(month, product) |>
summarise(total_month = sum(total_cost),
quantity_month = sum(quantity)) |>
ungroup()
# 製品名を指定するベクトル
products <- c("A", "B", "C")
models_p <- list()
# 製品ごとに回帰分析をループして,リストに追加
for (p in products) {
models_p[[p]] <- data_month_p |>
filter(product == p) |>
lm(total_month ~ quantity_month, data = _)
}
msummary(models_p)
```
#### 3-2.
損益分岐点の下記の式を使うと
$$
\begin{split}
\frac{\text{固定費}}{\text{単価} - 変動費率}
\end{split}
$$
```{r}
bep_A <- coef(models_p[["A"]])["(Intercept)"] /
(product_prices["A"] - coef(models_p[["A"]])["quantity_month"])
bep_B <- coef(models_p[["B"]])["(Intercept)"] /
(product_prices["B"] - coef(models_p[["B"]])["quantity_month"])
bep_C <- coef(models_p[["C"]])["(Intercept)"] /
(product_prices["C"] - coef(models_p[["C"]])["quantity_month"])
bep_A <- unname(bep_A)
bep_B <- unname(bep_B)
bep_C <- unname(bep_C)
bep_A
bep_B
bep_C
```
#### 3-3.
製品Aは,高固定費,低変動費。損益分岐点が高く,赤字を回避するために必要な製造量は高い。販売価格も低いので限界利益も低い(180 - 160 = 20)。
製品Bは固定費が高いがCに比べて変動費は低い。235円という販売価格から,限界利益が50円と製品Aの2.5倍ある。
製品Cは固定費が低いが変動費が大きい。固定費が低い分損益分岐点が低い。また,300円という販売価格を踏まえると限界利益率も高く(約60円),収益率が高い。
:::
### 問題4(予算差異分析)
K社では,製品ごとに標準原価表(材料費・労務費・製造間接費・その他費用について,単位当たり標準単価と固定費目標)を定めています。標準原価表は[データのページ](data/index.qmd)第14回の`standard_cost.csv`に収録されています。
1. `standard_cost.csv`を読み込み,実績データ(`data`)と製品(`product`)で結合してください。各行(工場・月・製品)について,実績生産量を用いた予算原価(費目ごとに,標準単価 × 実績生産量 + 固定費目標)を計算し,実績原価との差(予算差異 = 実績 − 予算)を費目別・総額で求めてください。
1. 工場別に予算差異(総額)を集計し,どの工場が予算超過(不利差異)/予算内(有利差異)の傾向にあるか確認してください。
1. 差異が生じる費目(材料費・労務費・製造間接費・その他費用)にも注目し,工場ごとにどの費目の差異が大きいか確認してください。
1. 結果を踏まえ,各工場の差異の傾向について考察してください。問題2・3で見た工場ごとのコスト構造(固定費・変動費の傾向)と関連づけて説明できるか検討し,こうした差異が工場長の管理可能な範囲によるものか,それ以外の要因によるものかについても触れてください。
::: {.callout-note icon="false"}
#### ヒント
- 費用の差異は,実績<予算のとき有利差異,実績>予算のとき不利差異です。
- 標準原価表は製品単位でのみ定義されており,工場ごとには分かれていません。工場ごとの差異は,実績データと標準原価表を結合したうえで工場別に集計する必要があります。
:::
::: content-hidden
```{r}
# 標準原価表を結合し,予算原価と予算差異を計算
data_variance <- data |>
left_join(standard_rates, by = "product") |>
mutate(
material_budget = material_rate_std * quantity + material_fixed_std,
labor_budget = labor_rate_std * quantity + labor_fixed_std,
overhead_budget = overhead_rate_std * quantity + overhead_fixed_std,
other_budget = other_rate_std * quantity + other_fixed_std,
material_variance = material_cost - material_budget,
labor_variance = labor_cost - labor_budget,
overhead_variance = overhead_cost - overhead_budget,
other_variance = other_cost - other_budget,
total_variance = total_cost - (material_budget + labor_budget + overhead_budget + other_budget)
)
# 工場別の総差異
data_variance |>
group_by(factory) |>
summarise(total_variance = sum(total_variance)) |>
arrange(desc(total_variance))
# 工場×費目別の差異
data_variance |>
group_by(factory) |>
summarise(
material_variance = sum(material_variance),
labor_variance = sum(labor_variance),
overhead_variance = sum(overhead_variance),
other_variance = sum(other_variance)
)
```
Factory1は労働集約的な設定(材料費・労務費の変動費率が高い)にしているため,材料費・労務費で構造的な不利差異が出やすく,Factory3は設備集約的な設定(間接費・その他費用が割高)にしているため,間接費・その他費用で不利差異が出やすい一方,材料費・労務費は有利差異が出やすい。Factory2は基準となる設定なので差異は概ねランダムな範囲に収まる(実際の数値は再実行して確認すること)。差異の原因が製造効率(工場の管理可能な範囲)によるものか,全社共通の標準設定そのものの妥当性(管理不能な範囲)によるものかは,この設定だけでは完全に区別できない点も考察のポイントになる。
:::
### 問題5 (ボーナス点)
::: {.callout-caution icon="false"}
## 必須問題ではありません
問題1から4までで満点分として採点し,問題5は+α点として加算します。取り組むかどうかはお任せします。
:::
データセットには問題2〜4では使っていない変数が含まれています。また,問題2では企業単位,問題3では製品単位,問題4では工場単位での分析を行いましたが,目的によっては別の分析単位を採用することも考えられます。
ここまでで行った分析**以外**の観点で分析してみてください。その上で結果を考察してください。
## 参考文献 {data-name="参考文献"}
::: {#refs}
:::