---
title: "企业财务诊断模拟实训:基于杜邦分析体系"
author: "Jason"
date: today
brand: golden_times_quarto.yml # 🌟 挂载您的专属品牌文件
format:
html:
theme: lux
embed-resources: true
toc: true
toc-title: "目录"
number-sections: true
code-fold: show
code-tools: true
execute:
warning: false
message: false
echo: true
---
<br>
<br>
## 这是什么?
这是一份完整的 Quarto (.qmd) 模板,非常适合直接作为《企业财务诊断模拟实训》课程的作业标准,或者分发给本科生作为可重复研究的规范参考。
这个例子展示了如何在一个文档中无缝融合**说明文字、数学公式、运行代码、图表输出**,并且代码部分严格遵循了`styler` 的规范格式。
你可以将以下内容直接复制,在 RStudio 中保存为`financial_diagnosis_template.qmd` ,并点击 **Render** 运行。
Let's Go! 🚀
<br>
## 诊断背景与核心公式
本报告旨在通过杜邦分析法(DuPont Analysis),对目标企业的核心盈利指标——净资产收益率(Return on Equity)进行拆解,以定位企业财务状况的驱动因素。
杜邦分析的核心逻辑在于将综合性指标分解为三个体现不同经营维度的财务比率。其数学分解公式如下:
$$ ROE = \frac{\text{Net Income}}{\text{Sales}} \times \frac{\text{Sales}}{\text{Total Assets}} \times \frac{\text{Total Assets}}{\text{Equity}}$$
即:$$ ROE = \text{销售净利率} \times \text{总资产周转率} \times \text{权益乘数}$$
<br>
## 数据准备与预处理
在这个阶段,我们将导入数据并计算杜邦分析所需的三大核心指标。得益于规范的代码格式,数据流向一目了然。
```{r}
#| label: data-preparation
#| echo: true
# 加载依赖包
library(tidyverse)
library(knitr)
# 模拟一份企业连续5年的核心财务数据(单位:万元)
# 实际操作中此处可替换为 read_csv("data/financial_data.csv")
financial_data <- tibble(
year = 2019: 2023,
net_income = c(450, 480, 410, 520, 580),
sales = c(4500, 5100, 4900, 6000, 6800),
total_assets = c(8000, 8500, 8800, 9500, 10500),
equity = c(4000, 4200, 4300, 4800, 5200)
)
# 使用管道符计算杜邦分析指标(已使用 styler 规范化)
dupont_df <- financial_data %>%
mutate(
profit_margin = net_income / sales, # 销售净利率
asset_turnover = sales / total_assets, # 总资产周转率
equity_multiplier = total_assets / equity, # 权益乘数
roe = profit_margin * asset_turnover * equity_multiplier # 净资产收益率
)
```
<br>
## 描述性统计与结果展示
```{r}
#| label: show-table
#| echo: false
# 隐藏代码,仅向读者展示最终的精美表格
dupont_df %>%
select(year, roe, profit_margin, asset_turnover, equity_multiplier) %>%
kable(
digits = 3,
col.names = c("年份", "ROE", "销售净利率", "资产周转率", "权益乘数"),
caption = "表 1:企业 2019-2023 年杜邦分析核心指标表"
)
```
<br>
## 财务指标趋势可视化
最后,我们对 ROE 的变化趋势进行可视化。此处的图片分辨率可以通过 chunk 选项直接控制,确保最终输出的讲义或报告图表清晰。
```{r}
# 顶刊规范绘图代码
ggplot(dupont_df, aes(x = year, y = roe)) +
# 1. 颜色回归纯黑,通过线宽(linewidth)和点型(shape)增强辨识度
# shape = 21 为带边框的圆点,fill="white" 使其成为中空点,这是顶刊常见处理
geom_line(color = "black", linewidth = 0.8) +
geom_point(color = "black", fill = "white", shape = 21, size = 3, stroke = 1) +
# 2. X轴:确保连续年份不出现小数点(如 2020.5),明确标出每个整数年份
scale_x_continuous(breaks = 2019:2023) +
# 3. Y轴:扩展上下边界防止折线顶格,保持百分比格式
scale_y_continuous(
labels = scales::percent_format(accuracy = 0.1),
expand = expansion(mult = c(0.1, 0.1))
) +
# 4. 使用 theme_classic() 作为最干净的底层基座
theme_classic() +
# 5. 去除图内标题,只保留学术坐标轴标签
labs(
x = "会 计 年 度",
y = "净资产收益率 (ROE)"
) +
# 6. 学术期刊格式精调
theme(
# 中文顶刊标配:宋体 (Mac系统中为 Songti SC)
text = element_text(family = "Songti SC", size = 12, color = "black"),
# 坐标轴标签 (X/Y轴的名字)
axis.title = element_text(size = 12, face = "plain"),
axis.title.x = element_text(margin = margin(t = 10)),
axis.title.y = element_text(margin = margin(r = 10)),
# 坐标轴刻度数字
axis.text = element_text(size = 10, color = "black"),
# 坐标轴线条:必须纯黑,且有一定厚度
axis.line = element_line(color = "black", linewidth = 0.6),
# 坐标轴刻度线:纯黑,且向内指 (负数 unit 代表朝内)
# 这是 AER 等顶刊极其典型的特征
axis.ticks = element_line(color = "black", linewidth = 0.6),
axis.ticks.length = unit(-0.15, "cm"),
# 因为刻度线向内了,要把刻度数字往外推一点,防止重叠
axis.text.x = element_text(margin = margin(t = 8)),
axis.text.y = element_text(margin = margin(r = 8)),
# 彻底抹除所有网格线和背景框
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank()
)
```
<br>
## 诊断结论
根据上述数据驱动的分析:
- 该企业在 2021 年经历了短暂的 ROE 下滑,主要受限于**销售净利率**的下降。
- 到了 2023 年,ROE 回升至最高点,这得益于**总资产周转率**的显著提升
- **建议**:企业在保持现有周转效率的同时,应关注成本控制以进一步优化净利率。