У меня есть набор данных, который имеет такую структуру:
.......
'data.frame': 244 obs. of 2 variables:
$ LF_cm : num 12.4 10 10.5 12.9 10.5 10.4 12 13 29.8 30.4....
$ Wg_g : num 19.7 9.8 10.5 22.3 11.5 ...
......
Мое намерение состоит в том, чтобы создать отношение веса к длине на основе формулы y = a * L ^ b Я попытался сделать это линейным, применяя Функция логарифма, но модель нарушила предположение об однородности дисперсии.
Поэтому я решил использовать функцию gnls в пакете nlme, используя другую дисперсию и значение AI C, чтобы выбрать наиболее подходящую модель.
моя окончательная модель выглядит следующим образом:
'fit2 <-gnls (Wg_g ~ I (a * (LF_cm ^ (b))), data1, start = list (a = 0,5, b = 0,1) , weights = varComb (varFixed (~ LF_cm), varPower (form = ~ fit (.)))) '</p>
Я не уверен, если аргумент weights = varComb (varFixed (~ LF_cm), varPower (form = ~ установлено (.))) правильно.
Я проверил установленное значение графика по стандартизированным остаткам и выглядел хорошо для меня (но не эксперта) введите описание изображения здесь
Теперь я смог найти ' Коэффициенты a и b, но я не могу сравнить коэффициент b со значением 3 (изометрия), поскольку функция Hocoef в пакете FSA принимает только линейные модели. Кто-нибудь может помочь в этом?
Также мне интересно построить в ggplot модель, созданную с доверительными интервалами. Пока что я сделал сценарий ниже, но я не уверен, что он правильный. Кто-нибудь может помочь?
'''
data1$predict<-predict(fit2)
theme_set(theme_classic())
Fit2_eq <- function(data1){
eq <- substitute(italic(y) == a * italic(x)^b,
list(a = format(coef(fit2)[1], digits = 2),
b = format(coef(fit2)[2], digits = 2)))
as.character(as.expression(eq));}
ggplot(data1,aes(y=Wg_g,x=LF_cm)) +
geom_point(size=1.5, col="blue") +
theme(axis.title.x = element_text(size = 18, colour="black", face="bold", family = "Times New Roman"),
axis.text.x = element_text(size = 16, colour="black", family = "Times New Roman"),
axis.title.y = element_text(size = 18, colour="black", face="bold", family = "Times New Roman"),
axis.text.y = element_text(size = 16, colour="black", family = "Times New Roman"),
axis.line = element_line(lineend = "square", size = 0.5, colour="black"))+
scale_x_continuous(breaks= seq(0,35, 5), limits= c(0,35))+
scale_y_continuous(breaks = seq(0,550,100),limits = c(0,550))+
labs(x="Fork lenght (cm)", y ="Weigth (g)")+
geom_text(x=0,y=480, label=Fit2_eq(data1),parse=T,hjust = 0,vjust=1,size=6,
check_overlap = TRUE, colour="black", family = "Times New Roman") +
geom_line(aes(y=predict))
'''
наконец, Fit2_eq по какой-то причине дает мне c () вокруг 'b' и 'a', никогда не бывает раньше.
enter описание изображения здесь