Я пытаюсь использовать функцию nls.lm в файле minpack.lm, чтобы подогнать нелинейную модель к некоторым данным психофизического эксперимента.
Я провел поиск и не смог найти много информации о пакете, поэтому по существу скопировал формат примера, приведенного на странице справки nls.lm. К сожалению, мой скрипт все еще не запускается, и R выдает эту ошибку:
Error in fn(par, ...) :
unused argument (observed = c(0.1429, 0.2857, 0.375, 0.3846, 0.4667, 0.6154))
Похоже, скрипт считает, что данные, которые я хочу подогнать под модель, не имеют значения, что определенно неверно.
Я ожидаю, что он будет соответствовать модели и даст значение 0,5403 для запасного параметра (w).
Любая помощь приветствуется. Я делаю перенос с Matlab на R, поэтому прошу прощения, если мой код выглядит неаккуратно.
Вот сценарий.
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))