2017-10-16 96 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)。不幸的是,我不能帮助你更不知道你的数据是关于你的数据和你的数据结构/范围是。 –