I have some data that when plotted looks similar to this:
Then eyeballing the charts on this page, it looks like I might have an exponential decay (Increasing form) relationship?
I searched for how to fit this type of model in R and found this SO post. The solution from that post:
set.seed(1) # so the example is reproduceable
df <- data.frame(Abundance=sort(sample(1:70,30)))
df$Richness <- with(df, 20*(1-exp(-0.03*Abundance))+rnorm(30))
fit <- nls(Richness ~ C*(1-exp(k*Abundance)),data=df,
algorithm="port",
start=c(C=10,k=-1),lower=c(C=0,k=-Inf), upper=c(C=Inf,k=0))
I tried to fit this to my own data but get a convergence error:
fit <- nls(TOTAL_CUMULATIVE_AMOUNT ~ C*(1-exp(k*TENURE)), data=pdata2,
+ algorithm="port",
+ start=c(C=10,k=-1),lower=c(C=0,k=-Inf), upper=c(C=Inf,k=0))
Error in nls(TOTAL_CUMULATIVE_AMOUNT ~ C * (1 - exp(k * TENURE)), data = pdata2, :
Convergence failure: singular convergence (7)
I was unsure what start
, lower
and upper
where in this context so looked at the documentation for ?nls
:
start: a named list or named numeric vector of starting estimates.
When start is missing (and formula is not a self-starting model, see
selfStart), a very cheap guess for start is tried (if algorithm !=
"plinear").lower/upper: vectors of lower and upper bounds, replicated to be as
long as start. If unspecified, all parameters are assumed to be
unconstrained. Bounds can only be used with the "port" algorithm. They
are ignored, with a warning, if given for other algorithms.
I still don't really understand what those mean.
I tried leaving them out and fitting again but this gave another error:
fit <- nls(TOTAL_CUMULATIVE_AMOUNT ~ C*(1-exp(k*TENURE)), data=pdata2,
+ algorithm="port")
Error in C * (1 - exp(k * TENURE)) :
non-numeric argument to binary operator
Here's a summary of pdata2
:
pdata2 %>% summary
TENURE TOTAL_CUMULATIVE_AMOUNT
Min. : 7.0 Min. :1.207e+08
1st Qu.:187.8 1st Qu.:1.191e+09
Median :368.5 Median :1.703e+09
Mean :368.5 Mean :1.538e+09
3rd Qu.:549.2 3rd Qu.:1.969e+09
Max. :730.0 Max. :2.119e+09
pdata2 %>% glimpse
Rows: 724
Columns: 2
$ TENURE <dbl> 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,…
$ TOTAL_CUMULATIVE_AMOUNT <dbl> 12065.81, 13422.30, 14708.39, 15923.89, 17107.51, 18243.34, 19395.96, 20…
How can I overcome this error and fit a exponential decay (increasing form) model?
[Edit]
Scaled and sanitized data, here's the dput of pdata2:
structure(list(TENURE = c(7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473,
474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486,
487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512,
513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525,
526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538,
539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577,
578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590,
591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603,
604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616,
617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629,
630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642,
643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,
682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694,
695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707,
708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720,
721, 722, 723, 724, 725, 726, 727, 728, 729, 730), TOTAL_CUMULATIVE_AMOUNT = c(120.658144,
134.222981, 147.083863, 159.238861, 171.07506, 182.433427, 193.959608,
205.398569, 217.065617, 227.88294, 238.208604, 248.7267, 259.033375,
269.645001, 280.22768, 290.339236, 300.175645, 309.893532, 319.401227,
328.538212, 337.812905, 346.897638, 356.256771, 365.203453, 374.028778,
382.44069, 391.031376, 399.603472, 408.643964, 417.62814, 425.905169,
433.880421, 442.137973, 450.552238, 458.817027, 467.328472, 475.763503,
483.932499, 491.837662, 499.533161, 507.334929, 515.577564, 523.74277,
531.629968, 539.297029, 546.683601, 554.070205, 561.262417, 568.487104,
575.741234, 582.921559, 589.671381, 596.42627, 603.115026, 610.038471,
616.910091, 623.626384, 630.386505, 636.95572, 643.033317, 649.249905,
655.330175, 661.8546, 668.450269, 675.098372, 681.524995, 687.873301,
694.147956, 700.505076, 706.964236, 713.422493, 719.760698, 725.931634,
731.999539, 738.055802, 743.957791, 749.99346, 756.130357, 762.077698,
767.799198, 773.650374, 779.182589, 784.743745, 790.331146, 795.880115,
801.298307, 806.524801, 811.712454, 816.822691, 821.595714, 826.572265,
831.77164, 837.024091, 842.260608, 847.209915, 852.37978, 857.474076,
862.78088, 868.00515, 873.381476, 878.25394, 883.144414, 887.951485,
892.789252, 897.888436, 902.783288, 907.86608, 912.641968, 917.480793,
922.212901, 926.830266, 931.138449, 935.693909, 940.170322, 944.446869,
948.740737, 952.613686, 956.618882, 961.00304, 965.167469, 969.386703,
973.634411, 977.892102, 981.991028, 986.129414, 990.283106, 994.517307,
998.58441, 1002.682591, 1006.611134, 1010.656914, 1014.5957,
1018.852938, 1023.053059, 1027.293643, 1031.410214, 1035.34798,
1039.265272, 1043.157102, 1047.040021, 1050.864722, 1054.764933,
1058.244164, 1061.742756, 1065.266805, 1068.59785, 1072.123547,
1075.62904, 1079.227407, 1082.703456, 1086.119529, 1089.39846,
1092.684765, 1096.106552, 1099.430422, 1102.964752, 1106.267448,
1109.678124, 1113.008005, 1116.387063, 1120.13737, 1123.723282,
1127.398092, 1130.718812, 1134.390364, 1138.054106, 1141.497474,
1144.981198, 1148.473253, 1152.063834, 1155.414638, 1158.86215,
1162.231715, 1165.461909, 1168.959181, 1172.251376, 1175.614261,
1178.964644, 1182.154069, 1185.338248, 1188.626183, 1192.02864,
1195.565526, 1199.110816, 1202.663641, 1206.077989, 1209.294201,
1212.90853, 1216.563103, 1220.366396, 1224.2231, 1227.84374,
1231.72717, 1235.474692, 1239.367729, 1243.368245, 1247.34284,
1251.397334, 1255.199083, 1259.067231, 1262.995486, 1266.839902,
1270.844278, 1274.544348, 1278.462843, 1282.244194, 1286.059436,
1289.712231, 1293.522813, 1297.489811, 1301.467906, 1305.34363,
1309.235806, 1312.996128, 1316.735788, 1320.669961, 1324.753659,
1328.804284, 1332.754207, 1336.738981, 1340.545334, 1344.40407,
1348.305588, 1352.371126, 1356.334823, 1360.299955, 1363.904752,
1367.702834, 1371.617151, 1375.284838, 1379.101011, 1382.813628,
1386.333213, 1389.743653, 1393.19626, 1396.504151, 1399.842653,
1403.069048, 1406.239951, 1409.303995, 1412.339564, 1415.322623,
1418.305515, 1420.994144, 1423.982232, 1427.052502, 1430.145899,
1433.122526, 1436.083515, 1439.057432, 1442.071709, 1445.13259,
1448.185091, 1451.381345, 1454.330247, 1457.269911, 1460.174267,
1462.995213, 1466.115549, 1468.980675, 1471.846668, 1474.654904,
1477.216483, 1479.754973, 1482.376588, 1485.067753, 1487.733443,
1490.324571, 1492.931949, 1495.236589, 1497.511185, 1499.797216,
1502.305557, 1504.928327, 1507.512611, 1509.99524, 1512.443055,
1515.004266, 1517.554906, 1520.30226, 1523.050502, 1525.814132,
1528.317127, 1530.983185, 1533.701645, 1536.499075, 1539.360258,
1542.147208, 1545.005254, 1547.59168, 1550.095662, 1552.846693,
1555.434547, 1558.075603, 1560.508738, 1563.170669, 1565.440903,
1567.777821, 1570.200538, 1572.473211, 1574.871431, 1577.285379,
1579.642384, 1581.941331, 1584.237304, 1586.506749, 1588.946016,
1591.354846, 1593.89034, 1596.317624, 1598.814065, 1601.163581,
1603.433059, 1605.824195, 1608.368816, 1610.906523, 1613.400685,
1615.747353, 1618.164303, 1620.453064, 1622.75839, 1625.06362,
1627.207458, 1629.347692, 1631.464796, 1633.367574, 1635.226171,
1637.21937, 1639.143279, 1641.134923, 1643.004188, 1644.84348,
1646.795757, 1648.510309, 1650.331746, 1652.343251, 1654.205449,
1656.179753, 1657.97928, 1659.890551, 1661.760924, 1663.721208,
1665.878364, 1668.071522, 1670.222918, 1672.279365, 1674.357448,
1676.444112, 1678.395956, 1680.514781, 1682.514992, 1684.567783,
1686.454762, 1688.292311, 1690.080282, 1691.836858, 1693.690806,
1695.45231, 1697.237985, 1698.782572, 1700.367967, 1701.930589,
1703.575422, 1705.308103, 1707.014531, 1708.759111, 1710.459851,
1712.229397, 1713.904607, 1715.53513, 1717.359619, 1719.273153,
1721.269764, 1723.174235, 1724.952676, 1726.766171, 1728.716402,
1730.723349, 1732.638268, 1734.523676, 1736.336088, 1738.127718,
1739.952827, 1741.716276, 1743.534389, 1745.303761, 1746.958243,
1748.72396, 1750.327146, 1751.895053, 1753.411818, 1755.047015,
1756.763254, 1758.426989, 1760.005224, 1761.555474, 1763.107565,
1764.712157, 1766.306445, 1767.923549, 1769.60143, 1771.171298,
1772.741663, 1774.315452, 1775.905081, 1777.777227, 1779.543643,
1781.27696, 1782.958628, 1784.576438, 1786.181779, 1787.792262,
1789.445287, 1790.923773, 1792.39076, 1793.854135, 1795.361157,
1796.863343, 1798.223991, 1799.810749, 1801.376326, 1802.839369,
1804.232902, 1805.659449, 1807.079526, 1808.415968, 1809.87946,
1811.438264, 1813.026061, 1814.516293, 1815.987857, 1817.466149,
1819.123237, 1820.923127, 1822.742003, 1824.430273, 1826.19286,
1827.85354, 1829.495486, 1831.083874, 1832.901235, 1834.553371,
1836.19862, 1837.754796, 1839.291447, 1840.940053, 1842.588251,
1844.304211, 1845.832641, 1847.455655, 1848.890278, 1850.363349,
1851.768116, 1853.20816, 1854.780594, 1856.41732, 1857.992287,
1859.496168, 1861.014546, 1862.588633, 1864.052801, 1865.682258,
1867.332324, 1868.928318, 1870.496911, 1871.957182, 1873.477532,
1875.018451, 1876.678698, 1878.315847, 1879.882682, 1881.388598,
1882.846858, 1884.291378, 1885.743881, 1887.241131, 1888.564247,
1890.070431, 1891.39115, 1892.665267, 1893.850056, 1895.131998,
1896.392988, 1897.712892, 1899.043681, 1900.257178, 1901.467152,
1902.666816, 1903.872949, 1905.094606, 1906.344748, 1907.670942,
1908.963841, 1910.182558, 1911.442594, 1912.699588, 1914.055497,
1915.378803, 1916.847055, 1918.121266, 1919.388446, 1920.658823,
1921.954494, 1923.182034, 1924.52994, 1925.756313, 1926.9195,
1928.183374, 1929.390734, 1930.468215, 1931.613638, 1932.811333,
1933.956674, 1935.083563, 1936.094193, 1937.146568, 1938.097524,
1939.133879, 1940.191244, 1941.266231, 1942.395255, 1943.536303,
1944.625599, 1945.807483, 1946.976349, 1948.23384, 1949.467243,
1950.789394, 1952.072652, 1953.193346, 1954.533898, 1955.835956,
1957.095555, 1958.337401, 1959.588729, 1960.705211, 1961.880867,
1962.940155, 1964.109688, 1965.267875, 1966.33494, 1967.432935,
1968.377021, 1969.4206, 1970.413201, 1971.512269, 1972.649377,
1973.726413, 1974.808854, 1975.895989, 1977.043123, 1978.157038,
1979.210513, 1980.344019, 1981.363123, 1982.460554, 1983.588788,
1984.703296, 1985.756032, 1986.979204, 1988.202853, 1989.392291,
1990.53944, 1991.668943, 1992.743234, 1993.763261, 1994.849328,
1995.941137, 1997.060964, 1998.055055, 1999.062206, 2000.058294,
2001.085915, 2002.112686, 2003.148157, 2004.220921, 2005.213965,
2006.199354, 2007.193265, 2008.097689, 2009.18287, 2010.263105,
2011.289517, 2012.29533, 2013.374441, 2014.414378, 2015.532926,
2016.612376, 2017.699906, 2018.78173, 2019.793475, 2020.86628,
2021.82259, 2022.779732, 2023.720419, 2024.726128, 2025.769499,
2026.588959, 2027.527135, 2028.360566, 2029.186272, 2030.108328,
2031.009647, 2031.845284, 2032.702852, 2033.499841, 2034.366214,
2035.129436, 2035.97315, 2036.954232, 2037.841308, 2038.599598,
2039.433289, 2040.194893, 2040.982037, 2041.829719, 2042.736004,
2043.708097, 2044.591034, 2045.417719, 2046.171035, 2047.020962,
2047.861129, 2048.771176, 2049.610206, 2050.415006, 2051.206384,
2051.91939, 2052.661776, 2053.416051, 2054.143987, 2054.944003,
2055.665503, 2056.382868, 2057.101225, 2057.746514, 2058.390645,
2059.14009, 2059.901556, 2060.655685, 2061.348192, 2062.016618,
2062.703635, 2063.459766, 2064.170619, 2065.028039, 2065.739219,
2066.46064, 2067.155939, 2067.95052, 2068.759063, 2069.580089,
2070.320339, 2071.087929, 2071.879018, 2072.596424, 2073.275462,
2074.004092, 2074.735455, 2075.417659, 2076.112459, 2076.726591,
2077.491649, 2078.211092, 2078.877653, 2079.658134, 2080.334735,
2080.900122, 2081.612223, 2082.188123, 2082.842574, 2083.512981,
2084.16379, 2084.882462, 2085.589718, 2086.296668, 2086.968431,
2087.662409, 2088.376486, 2089.091666, 2089.837666, 2090.573526,
2091.300063, 2091.944606, 2092.684779, 2093.444628, 2094.250776,
2094.937853, 2095.691648, 2096.373772, 2097.052356, 2097.819015,
2098.454447, 2099.148136, 2099.804163, 2100.474076, 2101.083332,
2101.710105, 2102.374124, 2103.007984, 2103.701434, 2104.386384,
2105.103455, 2105.738529, 2106.329921, 2106.976084, 2107.649693,
2108.374716, 2109.083112, 2109.740453, 2110.413842, 2111.043085,
2111.811259, 2112.514298, 2113.186637, 2113.848428, 2114.541891,
2115.278173, 2115.904512, 2116.545973, 2117.164639, 2117.787811,
2118.424383, 2119.028871)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -724L))
Best Answer
Your issue are the bad starting values. You can easily fit this model using a self-starting model.
However, the functional relationship doesn't seem to be well described by this model. I don't know anything about your data but a quick test suggests that a Michaelis-Menten kinetic seems to fit better.
Obviously, the choice of model has a strong impact on the fitted asymptote because you have no measured values close to the actual asymptote.