Predict возвращает слишком мало значений при использовании с предопределенной функцией - PullRequest
0 голосов
/ 12 апреля 2019

Моя проблема в том, что функция предиката () в сочетании с nls () возвращает слишком мало значений при использовании с предопределенной функцией, и я не понимаю, почему.

Я написал некоторый код для получения линии регрессии, которая соответствует моим точкам данных (в моем случае сигмоид Больцмана).

Если я запускаю все как показано ниже, это работает отлично. Predict (), если выполняется один, возвращает 100 значений.

# Fit
data_fit = nls(data_y~((ymin-ymax)/(1+exp((data_x-xmid)/slope))+ymax),
data=data.frame(data_x,data_y), start=list(slope=1,xmid=4.5,ymax=1,ymin=0))

# Line
lines(seq(min(data_y),max(data_y),length.out=100), predict(data_fit,
newdata=data.frame(data_x=seq(min(data_y),max(data_y),length.out=100))),
col=4,lwd=1)     

Если я сейчас определю функцию типа «Больцман» ниже и использую ее вместе с функцией предиката (), я неожиданно получу столько же значений, сколько число точек данных (в моем случае 11) и, следовательно, не могу нарисовать линию, потому что длины x и y на графике больше не совпадают, а сигмоидальная кривая с 11 точками выглядит ужасно. Если я выполню только #Fit и #Boltzmann, я получу точно такие же значения.

# Boltzmann
boltz = function(x,y,xmid,slope,ymin,ymax) {
  nls(y~((mn-mx)/(1+exp((x-m)/k))+mx), 
      data=data.frame(x,y), start=list(k=slope,m=xmid,mx=ymax,mn=ymin))
  }

predict(boltz(x=data_x, y=data_y, slope=1, xmid=4.5, ymax=1, ymin=0),
newdata=data.frame(data_x=seq(min(data_y),max(data_y),length.out=100)))
# -> returning 11 values (number of datapoints)

Я использую RStudio 1.1.463 (Ubuntu) и R 3.5.1

Это ошибка или у кого-нибудь есть идеи, как это исправить? Большое спасибо!

...