Проблема в том, что вы подгоняете модель, а затем вообще не используете ее.
Возвращаемое значение loess
представляет собой список (класса "loess"
) с членом fitted
.Это вектор, в котором вы хотите найти максимум.
myFmsy <- function(x, y){
model <- loess(y ~ x,span = 0.4)
yfit <- model$fitted
x[which(yfit == max(yfit))]
}
set.seed(6589) # Make the results reproducible
x <- rnorm(100)
y <- rnorm(100)
myFmsy(x, y)
#[1] -0.938093
Могут быть случаи, когда из-за проблем с плавающей точкой несколько значений находятся близко друг к другу, в пределах заданного допуска.Следующая функция проверяет это и также возвращает подогнанный y
и индекс ix
того места, где его можно найти.
myFmsy2 <- function(x, y, tol = .Machine$double.eps^0.5){
model <- loess(y ~ x,span = 0.4)
yfit <- model$fitted
inx <- which(abs(yfit - max(yfit)) < tol)
list(x = x[inx], y.fitted = yfit[inx], ix = inx)
}
myFmsy2(x, y)
#$`x`
#[1] -0.938093
#
#$y.fitted
#[1] 0.5046313
#
#$ix
#[1] 48