J'essaie d'ajuster une régression non linéaire à un ensemble de données. Cependant, lorsqu'il est tracé, R renvoie de nombreuses lignes différentes là où il ne devrait y en avoir qu'une.
Ce problème n'est reproductible que dans un seul ensemble de données et je ne vois aucune différence évidente entre ces données et d'autres.
Voici le code de mon tracé:
logFC log_pval 4.315 2.788 6.724 9.836 2.925 4.136 5.451 10.836 2.345 1.486 4.219 7.618
Et voici un échantillon de mes données (df):
plot(df$logFC, df$log_pval, xlim=c(0,11.1), ylim=c(0,11), xlab = "logFC", ylab = "p_val") c <- df$logFC d <- df$log_pval model = nls(d ~ a*exp(b*c), start = list(a = 2,b = 0.1)) lines(c, predict(model), col = "dodgerblue", lty = 2, lwd = 2)
J'ai réduit le problème au modèle, mais je ne le suis pas sûr où aller à partir de là. Toute aide est grandement appréciée!
3 Réponses :
Cela peut être réalisé avec ggplot
. Plus de personnalisation peut être ajoutée au tracé si nécessaire.
df <- structure(list(logFC = c(4.315, 6.724, 2.925, 5.451, 2.345, 4.219 ), log_pval = c(2.788, 9.836, 4.136, 10.836, 1.486, 7.618)), class = "data.frame", row.names = c(NA, -6L)) c <- df$logFC d <- df$log_pval model = nls(d ~ a*exp(b*c), start = list(a = 2,b = 0.1))
données
library(ggplot2) ggplot(df) + aes(x = logFC, y = log_pval) + geom_point() + geom_line(aes(x = c, y = predict(model)))
ggplot
J'ai essayé de représenter graphiquement les données en utilisant ggplot2
et je pense que le résultat est plus ce que vous attendiez ...
XXX
base
Si vous voulez vous en tenir à la base
essayez de classer les variables x
dans le bloc de données avant de tracer les lignes:
plot(df$logFC, df$log_pval, xlab = "logFC", ylab = "p_val") df3 <- tibble(x = df$logFC, y = predict(model)) %>% dplyr::arrange(x) lines(df3$x, df3$y, col = "dodgerblue", lty = 1, lwd = 1)
Merci pour votre aide Klink et Ronak,
Il s'avère que le problème était que les données n'étaient pas classées par taille, et donc, les "points" ont tracé l'axe des x non ordonné par l'axe des y prédit, entraînant un zigzag entre les données prévues.
Étant donné que ggplot réorganise vraisemblablement les données avant le traçage, ce problème a été résolu.