1
我试图使用minpack.lm中的nls.lm函数来适应非线性模型对心理物理实验的某些数据。R中的nls.lm模型拟合“错误:未使用的参数”
我已经搜索过了,找不到很多关于软件包的信息,所以基本上已经复制了nls.lm帮助页面上给出的示例格式。不幸的是我的脚本仍然失败运行和R抛出了这个错误:
Error in fn(par, ...) :
unused argument (observed = c(0.1429, 0.2857, 0.375, 0.3846, 0.4667, 0.6154))
看来,脚本认为我要拟合模型的数据是无关紧要的,这肯定是不对的。
我期待它适合模型,并为备用参数(w)产生0.5403的值。
任何帮助,非常感谢。 我正在从Matlab转移到R,所以如果我的代码看起来sl ap的道歉。
这是脚本。
install.packages("pracma")
require(pracma)
install.packages("minpack.lm")
require(minpack.lm)
# Residual function, uses parameter w (e.g. .23) to predict accuracy error at a given ratio [e.g. 2:1]
residFun=function(w,n) .5 * erfc(abs(n[,1]-n[,2])/ ((sqrt(2)*w) * sqrt((n[,1]^2) + (n[,2]^2))))
# example for residFun
# calculates an error rate of 2.59%
a=matrix(c(2,1),1,byrow=TRUE)
residFun(.23,a)
# Initial guess for parameter to be fitted (w)
parStart=list(w=0.2)
# Recorded accuracies in matrix, 1- gives errors to input into residFun
# i.e. the y-values I want to fit the model
Acc=1-(matrix(c(0.8571,0.7143,0.6250,0.6154,0.5333,0.3846),ncol=6))
# Ratios (converted to proportions) used in testing
# i.e. the points along the x-axis to fit the above data to
Ratios=matrix(c(0.3,0.7,0.4,0.6,0.42,0.58,0.45,0.55,0.47,0.53,0.49,0.51),nrow=6,byrow=TRUE)
# non-linear model fitting, attempting to calculate the value of w using the Levenberg-Marquardt nonlinear least-squares algorithm
output=nls.lm(par=parStart,fn=residFun,observed=Acc,n=Ratios)
# Error message shown after running
# Error in fn(par, ...) :
# unused argument (observed = c(0.1429, 0.2857, 0.375, 0.3846, 0.4667, 0.6154))
啊!谢谢!我知道这将是明显的事情。 所以这应该工作(至少直到下一个错误)? ((n [,1] -n [,2])/((sqrt(2)* w)* sqrt((n [ ,1]^2)+(n [,2]^2))))' –
不,它不起作用,因为'observed'不是你的函数的参数,而是它的输出。我更新了一个函数 – scoa
我的答案谢谢,非常感谢。 –