Понимание того, как построить модель gnls в ggplot с достоверными интервалами и правильно ли построена модель gnls - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть набор данных, который имеет такую ​​структуру:

.......

'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 описание изображения здесь

...