Как написать функцию для получения значения x, которое дает максимальный Y в гладкой лесс? - PullRequest
0 голосов
/ 26 мая 2018

Кто-нибудь может помочь написать функцию, которая может возвращать значение x гладкого лесса?Я сделал, как следует, но, похоже, неправильно.То, что я хочу получить, это значение x, которое дает максимальный Y в функции лёсса.Заранее спасибо.

  myFmsy<-function(x,y){
  model <- loess(y ~ x,span = 0.4)
   return(x[which(y==max(y))])
   }

1 Ответ

0 голосов
/ 26 мая 2018

Проблема в том, что вы подгоняете модель, а затем вообще не используете ее.
Возвращаемое значение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...