Вы можете попробовать с контуром
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
fist делает все возможное сочетание предоставленных векторов sig
и exr
, затем принимает каждую пару значений и вычисляет полезность с помощью Uf
. Попробуйте head(u)
или View(u)
. contour
принимает все значения для построения с желаемыми уровнями (кривые безразличия). abline
добавляет контрольную линию, которая у вас есть на вашем графике.