Как запустить экспоненциальный nls с сезонными манекенами в R?

У меня проблемы с запуском регрессии nls с сезонными манекенами в R. Я могу сделать это без сезонных манекенов, но не с ними. Это то, что у меня есть до сих пор:

year=floor(time(lsts))
> month=round(time(lsts)-year,4)
> month.f=factor(month)
> dummies=model.matrix(~month.f)
hotdogNLS<-nls(lsts~beta1/(1+exp(beta2+beta3*t)),start=list(beta1=2500,beta2=0.5,beta3=-0.5),trace=F)

резюме(хотдогNLS)

Formula: lsts ~ beta1/(1 + exp(beta2 + beta3 * t))

Parameters:
        Estimate Std. Error t value Pr(>|t|)    
beta1  2.030e+03  5.874e+01   34.55   <2e-16 ***
beta2  1.146e+00  5.267e-02   21.76   <2e-16 ***
beta3 -1.116e-02  7.668e-04  -14.56   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 192.3 on 333 degrees of freedom

Number of iterations to convergence: 8 
Achieved convergence tolerance: 2.054e-06

Как включить сезонные манекены? Спасибо!


person Willow McFarlane    schedule 20.03.2015    source источник
comment
Что вы имеете в виду под манекеном здесь? Будут ли параметры оцениваться полностью отдельно для каждого фиктивного значения или у вас будет один или несколько параметров, зависящих только от фиктивного значения?   -  person cmbarbu    schedule 21.03.2015


Ответы (2)


Я не думаю, что манекены реализованы для nls, как в glm, из-за того, что "формула" для nls является реальной математической формулой, в отличие от glm.

Тем не менее, вы можете указать, должен ли параметр оцениваться отдельно для каждого класса манекена:

    data(cars)
    # define the dummy
    cars$dummy <- as.factor(LETTERS[1:5])
    # code as 0/1 the dummy with a column per dummy level
    cars$A<- as.numeric(cars$dummy=="A")
    cars$B<- as.numeric(cars$dummy=="B")
    cars$C<- as.numeric(cars$dummy=="C")
    cars$D<- as.numeric(cars$dummy=="D")
    cars$E<- as.numeric(cars$dummy=="E")

    # precise in the formula where the dummy level should play out
    # here in the intercept:
    model <- nls(dist~beta1*speed^beta2+beta3*A+beta4*B+beta5*C+beta6*D+beta7*E,data=cars)

    model

    Nonlinear regression model
      model: dist ~ beta1 * speed^beta2 + beta3 * A + beta4 * B + beta5 * C + beta6 * D + beta7 * E
      data: cars
      beta1   beta2   beta3   beta4   beta5   beta6   beta7 
      0.2069  1.8580  2.8266  5.3973 13.0002  9.3539  2.5361 
      residual sum-of-squares: 10040

      Number of iterations to convergence: 8 
      Achieved convergence tolerance: 4.924e-06
person cmbarbu    schedule 21.03.2015
comment
Спасибо большое! За исключением того, что когда я пытаюсь запустить nls, он запрашивает начальные значения - вы знаете, как их получить? Когда я пытаюсь использовать начальные значения, я получаю сообщение об ошибке: фактор шага уменьшен ниже minFactor. - person Willow McFarlane; 22.03.2015
comment
Для начальных значений вы обычно можете игнорировать сообщение и сделать это по умолчанию. Но если он продолжает жаловаться, это может быть связано с тем, что вы пытаетесь оценить слишком много вещей для своих данных. Затем убедитесь, что установлены разумные начальные значения. Попробуйте меньше спрашивать у NLS (меньше групп, меньше бета). Если вы не можете исправить это самостоятельно, задайте другой вопрос, так как это совершенно другая проблема. Не забудьте закрыть этот вопрос, приняв ответ и проголосовав за ответы, которые помогут вам. - person cmbarbu; 23.03.2015

Вы можете использовать factor для подмножества расчетного коэффициента, такого как alpha[dummy].

data(cars)
cars$dummy <- as.factor(LETTERS[1:5])

nls(dist ~ alpha[dummy] + beta1*speed^beta2, data=cars, start=list(beta1=.2, beta2=3, alpha=rep(10, nlevels(cars$dummy))))
#Nonlinear regression model
#  model: dist ~ alpha[dummy] + beta1 * speed^beta2
#   data: cars
#  beta1   beta2  alpha1  alpha2  alpha3  alpha4  alpha5 
# 0.2069  1.8580  2.8264  5.3971 13.0000  9.3537  2.5359 
# residual sum-of-squares: 10040
#
#Number of iterations to convergence: 12 
#Achieved convergence tolerance: 2.372e-06
person GKi    schedule 03.09.2019