R степенной закон соответствия данных
У меня возникли проблемы при расчете коэффициентов подгонки степенного закона набора данных
Степенной закон функции у ~ а * х ^ б (с б, безусловно, отрицательно!) У меня есть следующие значения х
х = с (370,470,520,590,660,880,950)
значения y - это строки значений (более 21000!) кадра данных
мне нужно найти коэффициенты ( a и b) для каждой строки y, поэтому более 21000 коэффициентов
мой оригинальный набор данных у
abs2017.y <- (cbind(dati.etal.2017$babs370_c ,dati.etal.2017$babs470_c ,dati.etal.2017$babs520_c, dati.etal.2017$babs590_c ,dati.etal.2017$babs660_c ,dati.etal.2017$babs880_c ,dati.etal.2017$babs950_c))
x и набор данных abs2017.y "double"
Я прочитал, что NLS не нуждается в значениях NULL в наборе данных, поэтому я попробовал это
abs2017.y2<-abs2017.y[complete.cases(abs2017.y),]
я пробовал этот сценарий для цикла, используя функцию NLS
for (k in seq_len(nrow(abs2017.y2))) {
y_k <-abs2017.y2[k,]
nlc<-nls.control(maxiter = 100000,minFactor = 1/1024)
fit_k<-nls(y_k ~ a*x^b, control=nlc,start = c(a=0.1,b=0.1))
b<-coefficients(fit_k)[["b"]]
}
я поставил maxiter = 100000, потому что у меня были проблемы с ошибкой превышения максимального числа итераций
теперь у меня есть эта ошибка
Error in nls(y_k ~ a * x^b, control = nlc, start = c(a = 0.1, b = 0.1)) :
singular gradient
я не уверен, что функция nls является более подходящей, чтобы я мог достичь своей цели;
Не могли бы вы мне помочь, пожалуйста?