Reputation: 55
Question: Can tidyverse
, ggplot2
, and dplyr
conflict with minpack.lm
in a way that causes nlsLM
to give this error below?
"Error in numericDeriv(form[[3L]], names(ind), env) :
Missing value or an infinity produced when evaluating the model"
If I run the script without loading tidyverse
, ggplot2
, and dplyr
, nlsLM
runs
fine. However, with those packages loaded, it fails. I need tidyverse
, ggplot2
, and dplyr
for other purposes. I have been working on this for nearly three weeks, and no progress. Does someone know of a way to fix this?
# Packages possibly conflicting with minpack.lm:
library(tidyverse)
library(ggplot2)
library(dplyr)
df1<-structure(list(t = c(41.81456, 41.8979, 41.98122, 42.06455, 42.14788,
42.23121, 42.31454, 42.39787, 42.48121, 42.56454, 42.64786, 42.73119,
42.81451, 42.89785, 42.98118, 43.0645, 43.14782, 43.23115, 43.31448,
43.39781, 43.48115, 43.56449, 43.64783, 43.73117, 43.81451, 43.89784,
43.98117, 44.06451, 44.14784, 44.23118, 44.31451, 44.39785, 44.48119,
44.56452, 44.64785, 44.73118, 44.81451, 44.89782, 44.98116, 45.06449,
45.14782, 45.23115, 45.31448, 45.39782, 45.48115, 45.56447, 45.6478,
45.73113, 45.81446, 45.89779, 45.98112, 46.06445, 46.14778, 46.23111,
46.31444, 46.39777, 46.4811, 46.56443, 46.64776, 46.73109, 46.81443,
46.89776, 46.98109, 47.06442, 47.14775, 47.23108, 47.31441, 47.39775,
47.48107, 47.56441, 47.64776, 47.7311, 47.81444, 47.89777, 47.98109,
48.06442, 48.14775, 48.23107, 48.3144, 48.39773, 48.48105, 48.56438,
48.64771, 48.73105, 48.81437, 48.8977, 48.98103, 49.06436, 49.14769,
49.23102, 49.31436, 49.39769, 49.48103, 49.56436, 49.64769, 49.73102,
49.81436, 49.8977, 49.98104, 50.06438, 50.14771, 50.23105, 50.31439,
50.39772, 50.48105, 50.56438, 50.64771, 50.73104, 50.81437, 50.89771,
50.98103, 51.06437, 51.1477, 51.23102, 51.31436, 51.3977, 51.48104,
51.56437, 51.64771, 51.73104, 51.81437, 51.8977), P = c(8.53088824439479,
8.54319105274227, 8.5555134721853, 8.56660057261653, 8.56783757915745,
8.57768800513352, 8.58814995423046, 8.59615183327934, 8.60475905763426,
8.61151122664739, 8.61946930385678, 8.62562672212793, 8.63056169622599,
8.63489484553338, 8.64039106397303, 8.64405303111868, 8.64957339880156,
8.65326161930697, 8.65761233299738, 8.66131659363462, 8.66623040333336,
8.66929200000484, 8.68039562456149, 8.68162507943826, 8.68287426533,
8.69214593674048, 8.69343441809466, 8.70143769136384, 8.71004329016597,
8.7192507719376, 8.72902653791303, 8.74682616577394, 8.75664164140497,
8.77448123911484, 8.79174047830324, 8.81022129563025, 8.82812160684839,
8.8441634691567, 8.8687915571925, 8.89340014894745, 8.92719379634901,
8.95295878043183, 8.98491861330606, 9.01805456499124, 9.04270208267931,
9.07593635545342, 9.10915089111537, 9.15035717467767, 9.18236246396164,
9.22352781798659, 9.2542834391574, 9.29489432517773, 9.33429562925209,
9.36386145814447, 9.40939043953831, 9.44635281486372, 9.4820463817321,
9.53555998000974, 9.57742014994852, 9.62786613431272, 9.66968498605682,
9.72009094496871, 9.76930733695951, 9.81848370500752, 9.86645026740704,
9.91391414193938, 9.96131148668913, 10.0080360882848, 10.052913317416,
10.0971191941511, 10.1555522193152, 10.21173263939, 10.259922523807,
10.2982528980911, 10.3342257346323, 10.3528278963152, 10.3879101292573,
10.4230772100412, 10.4680744971081, 10.5039735037242, 10.5379870034075,
10.5789653267884, 10.6111749453033, 10.6508393242337, 10.6898506329465,
10.7087817942742, 10.733861485256, 10.7502548560023, 10.7757396638767,
10.7919670601155, 10.816147522643, 10.8402493791566, 10.8668049690756,
10.8879433776052, 10.9097454472612, 10.9334224464139, 10.964974571933,
10.9969326626233, 11.0308446892133, 11.0560694664594, 11.0800932317964,
11.1040333226519, 11.1278941503041, 11.1516776611771, 11.1784807640745,
11.2048059703341, 11.2241522962566, 11.2517081712771, 11.289149062585,
11.3185710815297, 11.3380930113004, 11.3659382821831, 11.3938657029567,
11.4121476074725, 11.439665508855, 11.4743283996282, 11.4988316648768,
11.5243780650564, 11.5477464246768, 11.5709581673817, 11.5823109564472,
11.6036048977594), C = c(0.650764810233295, 0.631656247736403,
0.612574832717267, 0.592254327802933, 0.562083727098265, 0.540526543845557,
0.519580881643709, 0.496175147233211, 0.473370986808824, 0.448715537753335,
0.425269763502698, 0.400019558684505, 0.373550676082862, 0.346472427765102,
0.320561014730082, 0.292819116425163, 0.266935615482259, 0.23921619498004,
0.212159264203219, 0.184455876762495, 0.157958265545584, 0.129608437367395,
0.109300632968539, 0.0791186546046685, 0.0489564027835421, 0.0268204008855406,
-0.00329879593875582, -0.02670697500362, -0.0495090647673724,
-0.0717130461716859, -0.0933449800756243, -0.106956827199008,
-0.128552832845783, -0.142120953904213, -0.156269440336667, -0.169196355781731,
-0.182703784798489, -0.198062132351044, -0.204845569545366, -0.211644742420704,
-0.209258868499942, -0.214901667133789, -0.214349626614176, -0.212625246428741,
-0.219385541649181, -0.217555323645168, -0.215748623270574, -0.205950186921044,
-0.205352757293911, -0.195595275910987, -0.196247540931955, -0.187044555242156,
-0.179051166251591, -0.180893267837376, -0.166772232984931, -0.161217820961941,
-0.156932234884994, -0.134826635647281, -0.124374483789239, -0.105336537373178,
-0.0949295134260186, -0.0759316348239327, -0.0581233457108326,
-0.0403551040874213, -0.0237966926807225, -0.00774099477483325,
0.00824814660338902, 0.0235607477828133, 0.0370334856643044,
0.0498273024863298, 0.0768444668864738, 0.101612762271841, 0.118390487493773,
0.125312435746874, 0.129880577876097, 0.117074236807964, 0.120747926128578,
0.124510189835743, 0.138098846163867, 0.142589175633473, 0.145197718956352,
0.154767266273982, 0.155568056034102, 0.16381978202047, 0.171425918885097,
0.158948079322149, 0.152618707006763, 0.137602949353951, 0.131678560916043,
0.116496689997248, 0.109264042187515, 0.101956480537829, 0.0970988025782429,
0.0868276286254517, 0.0772200282912383, 0.0694872661722599, 0.0696257658632167,
0.0701701313795393, 0.0726683291676462, 0.0664791695181872, 0.0590926546000645,
0.0516185782156224, 0.044065115955533, 0.0364379783982276, 0.0318302994350521,
0.0267445846615217, 0.0146798443901535, 0.0108245018115021, 0.0168540176031886,
0.0148607267783909, 0.00297471408270056, -0.000595675807749885,
-0.00408033311313183, -0.0172069319420931, -0.0211052764486634,
-0.0178588436181535, -0.0247722574716391, -0.0306389973064007,
-0.0386877879669711, -0.0468896766168481, -0.0669507804812142,
-0.0770710048925398), v = c(2.73720919401795e-07, 2.89275866243833e-07,
3.05704744509841e-07, 3.23056147643161e-07, 3.41383503107939e-07,
3.60740020118146e-07, 3.81182894669021e-07, 4.02772468186816e-07,
4.25573817135869e-07, 4.49652809926895e-07, 4.75077190571432e-07,
5.01924516454949e-07, 5.30273542459307e-07, 5.60209325607651e-07,
5.91819764376075e-07, 6.25191565024464e-07, 6.60423815060183e-07,
6.97623624698831e-07, 7.36899824259678e-07, 7.78364716293996e-07,
8.22141727880177e-07, 8.68358553356049e-07, 9.17146942649445e-07,
9.68648499282585e-07, 1.02301254228321e-06, 1.08039295361324e-06,
1.14095522628006e-06, 1.20488164276889e-06, 1.27235309266431e-06,
1.34356428051965e-06, 1.41872017661923e-06, 1.49803720002012e-06,
1.58174837208432e-06, 1.67008400106882e-06, 1.76329669689182e-06,
1.86165861610844e-06, 1.96545125564181e-06, 2.07495771940026e-06,
2.19051033032321e-06, 2.31244676896853e-06, 2.44109344748083e-06,
2.57682364247604e-06, 2.72002332780748e-06, 2.87110867939643e-06,
3.03049986417657e-06, 3.19862819087422e-06, 3.37598849722003e-06,
3.56309366647097e-06, 3.76046212631028e-06, 3.96865098343192e-06,
4.18824726536018e-06, 4.41986951018994e-06, 4.66416943984418e-06,
4.92183372125163e-06, 5.1935858199306e-06, 5.48018795087751e-06,
5.78244313168551e-06, 6.1011973433322e-06, 6.43734180406693e-06,
6.7918153624452e-06, 7.16563024757515e-06, 7.55980712352996e-06,
7.97541858133744e-06, 8.41364335579908e-06, 8.87569896478336e-06,
9.36286778257749e-06, 9.87650045747503e-06, 1.04180531601306e-05,
1.09889579629179e-05, 1.15908264520961e-05, 1.22254359968269e-05,
1.28944314880812e-05, 1.35996142589735e-05, 1.43429180537019e-05,
1.51263316467067e-05, 1.59520940241802e-05, 1.6822522665106e-05,
1.77398981706101e-05, 1.87067840492661e-05, 1.97258854864512e-05,
2.07998638330026e-05, 2.1931710964562e-05, 2.3124583860732e-05,
2.43817436226076e-05, 2.57064566766011e-05, 2.71023147452351e-05,
2.85732719977727e-05, 3.01232366788732e-05, 3.17564077655259e-05,
3.34772050137959e-05, 3.52903930671811e-05, 3.72007656749664e-05,
3.92134811622193e-05, 4.13339600995988e-05, 4.35677774133232e-05,
4.59210633579047e-05, 4.84002939774841e-05, 5.10121441928917e-05,
5.37634740647825e-05, 5.66616536161489e-05, 5.97142485508226e-05,
6.29295921258743e-05, 6.63164729686435e-05, 6.98835178901844e-05,
7.36402014328656e-05, 7.75967281240777e-05, 8.17636166483606e-05,
8.61519334015006e-05, 9.07733206985704e-05, 9.56403286306054e-05,
0.000100765247971781, 0.000106161936108279, 0.000111844981550703,
0.000117828340858234, 0.00012412884956377, 0.000130763552542832,
0.000137749179512345, 0.00014510363839137, 0.000152846660963375,
0.000160998542157569, 0.000169580127136327, 0.000178614349528655
)), row.names = c(NA, -122L), class = c("tbl_df", "tbl", "data.frame"
))
# minpack.lm for nlsLM
install.packages("minpack.lm")
library("minpack.lm")
#objects & df used in ans.2 function:
h<-552
mp<-77
R_<-0.00831
K<-273.15
gstart<-data.frame(h=c(550))#mp=c(70,80),h=c(500,600),mp=c(77)
# exponential function for finding v in df1:
ans.2<- function(x){
h*((1/(1+exp((h/R_)*((1/(x+K))-(1/(mp+K))))))
-(1/(1+exp((h/R_)*((1/(lag(x)+K))-(1/(mp+K))))))
/((x-lag(x))+K))
}
ans.2(x=df1$t)# checking if function works!
# finding values of h and mp that will minimize the residual sum of squares(RSS) between C and v:
#non-expanded ans.2
nlsLM(formula= C~ans.2(x=df1$t),
data=df1,
start=list(h=550,mp=77),
trace=T)
#nlsLM test:
nlsLM(formula= C~h*((
(1/(1+exp((h/R_)*((1/(t+K))-(1/(mp+K))))))
-(1/(1+exp((h/R_)*((1/(lag(t)+K))-(1/(mp+K))))))
)
/((t-lag(t))+K)),
data=df1,
start=gstart,
trace=T)
# saving nlsLM outputs
nls_1<- summary(nlsLM(formula= C~h*(((1/(1+exp((h/R_)*((1/(t+K))-(1/(mp+K))))))
-(1/(1+exp((h/R_)*((1/(lag(t)+K))-(1/(mp+K))))))
/((t-lag(t))+K))),
data=df1,
start=list(h=50),#,mp=77
trace=F))
Upvotes: 2
Views: 504
Reputation: 18754
It's both It's both of the masked functions that cause the problem. However, you an call still call tidyverse
. (ggplot2
and dplyr
are already called, when you call tidyverse
, so calling them again isn't necessary.) To change the two masked functions back, keep your code working, while still using tidyverse
, add this to the code: filter <- stats::filter
and lag <- stats::lag
and it will work. However, if you want to use the dplyr
version of these calls, you can either change them back or append the library to the function.
library(tidyverse)
library(minpack.lm)
# change back the only two masked functions
filter <- stats::filter
lag <- stats::lag
From here, call in your data object df1
and the rest of your functions as you had originally called them.
# objects & df used in ans.2 function:
h <- 552
mp <- 77
R_ <- 0.00831
K <- 273.15
gstart <- data.frame(h = c(550)) # mp=c(70,80), h=c(500,600), mp=c(77)
# exponential function for finding v in df1:
ans.2<- function(x){
h * ((1/ (1 + exp((h/ R_)*((1/ (x + K)) - (1/(mp + K))))))
-(1/ (1 + exp((h/ R_)*((1/ (lag(x) + K)) - (1/(mp + K))))))
/((x - lag(x)) + K))
}
ans.2(x = df1$t) # checking if function works
# finding values of h and mp, minimize residual sum of squares (RSS) between C and v:
# non-expanded ans.2
nlsLM(formula = C~ ans.2(x = df1$t),
data = df1,
start = list(h = 550,
mp = 77),
trace = T)
#nlsLM test:
nlsLM(formula = C ~ h*((
(1/ (1 + exp((h / R_)*((1/(t + K))-(1/(mp + K))))))
-(1/ (1 + exp((h / R_)*((1/(lag(t)+ K))-(1/(mp + K))))))
) /((t - lag(t)) + K)), data = df1, start = gstart, trace = T)
# saving nlsLM outputs
nls_1 <- summary(nlsLM(formula= C~ h * (
((1/(1 + exp((h/ R_)*((1/ (t + K))-(1/ (mp + K))))))
-(1/ (1 + exp((h/ R_) * ((1/ (lag(t) + K))-(1/ (mp + K))))))
/((t - lag(t)) + K))),
data = df1,
start = list(h = 50), #,mp=77
trace = F))
You will get an error:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
This is the model outcome that I found.
# Formula: C ~ h * (((1/(1 + exp((h/R_) * ((1/(t + K)) - (1/(mp + K)))))) -
# (1/(1 + exp((h/R_) * ((1/(lag(t) + K)) - (1/(mp + K))))))/((t -
# lag(t)) + K)))
#
# Parameters:
# Estimate Std. Error t value Pr(>|t|)
# h 333.59 45.07 7.401 1.97e-11 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.2153 on 121 degrees of freedom
#
# Number of iterations to convergence: 10
# Achieved convergence tolerance: 1.49e-08
#
Upvotes: 1