【发布时间】:2021-12-23 19:16:33
【问题描述】:
我正在尝试将 r 中的 von Bertalanffy 增长函数 (VGBF) 拟合到按序列号分组的数据中。 这是我的数据的 sn-p:
Serial_No<- c(315,315,315,315,315,315,315,316,316,316,316,317,317,317,317,317,317,317,317,317,318,318,318,318,319,319,319,319)
Year<-c(1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945,1945)
tl<-c(19,33,46,55,63,66,70,22,39,55,65,20,40,51,56,60,62,63,64,65,26,43,54,60,28,43,53,61)
age<-c(1,2,3,4,5,6,7,1,2,3,4,1,2,3,4,5,6,7,8,9,1,2,3,4,1,2,3,4))
df<-data.frame(Serial_No, Year, tl, age)
我一直在关注这个例子:https://www.r-bloggers.com/2020/01/von-bertalanffy-growth-plots-ii/ 并将我的代码更改为如下:
vb <- vbFuns()
predict2 <- function(x) predict(x,data.frame(age=ages))
agesum <- group_by(df,Serial_No) %>%
summarize(minage=min(age),maxage=max(age))
Serial_Nos <- unique(df$Serial_No)
nSerial_Nos <- length(Serial_Nos)
cfs <- cis <- preds1 <- preds2 <- NULL
for (i in 1:nSerial_Nos) {
cat(Serial_Nos[i],"Loop\n")
tmp1 <- filter(df,Serial_No==Serial_Nos[i])
sv1 <- vbStarts(tl~age,data=tmp1)
fit1 <- nls(tl~vb(age,Linf,K,t0),data=tmp1,start=sv1)
cfs <- rbind(cfs,coef(fit1))
boot1 <- Boot(fit1)
tmp2 <- confint(boot1)
cis <- rbind(cis,c(tmp2["Linf",],tmp2["K",],tmp2["t0",]))
ages <- seq(-1,16,0.2)
boot2 <- Boot(fit1,f=predict2)
tmp2 <- data.frame(Serial_No=Serial_Nos[i],age=ages,
predict(fit1,data.frame(age=ages)),
confint(boot2))
preds1 <- rbind(preds1,tmp2)
tmp2 <- filter(tmp2,age>=agesum$minage[i],age<=agesum$maxage[i])
preds2 <- rbind(preds2,tmp2)
}
代码运行,但从 VBGF 返回的结果对于每个序列号都是相同的,这是不可能的。我认为是过滤器功能在上面的代码中不起作用。
我已经搜索了解决方案,但无法让它发挥作用。
如果有人可以帮忙,或者知道解决方案,我将不胜感激。
提前谢谢你
【问题讨论】:
-
哪个包?好像有一个不是
base R -
应该是
cat(Year[i],"Loop\n")而不是cat(years[i],"Loop\n"),对吧?丢失的包,好像是FSA和car吧? -
对不起,包是:库(FSAdata)库(FSA)库(汽车)库(dplyr)库(ggplot2)
-
谢谢,我会试试(刚刚编辑了上面的代码,因为年份应该已经更改为我的数据 Serial_Nos)
-
对不起,代码(加载所有必需的包后)产生错误:
Error in out[[j]][[typelab]] : subscript out of bounds和许多警告