Ошибка выдачи nlsLM: попытка использовать имя переменной нулевой длины - Black Scholes Model Fit
Я работаю над своими модельными навыками и пробуюсь в Black Scholes. Идея состоит в том, чтобы использовать текущие цены опционов (x), чтобы получить оценку волатильности (b).
Когда я запускаю nlsLM, я получаю эту ошибку:
Error in assign(i, data[[i]], envir = env) :
attempt to use zero-length variable name
Я не вижу, где ошибка, я удалил все переменные из формулы и заменил их их числовыми значениями для этого конкретного случая. х и б остаются переменными. Я запустил это без d1 и d2, другими словами, поместив длинные формулы для каждого внутри соответствующей функции pnorm(), но там тоже не повезло.
x - цена исполнения, y - цена вызова GOOG, срок действия которой истекает 20.12.14 по состоянию на 12.12.14.
Вот код для воспроизведения ошибки.
df <- structure(list(x = c(505, 510, 512.5, 515, 517.5, 520, 522.5,
525, 527.5, 530, 532.5), y = c(17.7, 12.5, 12, 9.2, 7.82, 6.3,
5.1, 4.1, 3.21, 2.45, 1.9)), .Names = c("x", "y"),
row.names = c(NA, -11L), class = "data.frame")
f <- function(x, b){
d1 = (1/(b*sqrt(0.021918)))*(log(518.66/x) + (0.0025+b^2/2) * 0.021918)
d2 = (1/(b*sqrt(0.021918)))*(log(518.66/x) - (0.0025+b^2/2) * 0.021918)
return (pnorm(d1)*518.66 - pnorm(d2)*x*exp(-0.0025*0.021918))
}
library(minpack.lm)
test <- nlsLM(y~f(x, b), data=df, start=list((b=0.50)))
Спасибо.
1 ответ
Нашел ответ... В функции nlsLM есть строка:
for (i in names(start)) assign(i, start[[i]], envir = startEnv)
Проблема заключалась в том, что начало, приведенное в моей формуле, не имело названия, b. Я подумал, используя команду list, которая решит проблему.
Я исправил это следующим образом:
test <- nlsLM(y~f(x, b), data=df, start=c(b=0.50))