在格子中正确绘制指数、双曲和反双曲模型曲线

问题描述 投票:0回答:1

我只是想在格子图上绘制许多模型的系列(您可以将其名称可视化为注释线)。不过,我不确定是否

  1. 指数
  2. 倒双曲
  3. 双曲线

模型表现良好:

  xyplot(
  Petal.Width  ~ Petal.Length | Species,
  data = iris,
  panel = function(x, y, groups, ...) {
    panel.xyplot(x, y, ...)
    mod1 <- lm(y~x)
    mod2 <- lm(y~poly(x, 2))
    mod3 <- lm(y~poly(x, 3))
    mod4 <- nls(y ~ a * exp(-b * x), start = list(a = 1, b = 0.1), data = data.frame(x = x, y = y))  #exponential 
    mod5 <- nls(y ~ a / x, start = list(a = 1), data = data.frame(x = x, y = y)) #inverted hyperbolic  
    mod6 <- nls(y ~ a * x, start = list(a = 1), data = data.frame(x = x, y = y)) 
    #hyperbolic
    
    panel.abline(mod1, col='#0080ff')
    panel.curve(predict(mod2, newdata=data.frame(x=x)), col='purple', lwd=2)  
    panel.curve(predict(mod3, newdata=data.frame(x=x)), col='#ff00ff', lwd=2)
    panel.curve(predict(mod4, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "red",lwd = 2)  
    panel.curve(predict(mod5, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "green",lwd = 2)
    panel.curve(predict(mod6, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "orange",lwd = 2)
    })

如果我没有绘制正确的内容,你能纠正吗?

谢谢

r model curve lattice
1个回答
1
投票

看起来应该是正确的。我唯一建议的是,您可以通过使用

nls()
try()
模型失败得更优雅一些,然后只绘制
nls()
不会失败的曲线:

library(lattice)
xyplot(
  Petal.Width  ~ Petal.Length | Species,
  data = iris,
  panel = function(x, y, groups, ...) {
    panel.xyplot(x, y, ...)
    mod1 <- lm(y~x)
    mod2 <- lm(y~poly(x, 2))
    mod3 <- lm(y~poly(x, 3))
    mod4 <- try(nls(y ~ a * exp(-b * x), start = list(a = 1, b = 0.1), data = data.frame(x = x, y = y)))  #exponential 
    mod5 <- try(nls(y ~ a / x, start = list(a = 1), data = data.frame(x = x, y = y))) #inverted hyperbolic  
    mod6 <- try(nls(y ~ a * x, start = list(a = 1), data = data.frame(x = x, y = y))) 
    #hyperbolic
    
    panel.abline(mod1, col='#0080ff')
    panel.curve(predict(mod2, newdata=data.frame(x=x)), col='purple', lwd=2)  
    panel.curve(predict(mod3, newdata=data.frame(x=x)), col='#ff00ff', lwd=2)
    if(!inherits(mod4, "try-error"))panel.curve(predict(mod4, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "red",lwd = 2)  
    if(!inherits(mod5, "try-error"))panel.curve(predict(mod5, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "green",lwd = 2)
    if(!inherits(mod6, "try-error"))panel.curve(predict(mod6, newdata=data.frame(x=x)), from = min(x), to = max(x), col = "orange",lwd = 2)
    })

#> Error in nls(y ~ a * exp(-b * x), start = list(a = 1, b = 0.1), data = data.frame(x = x,  : 
#>   singular gradient

创建于 2024-04-05,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.