如何为nlsLM的单个参数设置约束?及约束后拟合变化疑问
nlsLM单参数约束语法及拟合结果变化疑问
初始问题
我使用以下代码为数据拟合S型函数:
nlsLM(mepAMP ~ plateau / (1 + exp(slope*(S50 - pMSO))), data = df, start = list(plateau = 7, S50 = 100, slope = 0.15) )
我了解nlsLM(与R基础包中的nls类似)支持为参数设置上下限,希望将plateau参数约束为≤8 mV,以得到符合生理合理性的近似值。请问能否仅约束单个参数?我见过类似upper = c(1000, 1)的写法,但不确定是否会约束所有参数,也不清楚如何指定仅约束plateau。
尝试使用upper = c(8)时,出现如下错误:
Error in nls.lm(par = start, fn = FCT, jac = jac, control = control, lower = lower, : length(upper) must be equal to length(par)
找不到正确语法,恳请指导。
补充疑问
感谢Allan的帮助,我使用upper = c(plateau = 8, S50 = Inf, slope = Inf)处理多受试者数据时,发现不仅原本plateau超过8的拟合结果发生了变化,就连plateau远低于8的拟合结果也变了。这是正常现象吗?我原本以为约束不会影响符合条件的拟合。
拟合前:
拟合后:
内容的提问来源于stack exchange,提问作者A.R.
相关产品推荐
相关产品推荐

