Я пытаюсь приспособить функцию роста к набору данных.Данные, которые я использую, представляют собой годовые продажи автомобилей в мире, и я хотел бы установить функцию роста с максимальной численностью населения около 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")