首页 > 解决方案 > R:如何添加这样的无差异曲线?

问题描述

我有一个如下图,除了没有红色和蓝色的无差异曲线(水平集)。我知道我可以使用contour(),但这会产生从边缘到边缘的长曲线。

有什么办法可以创建这样的曲线吗?他们不必特别关注函数或任何数据,我只想展示一般情况。

在此处输入图像描述

标签: r

解决方案


你可以试试轮廓

sig <- seq(0,0.25,by=.01)
exr <- seq(0,.20,length.out = length(sig))

# define function 
Uf=function(sig,ret,ra=1)ret-0.5*(1/ra)*sig^2
u = outer(sig,exr,function(sd,mr)Uf(sd,mr,ra=0.075))
#image(sig,exr,u)
#contour(sig,exr,u)
contour(sig,exr,u, levels =c(0.04666667, 0.07500000, 0.10333333),col=3,drawlabels = F)
v = outer(sig,exr,function(sd,mr)Uf(sd,mr,ra=0.195))
contour(sig,exr,v, levels =c(0.07333333, 0.09500000, 0.11666667),add = T,col=4,drawlabels = F)
abline(a=0.03,b=0.6666667)

在此处输入图像描述

编辑

Uf是一个经典的二次偏好函数,它取决于风险、收益和风险厌恶。在这里查看更多信息。 outer首先对提供的向量sig和进行所有可能的组合exr,然后取每一对值并计算 的效用Uf。尝试head(u)View(u)contour取所有值以绘制所需的水平(无差异曲线)。 abline添加您在绘图中实际拥有的参考线。


推荐阅读