Próbuję interpolować z funkcją interpolowaną GGLOT2 i pokrywa go na wykresie dotplot pojedynczych wartości.

Uzyskałem błąd, że nie jestem w stanie zrozumieć, jakbym był wiążący dwa różne wektory o różnej długości.

3: Computation failed in `stat_smooth()`:
arguments imply differing number of rows: 80, 6

Pełny kod jest zapisywany poniżej:

library(ggplot2)

tabella <- data.frame("Tempo" = c(0, 15, 30, 60, 90, 120), "Visc" = c(500, 9125, 11250, 10875, 11325, 10375))
attach(tabella)

Visc.mod <- nls((Visc ~ 500 + (k1*Tempo/(k2+Tempo))), start=list(k1=100, k2=100), trace=TRUE)
cor(Visc,predict(Visc.mod))
predict(Visc.mod)
summary(Visc.mod)



ggplot(tabella, aes(x=Tempo, y=Visc)) + 
  geom_point() + 
  stat_smooth(method = "nls", 
              method.args = list(formula = "Visc ~ 500 + (k1*Tempo/(k2+Tempo))",
              start = list(k1=100, k2=100)), data = tabella, se = FALSE)

Naprawdę nie rozumiem, gdzie może być błąd.

Z góry dziękuję za każdą odpowiedź!

0
GiacomoDB 14 kwiecień 2021, 12:31

2 odpowiedzi

Najlepsza odpowiedź

Dostałem go do uruchomienia bez błędów, przesuwając argument formuł. Jednak dopasowanie nie wygląda jednak szczególnie dobrze.

library(ggplot2)

tabella <- data.frame("Tempo" = c(0, 15, 30, 60, 90, 120), "Visc" = c(500, 9125, 11250, 10875, 11325, 10375))

ggplot(tabella, aes(x=Tempo, y=Visc)) + 
  geom_point() + 
  stat_smooth(method = "nls", formula = y ~ 500 + (k1 * x / (k2 + x)),
              method.args = list(start = list(k1=100, k2=100)), data = tabella, se = FALSE)

Utworzono w dniach 2021-04-14 przez Pakiet Reprex (v1.0.0)

2
teunbrand 14 kwiecień 2021, 10:25

Jednym z problemów z kodem jest to, że formuła jest parametrem NLS i trzeba zdać obiekt formuły do niego, a nie znaki. Po drugie, GgplOT2 przechodzi y i x do NLS i nie {x2}} i Tempo

ggplot(tabella, aes(x = Tempo, y = Visc)) +
geom_point()+
geom_smooth(
method = "nls",
formula = y ~ 500 + (k1 * x / (k2 + x)),
method.args = list(start = c(k1 = 100, k2 = 100)),
se=FALSE)
 

Wpisałem moją odpowiedź, gdy @Teunbrand poprzedził mnie. Jednak umieszczam go za pomocą geom_smooth zamiast stat_smooth Ten sam wynik. Nie jest dobrym dopasowaniem Wprowadź opis obrazu tutaj

1
Elia 14 kwiecień 2021, 11:35