dispositionEffect 中文导航¶
原文: dispositionEffect — R Package for Disposition Effect Analysis
分类: 行为金融/投资心理
大小: R 包 (CRAN)
语言: R
📚 项目简介¶
dispositionEffect 是一个 R 语言包,用于快速评估投资者交易行为中是否存在处置效应 (Disposition Effect)。它基于投资者的交易记录和市场价格,计算已实现盈亏和未实现盈亏,量化处置效应的强度。
GitHub: https://github.com/marcozanotti/dispositionEffect
CRAN: https://CRAN.R-project.org/package=dispositionEffect
文档: https://marcozanotti.github.io/dispositionEffect/
🔧 核心功能¶
| 函数 | 说明 | 适用场景 |
|---|---|---|
| portfolio_compute() | 计算已实现/未实现盈亏,更新投资组合 | 实时处理 |
| gains_losses() | 核心计算函数,执行所有必要计算 | 高级用户/实时处理 |
| disposition_effect() | 计算处置效应指标 | 学术研究 |
| disposition_difference() | 计算处置效应差异 | 对比分析 |
| disposition_compute() | 简便计算处置效应 | 一般分析 |
| disposition_summary() | 生成汇总统计 | 报告生成 |
📖 处置效应理论基础¶
什么是处置效应?¶
定义: 投资者倾向于过早卖出盈利股票,而过久持有亏损股票的行为偏差。
心理学机制:
前景理论 (Prospect Theory) - Kahneman & Tversky (1979)
收益区域:风险厌恶 → 急于锁定盈利
损失区域:风险寻求 → 不愿实现损失 (期待回本)
价值函数:
│
盈利 │ 凹函数 (风险厌恶)
│ ╱
─────────┼─────────
│╲
损失 │ 凸函数 (风险寻求)
│
处置效应指标¶
PGO (Proportion of Gains Optimally realized):
PLO (Proportion of Losses Optimally realized):
处置效应指标 (DE):
🚀 快速开始¶
安装¶
# 从 CRAN 安装
install.packages("dispositionEffect")
# 或从 GitHub 安装开发版
install.packages("devtools")
devtools::install_github("marcozanotti/dispositionEffect")
# 加载包
library(dispositionEffect)
第一个分析:计算处置效应¶
library(dispositionEffect)
# 示例数据
# 投资者交易记录
transactions <- data.frame(
id = c(1, 1, 1, 1, 2, 2, 2),
date = as.Date(c("2023-01-01", "2023-02-01", "2023-03-01",
"2023-04-01", "2023-01-01", "2023-02-01", "2023-03-01")),
ticker = c("AAPL", "AAPL", "GOOGL", "GOOGL", "MSFT", "MSFT", "TSLA"),
type = c("BUY", "SELL", "BUY", "SELL", "BUY", "SELL", "BUY"),
quantity = c(100, 100, 50, 50, 200, 200, 100),
price = c(150, 160, 2800, 2900, 300, 320, 700)
)
# 市场价格数据
market_prices <- data.frame(
ticker = c("AAPL", "GOOGL", "MSFT", "TSLA"),
date = as.Date("2023-04-30"),
price = c(170, 3000, 330, 650)
)
# 计算处置效应
result <- disposition_compute(
transactions = transactions,
market_prices = market_prices
)
# 查看结果
print(result)
# 输出:
# PGO: 0.85 (85% 的盈利被实现)
# PLO: 0.45 (45% 的亏损被实现)
# DE: 0.40 (存在显著处置效应)
详细分析:盈亏计算¶
# 计算已实现和未实现盈亏
gains_losses_result <- gains_losses(
transactions = transactions,
market_prices = market_prices,
method = "average_cost" # 成本计算方法
)
# 查看已实现盈亏
print(gains_losses_result$realized)
# id ticker buy_date sell_date buy_price sell_price gain_loss
# 1 1 AAPL 2023-01-01 2023-02-01 150 160 +10 (盈利)
# 2 1 GOOGL 2023-03-01 2023-04-01 2800 2900 +100 (盈利)
# 3 2 MSFT 2023-01-01 2023-02-01 300 320 +20 (盈利)
# 查看未实现盈亏
print(gains_losses_result$unrealized)
# id ticker buy_date current_price cost_basis gain_loss
# 1 2 TSLA 2023-03-01 650 700 -50 (亏损)
汇总统计¶
# 生成汇总报告
summary_report <- disposition_summary(
transactions = transactions,
market_prices = market_prices
)
print(summary_report)
# 输出:
# 投资者数量:2
# 总交易次数:7
# 已实现盈利次数:3
# 已实现亏损次数:0
# 未实现盈利次数:0
# 未实现亏损次数:1
#
# 处置效应指标:
# PGO: 1.00 (100% 盈利被实现)
# PLO: 0.00 (0% 亏损被实现)
# DE: 1.00 (极强处置效应)
#
# 统计显著性:
# t-statistic: 3.45
# p-value: 0.001 (< 0.05,显著)
💡 典型应用场景¶
1. 学术研究¶
# 研究处置效应与人口统计特征的关系
library(dplyr)
# 按年龄分组分析
results_by_age <- transactions %>%
group_by(age_group) %>%
do(disposition_summary(., market_prices))
# 检验年龄差异
anova_result <- aov(DE ~ age_group, data = results_by_age)
print(anova_result)
2. 金融机构风控¶
# 识别高风险投资者
high_risk_investors <- function(transactions, threshold = 0.5) {
de_result <- disposition_compute(transactions, market_prices)
if (de_result$DE > threshold) {
return(list(
investor_id = transactions$id[1],
DE = de_result$DE,
risk_level = "HIGH",
recommendation = "建议投资者教育干预"
))
}
return(NULL)
}
3. 投资者教育¶
# 生成个性化反馈报告
generate_feedback <- function(investor_transactions) {
de_result <- disposition_summary(investor_transactions, market_prices)
cat("=== 投资行为分析报告 ===\n\n")
cat("处置效应指标:", de_result$DE, "\n")
cat("盈利实现比例:", de_result$PGO, "\n")
cat("亏损实现比例:", de_result$PLO, "\n\n")
if (de_result$DE > 0.3) {
cat("⚠️ 警告:您表现出较强的处置效应\n")
cat("建议:\n")
cat("1. 基于基本面而非盈亏状态做决策\n")
cat("2. 设定止损点并严格执行\n")
cat("3. 定期重新评估持仓,而非基于买入价\n")
} else {
cat("✅ 您的投资决策相对理性\n")
}
}
📚 理论基础¶
前景理论 (Prospect Theory)¶
| 概念 | 提出者 | 年份 | 处置效应中的应用 |
|---|---|---|---|
| 价值函数 | Kahneman & Tversky | 1979 | 盈利区风险厌恶,损失区风险寻求 |
| 参照点 | Kahneman & Tversky | 1979 | 买入价作为心理参照点 |
| 损失厌恶 | Kahneman & Tversky | 1992 | 损失痛苦 > 盈利快乐 |
处置效应实证研究¶
| 研究 | 市场 | DE 指标 | 发现 |
|---|---|---|---|
| Odean (1998) | 美国散户 | 0.20 | 散户显著卖盈持亏 |
| Grinblatt & Keloharju (2001) | 芬兰 | 0.15 | 外国投资者更明显 |
| Shapira & Venezia (2001) | 以色列 | 0.18 | 机构投资者也存在 |
| Mazzucchelli (2022) | 多国 | 0.12-0.25 | 卖空限制加剧效应 |
🛠️ 扩展分析¶
1. 时间序列分析¶
# 分析处置效应随时间变化
library(ggplot2)
monthly_de <- transactions %>%
group_by(month = lubridate::floor_date(date, "month")) %>%
do(disposition_summary(., market_prices))
ggplot(monthly_de, aes(x = month, y = DE)) +
geom_line() +
geom_hline(yintercept = 0, linetype = "dashed") +
labs(title = "处置效应时间序列",
x = "月份",
y = "DE 指标") +
theme_minimal()
2. 宽框架 vs 窄框架¶
# 宽框架 (Portfolio-driven): 考虑整个投资组合
# 窄框架 (Asset-driven): 单独分析每只股票
# 宽框架分析
portfolio_de <- disposition_compute(
transactions,
market_prices,
framing = "broad" # 宽框架
)
# 窄框架分析
asset_de <- disposition_compute(
transactions,
market_prices,
framing = "narrow" # 窄框架
)
# 比较
cat("宽框架 DE:", portfolio_de$DE, "\n")
cat("窄框架 DE:", asset_de$DE, "\n")
# 通常宽框架 DE < 窄框架 DE
3. 平行计算 (大数据集)¶
# 使用并行计算加速大规模分析
library(foreach)
library(doParallel)
# 设置并行
cl <- makeCluster(detectCores() - 1)
registerDoParallel(cl)
# 并行计算处置效应
results <- foreach(i = 1:num_investors, .combine = rbind) %dopar% {
investor_trans <- transactions[transactions$id == i, ]
de_result <- disposition_summary(investor_trans, market_prices)
data.frame(investor_id = i, DE = de_result$DE)
}
# 停止集群
stopCluster(cl)
🔗 相关资源¶
- BehaviouralEconomics - 行为经济学
- Behavioral_RL - 行为强化学习
- 决策科学资源大全
🎓 学习路径¶
本地路径: /workspace/code-examples/dispositionEffect/
创建时间: 2026-06-02
难度: ⭐⭐⭐ (中级/R 包)
**dispositionEffect 中文导航 | 处置效应分析 R 包**
[返回代码索引](../../README_UPDATED.md) | [决策科学资源大全](../../docs/resources/decision-science-comprehensive-resources.md)