Я начинающий R и пытаюсь подогнать мои данные к нелинейной регрессии. В частности, я хочу, чтобы скорость развития насекомых при разных температурах соответствовала степенной функции. Ниже приведен мой код, модифицированный из примеров внизу этой страницы:
https://docs.tibco.com/pub/enterprise-runtime-for-R/3.1.0/doc/html/Language_Reference/stats/selfStart.html
Вы должны быть в состоянии вставить код ниже прямо в R, чтобы получить то, что я получаю.
LarvaeDevelopment <- structure(list(Larvae_temp = c(10L, 10L, 10L, 10L, 10L, 10L),
Larvae_rate = c(0.047757234, 0.04174518, 0.04174518, 0.04174518, 0.04174518, 0.04174518)), .Names = c("Larvae_temp", "Larvae_rate"), row.names = c(NA, 6L), class = "data.frame")
SSpower<-(selfStart(~A*(Larvae_temp^B),
initial=function(mCall,data,LHS)
{xy<-sortedXyData(mCall[["Larvae_temp"]],mCall[["Larvae_rate"]],LarvaeDevelopment) ##I think the error appears in this line of code, or the one below
z<-xy[["Larvae_rate"]]
aux<-coef(lm(Larvae_temp~z,LarvaeDevelopment))
pars<-as.vector(coef(nls(Larvae_rate~A*(Larvae_temp^B))),start=list(A=aux[1],B=aux[2]),data=LarvaeDevelopment,algorithm="power")
value<-list(pars[1],pars[2])
names(value)<-mCall[c("A","B")]
value},
parameters=c("A","B")))
getInitial(Larvae_rate ~ SSpower(Larvae_temp, A, B), data=LarvaeDevelopment)
Когда я показываю traceback, появляются следующие шаги:
Error in tapply(y, x, mean, na.rm = TRUE) : arguments must have same length
9. stop("arguments must have same length")
8. tapply(y, x, mean, na.rm = TRUE)
7. sortedXyData.default(mCall[["Larvae_temp"]], mCall[["Larvae_rate"]],
LarvaeDevelopment)
6. sortedXyData(mCall[["Larvae_temp"]], mCall[["Larvae_rate"]],
LarvaeDevelopment)
5. (attr(object, "initial"))(mCall = mCall, data = data, LHS = LHS)
4. getInitial.selfStart(func, data, mCall = as.list(match.call(func,
call = object[[3L]])), LHS = object[[2L]], ...)
3. getInitial(func, data, mCall = as.list(match.call(func, call = object[[3L]])),
LHS = object[[2L]], ...)
2. getInitial.formula(Larvae_rate ~ SSpower(Larvae_temp, A, B),
data = LarvaeDevelopment)
1. getInitial(Larvae_rate ~ SSpower(Larvae_temp, A, B), data = LarvaeDevelopment)
Я думаю, что проблема может быть связана с тем фактом, что n каждой процедуры неравны. Например, n = 58,165,113,26 для температур 10, 15, 20, 30. Соответствующие значения y (Larvae_rate) соответствуют каждому значению x (Larvae_temp). Кто-нибудь знает, как это исправить?
Я также был бы очень признателен, если бы кто-то мог просмотреть мой код и посмотреть, имеет ли он смысл! Я все еще новичок в R, и отладка этого кода заняла всю мою жизнь.
Пожалуйста, дайте мне знать, если я могу предоставить больше информации. Спасибо !!