使用fitModel拟合曲线求解参数值时遇维度不匹配报错求助
问题分析与解决建议
报错核心原因
你遇到的qr(.swts * gr)维度不匹配错误,本质是参数名与数据列名冲突,加上错误地将自变量当作待拟合参数传入:
- 数据框
d里的自变量列名为t,但你在start列表里把待拟合参数也命名为t,导致fitModel无法区分两者,梯度计算时维度混乱; - 你的模型公式中所有
t都是观测数据,并非需要拟合的参数,start里添加t=47属于多余操作,进一步加剧了维度不匹配问题。
具体修正步骤
- 清理
start列表:移除和数据列名冲突的t参数,只保留真正需要拟合的I; - (可选)若需新增参数:如果你的模型实际需要拟合另一个参数(比如特征温度),给它起一个和
t不重复的名字(比如t0),并同步修改模型公式中的对应引用。
修正后的代码示例
情况1:仅拟合参数I
require(mosaic) d <- data.frame(t = c(41.5, 44, 42.77, 47), y = c(230, 76.4/60, 3.4, 1)) fitModel(y ~ (-(47 - t)*I/(35 - t)*(1 + exp((42.77 - t)*I))), data = d, start = list(I = 3.1))
情况2:需要额外拟合一个参数(比如t0)
require(mosaic) d <- data.frame(t = c(41.5, 44, 42.77, 47), y = c(230, 76.4/60, 3.4, 1)) # 把公式中固定的42.77替换为待拟合参数t0 fitModel(y ~ (-(47 - t)*I/(35 - t)*(1 + exp((t0 - t)*I))), data = d, start = list(I = 3.1, t0 = 42.77))
额外提示
- 拟合非线性模型时,一定要确保待拟合参数名和数据列名完全不重复;
- 检查模型公式中每一项的含义,避免把自变量误当作待拟合参数传入
start。
内容的提问来源于stack exchange,提问作者Agus camacho
相关产品推荐
相关产品推荐

