Вот способ, более или менее автоматический, выполнить то, о чем просит вопрос. Обратите внимание на то, что он подставляет векторы с индексами 1:m
. Моя первая попытка была m:curv$n
и получила нижнюю часть кривой. Адаптируйте это решение в каждом конкретном случае.
Первые инструкции почти совпадают с кодом, размещенным в вопросе. Разница заключается в вызове loess
, который использует аргумент data
.
plot(portfolio$PortfolioRisk,
portfolio$PortfolioReturn,
xlab = "Risk", ylab = "Return", type = "n")
curv <- loess(PortfolioReturn ~ PortfolioRisk, data = portfolio)
Теперь новая часть.
m <- which.min(curv$x)
lines(curv)
lines(curv$x[1:m], curv$y[1:m], lwd = 2)
И, наконец, инструкции, чтобы сделать его красивым.
points(0.15,0.20, pch = 21, bg = 1)
points(0.20,0.25, pch = 21, bg = 1)
text(c(0.15,0.20), c(0.20,0.25), labels=c("B", "E"), cex=0.8, pos =1)
