rregressionnls

How do I run an exponential nls with seasonal dummies in R?


I'm having trouble with running an nls regression with seasonal dummies in R. I'm able to do it without the seasonal dummies, but not with. This is what I have so far:

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)

summary(hotdogNLS)

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

How do I include seasonal dummies? Thanks!


Solution

  • I don't think dummies are implemented for nls like they are in glm due to the fact that "formula" for nls is a real mathematical formula unlike for glm.

    You can nevertheless specify if a parameter must be assessed separately for each class of a dummy:

        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