Reputation: 1
I need to perform three non-linear regression with the following formulas:
fire_vertical<-nls(R~0.23-exp(A*lnNt+C)+d*fire,start=list(A=-0.33,C=0.45,d=-0.001),trace=T)
fire_lateral<-nls(R~0.23-exp((A*lnNt)+(C+d*fire)),start=list(A=-0.33,C=0.45,d=-0.001),trace=T)
fire_nonlinear<-nls(R~0.23-exp((A+d*fire)*lnNt+C),start=list(A=-0.33,C=0.45,d=-0.001),trace=T)
I have the following data:
R<-c(0.02,0.00,-0.06,0.11,0.06,0.00,-0.05,-0.06,0.02,-0.26,0.00,0.07,-0.07,0.23,0.06,-0.14,-0.04,0.09,-0.09,0.09,-0.02)
lnNt<-c(6.14,6.14,5.76,6.42,6.81,6.81,6.49,6.14,6.24,4.81,4.81,5.14,4.81,6.03,6.42,5.59,5.39,5.90,5.39,5.90,5.76)
fire<-c("before","before","before","before","before","before","before","afterone","afterone","afterone","afterone","afterone","afterone","afterone","aftertwo","aftertwo","aftertwo","aftertwo","aftertwo","aftertwo","aftertwo")
"lnNt" and "fire" are my independent variables. lnNt are continuous data, while "fire" is a categorical variable with three levels:"before", "afterone" and "aftertwo".
I need to transform my categorical variable ("fire") into a dummy variable to run the model. I'm not able to run the model with the dummy variable.
Upvotes: 0
Views: 1420
Reputation: 132596
Use the gnls
function from package nlme. It allows you to model parameters depending on a categorical variable (using the usual treatment contrasts by default).
DF <- data.frame(R, lnNt, fire, stringsAsFactors = TRUE)
fire_model<-nls(R~0.23-exp(A*lnNt+C)+d,
start=list(A=-0.33,C=0.45,d=-0.001),trace=T, data = DF)
coef(fire_model)
# A C d
#-1.1367053 3.6708032 -0.1673437
library(nlme)
fire_model_2 <- gnls(R~0.23-exp(A*lnNt+C)+d,params = list(A + C ~ 1, d ~ fire),
start=c(coef(fire_model), rep(0, length(levels(DF$fire))- 1)),
data = DF)
summary(fire_model_2)
# Generalized nonlinear least squares fit
# Model: R ~ 0.23 - exp(A * lnNt + C) + d
# Data: DF
# AIC BIC logLik
# -33.3584 -27.09127 22.6792
# Coefficients:
# Value Std.Error t-value p-value
# A -1.247828 1.652336 -0.7551907 0.4611
# C 4.558928 7.565058 0.6026296 0.5552
# d.(Intercept) -0.097251 0.128043 -0.7595203 0.4586
# d.fireaftertwo -0.062324 0.062210 -1.0018480 0.3313
# d.firebefore -0.083946 0.064853 -1.2944170 0.2139
#
# Correlation:
# A C d.(In) d.frft
# C -0.999
# d.(Intercept) 0.864 -0.842
# d.fireaftertwo 0.435 -0.454 0.050
# d.firebefore -0.148 0.117 -0.538 0.492
#
# Standardized residuals:
# Min Q1 Med Q3 Max
# -1.66299973 -0.48743154 0.04367184 0.85175935 1.58042481
In this example we can clearly see that fire
does not appear to have a significant impact.
fire_model <- gnls(R~0.23-exp(A*lnNt+C)+d,
start=coef(fire_model), data = DF)
anova(fire_model, fire_model_2)
# Model df AIC BIC logLik Test L.Ratio p-value
#fire_model 1 4 -35.05862 -30.88053 21.52931
#fire_model_2 2 6 -33.35840 -27.09127 22.67920 1 vs 2 2.299789 0.3167
Upvotes: 1