Пользовательская функция с nls с ошибкой «dims [product 3] не соответствуют длине объекта» - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь приспособить функцию роста к набору данных.Данные, которые я использую, представляют собой годовые продажи автомобилей в мире, и я хотел бы установить функцию роста с максимальной численностью населения около 11000 человек. В прошлом году продажи новых автомобилей составили около 96 миллионов.Смотрите ниже для данных.Номера примечаний в наборе данных выражены в тысячах.

Сначала я попробовал SSlogis, но результат не дал логического результата с максимальным значением, намного меньшим 11000. Я использовал следующий код:

EV.ss <- nls(TotalSales ~ SSlogis(Year, phi1, phi2, phi3), data = EV_temp)
summary(EV.ss)

Затем я попробовал свою собственную функцию.Код:

myfunction <- function(GrowthRate, time, Beta){
    AsymptoticLimitOfGrowth =11000
    Value = AsymptoticLimitOfGrowth / (1+exp(-GrowthRate*time-Beta))
    return(Value)
}
nls(TotalSales ~ myfunction(GrowthRate, time, Beta),
   data=EV_temp,
   start=list(GrowthRate=0.5, time=2030, Beta=1))

Но вылилось в ошибку:

Error in qr(.swts * gr) : 
dims [product 3] do not match the length of object [13]
In addition: Warning message:
In .swts * gr :
longer object length is not a multiple of shorter object length

Как мне решить эту проблему?

Примечание: я получил функцию от Применение S-образных кривых Дмитрия Кучаравы и Ролана де Гио см. В уравнении 2 на стр. 2.

Данные :

EV_temp<-structure(list(Country = structure(c(21L, 21L, 21L, 21L, 21L, 
21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L), .Label = c("Australia", 
"Brazil", "Canada", "Chile", "China", "Finland", "France", "Germany", 
"India", "Japan", "Korea", "Mexico", "Netherlands", "New Zealand", 
"Norway", "Others", "Portugal", "South Africa", "Sweden", "Thailand", 
"Total", "United Kingdom", "United States"), class = "factor"), 
Year = c(2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 
2013, 2014, 2015, 2016, 2017), TotalSales = c(1.89, 2.23, 
2.69, 5.15, 7.48, 14.26, 61.33, 179.03, 381.3, 703.65, 1239.45, 
1982.04, 3109.05)), row.names = c(NA, -13L), .Names = c("Country", 
"Year", "TotalSales"), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...