2017-10-16 99 views
2

我是新與R和I具有適合3個模型我的數據如下:如何繪製R中的一個圖中的3個模型?

模型1:Y = A(X)+ B

lm1 = lm(data$CBI ~ data$dNDVI) 

模型2:Y = A(X )2 + b(X)+ C

lm2 <- lm(CBI ~ dNDVI + I(dNDVI^2), data=data) 

模型3:Y = X(A | X | + b)-1

lm3 = nls(CBI ~ dNDVI*(a*abs(dNDVI) + b) - 1, start = c(a = 1.5, b = 2.7), data = data) 

現在我想繪製所有這三個在R模型,但我找不到辦法,你能幫我嗎?我曾與前兩種模式嘗試作爲遵循和它的工作,但我不知道如何添加模型3就可以了:

ggplot(data = data, aes(x = dNDVI, y = CBI)) + 
    geom_point() + 
    geom_smooth(method = lm, formula = y ~ x, size = 1, se = FALSE) + 
    geom_smooth(method = lm, formula = y ~ x + I(x^2), size = 1, se = FALSE) + 
    theme_bw() 

我也想補充一個傳奇,其表現出3種不同顏色或類型3個模型的線條/曲線也是如此。你能指導我如何使它在圖中?

+0

GGPLOT2沒有方法直接從'geom_smooth'繪製'nls'模型(向下滾動到「方法」 HTTP ://ggplot2.tidyverse.org/reference/geom_smooth.html)。分別擬合模型,使用預測函數創建代表擬合線的虛擬數據集,然後繪製這些數據。 –

+1

非常感謝你,所以我需要先分別擬合模型,然後使用帶有預測值的geom_lines吧?乾杯 – tnbang

+0

至少'lm3',只需添加該行到你的'ggplot'電話,其他的應該適合你所繪製的他們 - 這是工作的罰款現在好嗎? –

回答

1

使用虹膜作爲虛設組來表示三種型號:

new.dat <- data.frame(Sepal.Length=seq(min(iris$Sepal.Length), 
         max(iris$Sepal.Length), length.out=50)) #new data.frame to predict the fitted values for each model 

m1 <- lm(Petal.Length ~ Sepal.Length, iris) 
m2 <- lm(Petal.Length ~ Sepal.Length + I(Sepal.Length^2), data=iris) 
m3 <- nls(Petal.Length ~ Sepal.Length*(a*abs(Sepal.Length) + b) - 1, 
     start = c(a = 1.5, b = 2.7), data = iris) 

new.dat$m1.fitted <- predict(m1, new.dat) 
new.dat$m2.fitted <- predict(m2, new.dat) 
new.dat$m3.fitted <- predict(m3, new.dat) 

new.dat <- new.dat %>% gather(var, val, m1.fitted:m3.fitted) #stacked format of fitted data of three models (to automatically generate the legend in ggplot) 


ggplot(new.dat, aes(Sepal.Length, val, colour=var)) + 
     geom_line() 

enter image description here

+1

嗨,Adam Quek。非常感謝您爲代碼提供的幫助。我現在嘗試它。乾杯 – tnbang

+1

我運行最後一個模型,發現誤差如下: > LM3 < - NLS(CBI〜dBAI *(A * ABS(dBAI)+ B)^ - 1, +開始= C(A = 1.5,B (a * abs(dBAI)+ b)^ - 1,start = c(a = 1.5,b = 2.7),: 奇異梯度 我已閱讀所有今天下午如何定義初始值,並嘗試bundred次,但我沒有得到運氣對於 你覺得有沒有無論如何要解決這個問題請感謝 – tnbang

+1

這是一個相當[豐富的職位(HTTPS:/? /stats.stackexchange.com/questions/160552/why-is-nls-giving-me-singular-gradient-matrix-at-initial-parameter-estimates)。不幸的是,我不能幫助你更不知道你的數據是關於你的數據和你的數據結構/範圍是。 –