0

I'm trying to fit and plot (using ggplot2) a double first-order exponential decay equation "y=[a1exp(-k1t)]+[a2exp(-k2t)]" to my experimental data (radioactive decay) using the nls function but I unable since the following warning messages are displayed:

Warning messages:
1: In (function (formula, data = parent.frame(), start, control = nls.control(), :
No starting values specified for some parameters. Initializing ‘a1’, ‘k1’, ‘a2’, ‘k2’ to '1.'. Consider specifying 'start' or using a selfStart model
2: Computation failed in stat_smooth(): singular gradient matrix at initial parameter estimates.

This error is probably related to bad initial guess for a1, k1, a2, and k2. Therefore, I noticed that R can "guess" my start parameters with the self-starting function (SSasymp). However, I'm not able to implement this function for a double first-order exponential decay equation, which is mandatory for my experimental data (both compartments a1 and a2 and needed). I was capable to fit a simple exponential decay equation using SSasymp, which line is commented in the code, but does not meet my needs, sadly. I also need to read out the fit parameters, which will be submitted to statistical tests. This is the code that I'm using:

Fig1a <- ggplot(CREMglucose, aes(x = Day, y = Mean, color = factor(Fert, levels = c("Control", "Ammonium nitrate", "Ammonium sulfate", "Diammonium phosphate", "Potassium nitrate", "Struvite", "Urea")))) +
  geom_point(aes(size = factor(Fert, levels = c("Control", "Ammonium nitrate", "Ammonium sulfate", "Diammonium phosphate", "Potassium nitrate", "Struvite", "Urea")), shape = factor(Fert, levels = c("Control", "Ammonium nitrate", "Ammonium sulfate", "Diammonium phosphate", "Potassium nitrate", "Struvite", "Urea"))), alpha = 0.7, show.legend = FALSE) +
  geom_errorbar(aes(ymin = Mean - se, ymax = Mean + se), size = 0.2, show.legend = FALSE) +
  #geom_smooth(method = "nls", formula = y ~ SSasymp(x, Asym, R0, lrc), se = FALSE, lwd = 0.4, show.legend = FALSE) +
  geom_smooth(method = "nls", formula = y ~ (a1 * exp(-k1 * x)) + (a2 * exp(-k2 * x)), start = list(a1 = 1, k1 = 0.01, a2 = 1, k2 = 0.01), se = FALSE, lwd = 0.4, show.legend = FALSE) +
  xlab(expression('Time after compound addition (d)')) +
  ylab(expression({}^{14}*'C remaining (% of the total added)')) +
  coord_cartesian(xlim = c(0, 21), ylim = c(0, 100)) +
  scale_x_continuous(breaks = c(0, 4, 8, 12, 16, 20)) +
  scale_y_continuous(breaks = c(0, 20, 40, 60, 80, 100)) +
  scale_shape_manual(values = c(6, 0, 15, 1, 16, 2, 17)) +
  scale_size_manual(values = c(2.2, 2.2, 2.3, 2.2, 2.3, 2.2, 2.3)) +
  annotate("text", x = 17.5, y = 100, label = "(a) Glucosamine", size = 3.5, fontface = "bold") +
  theme(axis.text.y = element_text(size = 10, color = "black"),
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 10),
        axis.title.x = element_blank(),
        legend.text = element_blank(),
        legend.title = element_blank(),
        panel.background = element_blank(),
        panel.grid.major = element_line(color = "gray96", size = 0.50), 
        panel.grid.minor = element_line(color = "gray96", size = 0.30),
        axis.line = element_line(color = "black", size = 0.5),
        panel.border = element_rect(color = "black", fill = NA, size = 0.5))
Fig1a

In addition to my data:

Fert    Day CREMglucose
Control 0.00    100 
Control 0.00    100 
Control 0.00    100 
Control 0.00    100 
Control 0.08    94 
Control 0.08    95 
Control 0.08    94 
Control 0.08    93 
Control 0.17    89 
Control 0.17    91 
Control 0.17    89 
Control 0.17    89 
Control 0.33    85 
Control 0.33    86 
Control 0.33    86 
Control 0.33    85 
Control 1.00    81 
Control 1.00    81 
Control 1.00    83 
Control 1.00    81 
Control 2.00    79 
Control 2.00    78 
Control 2.00    81 
Control 2.00    79 
Control 3.00    77 
Control 3.00    77 
Control 3.00    80 
Control 3.00    78 
Control 5.00    75 
Control 5.00    75 
Control 5.00    78 
Control 5.00    77 
Control 8.00    74 
Control 8.00    74 
Control 8.00    77 
Control 8.00    75 
Control 11.00   73 
Control 11.00   72 
Control 11.00   76 
Control 11.00   74 
Control 15.00   72 
Control 15.00   71 
Control 15.00   74 
Control 15.00   73 
Control 20.00   70 
Control 20.00   70 
Control 20.00   73 
Control 20.00   72 
Ammonium nitrate    0.00    100 
Ammonium nitrate    0.00    100 
Ammonium nitrate    0.00    100 
Ammonium nitrate    0.00    100 
Ammonium nitrate    0.08    96 
Ammonium nitrate    0.08    97 
Ammonium nitrate    0.08    96 
Ammonium nitrate    0.08    95 
Ammonium nitrate    0.17    93 
Ammonium nitrate    0.17    94 
Ammonium nitrate    0.17    92 
Ammonium nitrate    0.17    91 
Ammonium nitrate    0.33    86 
Ammonium nitrate    0.33    88 
Ammonium nitrate    0.33    86 
Ammonium nitrate    0.33    85 
Ammonium nitrate    1.00    78 
Ammonium nitrate    1.00    78 
Ammonium nitrate    1.00    80 
Ammonium nitrate    1.00    79 
Ammonium nitrate    2.00    74 
Ammonium nitrate    2.00    74 
Ammonium nitrate    2.00    76 
Ammonium nitrate    2.00    75 
Ammonium nitrate    3.00    71 
Ammonium nitrate    3.00    71 
Ammonium nitrate    3.00    74 
Ammonium nitrate    3.00    73 
Ammonium nitrate    5.00    68 
Ammonium nitrate    5.00    68 
Ammonium nitrate    5.00    71 
Ammonium nitrate    5.00    70 
Ammonium nitrate    8.00    66 
Ammonium nitrate    8.00    65 
Ammonium nitrate    8.00    69 
Ammonium nitrate    8.00    68 
Ammonium nitrate    11.00   64 
Ammonium nitrate    11.00   64 
Ammonium nitrate    11.00   67 
Ammonium nitrate    11.00   66 
Ammonium nitrate    15.00   63 
Ammonium nitrate    15.00   62 
Ammonium nitrate    15.00   65 
Ammonium nitrate    15.00   64 
Ammonium nitrate    20.00   61 
Ammonium nitrate    20.00   59 
Ammonium nitrate    20.00   63 
Ammonium nitrate    20.00   62 
Ammonium sulfate    0.00    100 
Ammonium sulfate    0.00    100 
Ammonium sulfate    0.00    100 
Ammonium sulfate    0.00    100 
Ammonium sulfate    0.08    95 
Ammonium sulfate    0.08    97 
Ammonium sulfate    0.08    95 
Ammonium sulfate    0.08    93 
Ammonium sulfate    0.17    91 
Ammonium sulfate    0.17    94 
Ammonium sulfate    0.17    91 
Ammonium sulfate    0.17    88 
Ammonium sulfate    0.33    85 
Ammonium sulfate    0.33    88 
Ammonium sulfate    0.33    85 
Ammonium sulfate    0.33    84 
Ammonium sulfate    1.00    79 
Ammonium sulfate    1.00    79 
Ammonium sulfate    1.00    81 
Ammonium sulfate    1.00    79 
Ammonium sulfate    2.00    77 
Ammonium sulfate    2.00    76 
Ammonium sulfate    2.00    78 
Ammonium sulfate    2.00    77 
Ammonium sulfate    3.00    75 
Ammonium sulfate    3.00    74 
Ammonium sulfate    3.00    76 
Ammonium sulfate    3.00    75 
Ammonium sulfate    5.00    73 
Ammonium sulfate    5.00    71 
Ammonium sulfate    5.00    74 
Ammonium sulfate    5.00    72 
Ammonium sulfate    8.00    71 
Ammonium sulfate    8.00    68 
Ammonium sulfate    8.00    72 
Ammonium sulfate    8.00    69 
Ammonium sulfate    11.00   69 
Ammonium sulfate    11.00   66 
Ammonium sulfate    11.00   70 
Ammonium sulfate    11.00   68 
Ammonium sulfate    15.00   68 
Ammonium sulfate    15.00   65 
Ammonium sulfate    15.00   69 
Ammonium sulfate    15.00   67 
Ammonium sulfate    20.00   66 
Ammonium sulfate    20.00   63 
Ammonium sulfate    20.00   67 
Ammonium sulfate    20.00   65 
Diammonium phosphate    0.00    100 
Diammonium phosphate    0.00    100 
Diammonium phosphate    0.00    100 
Diammonium phosphate    0.00    100 
Diammonium phosphate    0.08    95 
Diammonium phosphate    0.08    95 
Diammonium phosphate    0.08    95 
Diammonium phosphate    0.08    94 
Diammonium phosphate    0.17    90 
Diammonium phosphate    0.17    90 
Diammonium phosphate    0.17    90 
Diammonium phosphate    0.17    89 
Diammonium phosphate    0.33    83 
Diammonium phosphate    0.33    82 
Diammonium phosphate    0.33    83 
Diammonium phosphate    0.33    82 
Diammonium phosphate    1.00    76 
Diammonium phosphate    1.00    75 
Diammonium phosphate    1.00    77 
Diammonium phosphate    1.00    76 
Diammonium phosphate    2.00    73 
Diammonium phosphate    2.00    71 
Diammonium phosphate    2.00    74 
Diammonium phosphate    2.00    73 
Diammonium phosphate    3.00    71 
Diammonium phosphate    3.00    69 
Diammonium phosphate    3.00    72 
Diammonium phosphate    3.00    71 
Diammonium phosphate    5.00    68 
Diammonium phosphate    5.00    65 
Diammonium phosphate    5.00    69 
Diammonium phosphate    5.00    68 
Diammonium phosphate    8.00    65 
Diammonium phosphate    8.00    63 
Diammonium phosphate    8.00    66 
Diammonium phosphate    8.00    65 
Diammonium phosphate    11.00   64 
Diammonium phosphate    11.00   61 
Diammonium phosphate    11.00   64 
Diammonium phosphate    11.00   63 
Diammonium phosphate    15.00   62 
Diammonium phosphate    15.00   59 
Diammonium phosphate    15.00   62 
Diammonium phosphate    15.00   62 
Diammonium phosphate    20.00   60 
Diammonium phosphate    20.00   57 
Diammonium phosphate    20.00   60 
Diammonium phosphate    20.00   59 
Potassium nitrate   0.00    100 
Potassium nitrate   0.00    100 
Potassium nitrate   0.00    100 
Potassium nitrate   0.00    100 
Potassium nitrate   0.08    97 
Potassium nitrate   0.08    98 
Potassium nitrate   0.08    96 
Potassium nitrate   0.08    96 
Potassium nitrate   0.17    93 
Potassium nitrate   0.17    95 
Potassium nitrate   0.17    93 
Potassium nitrate   0.17    92 
Potassium nitrate   0.33    87 
Potassium nitrate   0.33    90 
Potassium nitrate   0.33    88 
Potassium nitrate   0.33    87 
Potassium nitrate   1.00    79 
Potassium nitrate   1.00    80 
Potassium nitrate   1.00    82 
Potassium nitrate   1.00    81 
Potassium nitrate   2.00    75 
Potassium nitrate   2.00    75 
Potassium nitrate   2.00    78 
Potassium nitrate   2.00    78 
Potassium nitrate   3.00    73 
Potassium nitrate   3.00    72 
Potassium nitrate   3.00    76 
Potassium nitrate   3.00    76 
Potassium nitrate   5.00    70 
Potassium nitrate   5.00    70 
Potassium nitrate   5.00    73 
Potassium nitrate   5.00    73 
Potassium nitrate   8.00    67 
Potassium nitrate   8.00    67 
Potassium nitrate   8.00    71 
Potassium nitrate   8.00    71 
Potassium nitrate   11.00   65 
Potassium nitrate   11.00   65 
Potassium nitrate   11.00   69 
Potassium nitrate   11.00   69 
Potassium nitrate   15.00   63 
Potassium nitrate   15.00   63 
Potassium nitrate   15.00   67 
Potassium nitrate   15.00   67 
Potassium nitrate   20.00   61 
Potassium nitrate   20.00   60 
Potassium nitrate   20.00   64 
Potassium nitrate   20.00   65 
Struvite    0.00    100 
Struvite    0.00    100 
Struvite    0.00    100 
Struvite    0.00    100 
Struvite    0.08    95 
Struvite    0.08    96 
Struvite    0.08    94 
Struvite    0.08    95 
Struvite    0.17    90 
Struvite    0.17    92 
Struvite    0.17    89 
Struvite    0.17    90 
Struvite    0.33    85 
Struvite    0.33    86 
Struvite    0.33    86 
Struvite    0.33    87 
Struvite    1.00    81 
Struvite    1.00    82 
Struvite    1.00    83 
Struvite    1.00    83 
Struvite    2.00    78 
Struvite    2.00    79 
Struvite    2.00    81 
Struvite    2.00    81 
Struvite    3.00    77 
Struvite    3.00    77 
Struvite    3.00    80 
Struvite    3.00    80 
Struvite    5.00    75 
Struvite    5.00    75 
Struvite    5.00    78 
Struvite    5.00    78 
Struvite    8.00    73 
Struvite    8.00    73 
Struvite    8.00    76 
Struvite    8.00    77 
Struvite    11.00   72 
Struvite    11.00   72 
Struvite    11.00   75 
Struvite    11.00   76 
Struvite    15.00   71 
Struvite    15.00   70 
Struvite    15.00   74 
Struvite    15.00   75 
Struvite    20.00   69 
Struvite    20.00   69 
Struvite    20.00   72 
Struvite    20.00   73 
Urea    0.00    100 
Urea    0.00    100 
Urea    0.00    100 
Urea    0.00    100 
Urea    0.08    98 
Urea    0.08    98 
Urea    0.08    99 
Urea    0.08    98 
Urea    0.17    96 
Urea    0.17    95 
Urea    0.17    97 
Urea    0.17    96 
Urea    0.33    90 
Urea    0.33    89 
Urea    0.33    93 
Urea    0.33    90 
Urea    1.00    76 
Urea    1.00    74 
Urea    1.00    80 
Urea    1.00    79 
Urea    2.00    67 
Urea    2.00    66 
Urea    2.00    69 
Urea    2.00    70 
Urea    3.00    62 
Urea    3.00    61 
Urea    3.00    62 
Urea    3.00    64 
Urea    5.00    54 
Urea    5.00    53 
Urea    5.00    53 
Urea    5.00    55 
Urea    8.00    47 
Urea    8.00    45 
Urea    8.00    44 
Urea    8.00    47 
Urea    11.00   42 
Urea    11.00   40 
Urea    11.00   39 
Urea    11.00   41 
Urea    15.00   37 
Urea    15.00   35 
Urea    15.00   35 
Urea    15.00   37 
Urea    20.00   33 
Urea    20.00   31 
Urea    20.00   30 
Urea    20.00   32 

Does anyone know how to fit and plot this equation in R?

Richard Telford
  • 9,558
  • 6
  • 38
  • 51
  • With complex models, the best strategy is to fit the model in nls directly, and then use ggplot to show the fitted values. Trying to do everything at once over complicates the problem. How did you estimate your starting values, and are they really the same for all values of Fert. – Richard Telford Jul 13 '20 at 09:42
  • These starting values were randomly chosen to be honest. It can be tricky to choose good starting values for non-linear regression, which is very disappointing. The SSasymp function could solve this problem. In this case, I was able to choose adequate "guesses" since I used SigmaPlot to fit the equation to my data. The following code was used: "geom_smooth(method = "nls", formula = y ~ (a1 * exp(-k1 * x)) + (a2 * exp(-k2 * x)), method.args = list(start = list(a1 = 47, k1 = 0.39, a2 = 51, k2 = 0.0022)), se = FALSE, lwd = 0.4, show.legend = FALSE, data = CREMglucosamine)". – Articulador Jul 13 '20 at 21:21

0 Answers0