Я пытаюсь получить оптимизированные параметры модели Нельсона-Зигеля. Ниже приведен простой пример, но я знаю, что оптимизированные параметры не полностью оптимизированы и содержат некоторые ошибки/предупреждения.
Я считаю, что предупреждающее сообщение связано с оптимизированными параметрами. Подскажите пожалуйста, как это исправить.
import numpy as np
from scipy.optimize import curve_fit
# Define the Nelson-Siegel model function
def nelson_siegel(tau, beta1, beta2, beta3, lambd):
term1 = beta1
term2 = beta2 * ((1 - np.exp(-lambd * tau)) / (lambd * tau))
term3 = beta3 * (((1 - np.exp(-lambd * tau)) / (lambd * tau)) - np.exp(-lambd * tau))
return term1 + term2 + term3
# Given example data (maturity and yields)
tau = np.array([0.25, 2, 5, 10])
yields = np.array([2.54, 2.36, 2.49, 2.96])
# Calculate dynamic initial estimates
beta1_initial = yields[-1] # Yield for the longest maturity
beta2_initial = yields[0] - yields[-1] # Difference between short-term and long-term yields
beta3_initial = (np.max(yields) - np.min(yields)) / 2 # Curvature is about half of the yield range
lambd_initial = 0.2 # Default value
initial_guess = [beta1_initial, beta2_initial, beta3_initial, lambd_initial]
# Set parameter bounds
param_bounds = ([0, -10, -10, 0.01], # Lower bounds (beta1, beta2, beta3, lambda)
[10, 10, 10, 10]) # Upper bounds (beta1, beta2, beta3, lambda)
# Optimization (using curve_fit)
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
# Print optimized parameters
beta1, beta2, beta3, lambd = popt
print(f"Optimized Parameters: beta1 = {beta1:.4f}, beta2 = {beta2:.4f}, beta3 = {beta3:.4f}, lambda = {lambd:.4f}")
# Calculate fitted yields using the model
fitted_yields = nelson_siegel(tau, beta1, beta2, beta3, lambd)
# Print fitted values
print(f"Fitted Yields: {fitted_yields}")
# Print the covariance matrix of the optimized parameters
print(f"Parameter Covariance Matrix: {pcov}")
Результаты
Optimized Parameters: beta1 = 10.0000, beta2 = -7.6314, beta3 = 2.8412, lambda = 0.0100
Fitted Yields: [2.38171526 2.47248209 2.62498897 2.87073598]
Parameter Covariance Matrix: [[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]]
C:\Users\CHOI\AppData\Local\Temp\ipykernel_32884\269502971.py:29: OptimizeWarning: Covariance of the parameters could not be estimated
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
ОптимизируйтеПредупреждение: ковариацию параметров невозможно оценить в Python ⇐ Python
Программы на Python
1732772996
Anonymous
Я пытаюсь получить оптимизированные параметры модели Нельсона-Зигеля. Ниже приведен простой пример, но я знаю, что оптимизированные параметры не полностью оптимизированы и содержат некоторые ошибки/предупреждения.
Я считаю, что предупреждающее сообщение связано с оптимизированными параметрами. Подскажите пожалуйста, как это исправить.
import numpy as np
from scipy.optimize import curve_fit
# Define the Nelson-Siegel model function
def nelson_siegel(tau, beta1, beta2, beta3, lambd):
term1 = beta1
term2 = beta2 * ((1 - np.exp(-lambd * tau)) / (lambd * tau))
term3 = beta3 * (((1 - np.exp(-lambd * tau)) / (lambd * tau)) - np.exp(-lambd * tau))
return term1 + term2 + term3
# Given example data (maturity and yields)
tau = np.array([0.25, 2, 5, 10])
yields = np.array([2.54, 2.36, 2.49, 2.96])
# Calculate dynamic initial estimates
beta1_initial = yields[-1] # Yield for the longest maturity
beta2_initial = yields[0] - yields[-1] # Difference between short-term and long-term yields
beta3_initial = (np.max(yields) - np.min(yields)) / 2 # Curvature is about half of the yield range
lambd_initial = 0.2 # Default value
initial_guess = [beta1_initial, beta2_initial, beta3_initial, lambd_initial]
# Set parameter bounds
param_bounds = ([0, -10, -10, 0.01], # Lower bounds (beta1, beta2, beta3, lambda)
[10, 10, 10, 10]) # Upper bounds (beta1, beta2, beta3, lambda)
# Optimization (using curve_fit)
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
# Print optimized parameters
beta1, beta2, beta3, lambd = popt
print(f"Optimized Parameters: beta1 = {beta1:.4f}, beta2 = {beta2:.4f}, beta3 = {beta3:.4f}, lambda = {lambd:.4f}")
# Calculate fitted yields using the model
fitted_yields = nelson_siegel(tau, beta1, beta2, beta3, lambd)
# Print fitted values
print(f"Fitted Yields: {fitted_yields}")
# Print the covariance matrix of the optimized parameters
print(f"Parameter Covariance Matrix: {pcov}")
Результаты
Optimized Parameters: beta1 = 10.0000, beta2 = -7.6314, beta3 = 2.8412, lambda = 0.0100
Fitted Yields: [2.38171526 2.47248209 2.62498897 2.87073598]
Parameter Covariance Matrix: [[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]]
C:\Users\CHOI\AppData\Local\Temp\ipykernel_32884\269502971.py:29: OptimizeWarning: Covariance of the parameters could not be estimated
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
Подробнее здесь: [url]https://stackoverflow.com/questions/79232728/optimizewarning-covariance-of-the-parameters-could-not-be-estimated-in-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия