2016-04-28 1 views
1

Alors, voici le plan de match. J'essaie de prendre cet ensemble de données (sera un objet de structure) ci-dessous, exécuter un modèle de régression courbe à travers elle. Ensuite, je voudrais prendre la pente (c'est-à-dire la première valeur dérivée pour chaque x) à chaque point, et sauvegarder la table de données avec cette information de pente dans sa propre colonne.Comment obtenir des pentes sur un modèle de prédiction qui est une courbe? Et les enregistrer comme une table

input.txt:

yval xval 
0.198 0.125 
0.18 0.0625 
0.126 0.03125 
0.078 0.015625 
0.066 0.007813 
0.03 0.0039065 
0.00 0.0 

script.r:

dat <- read.table("input.txt", header=T, sep="\t") 
library(drc) 
library(ggplot2) 

mm <- structure(list(x = dat$xval, y = dat$yval), .Names= c("x","y"), class = "data.frame") 
model.drm <- drm (y ~ x, data = mm, fct = MM.2()) 
mml <- data.frame(x = seq(0, max(mm$x), length.out = 100)) #I actually don't know what length does, and am unsure about this line 
mml$y <- predict(model.drm, newdata = mml) 

ggplot(mm, aes(x = x, y = y)) + 
    theme_bw() + 
    xlab("x lab") + 
    ylab("y lab") + 
    ggtitle("dose response curve") + 
    geom_point(alpha = 0.5) + 
    geom_line(data = mml, aes(x = x, y = y), colour = "blue") 
ggsave("mm.pdf", width = 6, height = 4) 

#Need to pass in vector (list) of x, into the derivative of mml's function. 
#Output will be a list of corresponding slope values for each of those x's. 
#append said slope values to the data frame and save it. 

dev.off() 

Résumé: prendre des données, la régression en cours d'exécution, en prenant la pente à chaque valeur, puis en enregistrant les mêmes données avec des pentes en colonne séparée. La sortie sera la même table, mais avec une nouvelle troisième colonne: la pente associée à chaque valeur x. Sortie doit ressembler à:

sortie.txt:

yval xval slopes 
0.198 0.125 slope1 
0.18 0.0625 slope2 
0.126 0.03125 slope3 
0.078 0.01562 slope4 
0.066 0.00781 slope5 
0.03 0.00396 slope6 
0.00 0.00 slope7 

Le problème est, juste comment « obtenir à » cette information, et comment enregistrer à nouveau des choses que je ne sais pas comment faire correctement. Je ne suis pas familier avec la façon dont R fait le calcul pour l'équation. Je peux obtenir les constantes de l'équation à partir de summary(), mais je n'ai aucun moyen de les traiter.

Je n'arrive pas à trouver la bonne combinaison d'informations (ou peut-être s'agit-il simplement des termes de recherche que j'utilise?). Je m'excuse si certains de ces pseudo-codes semblent incorrects, R a été ... frustrant d'apprendre, c'est le moins qu'on puisse dire. Aidez-moi?

version R 3.2.4 Redhat Linux 4.1.2 Les données sont empruntés à https://plot.ly/~gwaligroski/15/michaelis-menten-equation code adapté de https://rpubs.com/RomanL/6752

Répondre

2

Je vais mettre cette première ligne, vous créez une trame de données qui a une variable une longueur de 100 qui est espacée également entre 0 et max (mm x $)

mml <- data.frame(x = seq(0, max(mm$x), length.out = 100)) #I actually don't know what length does, and am unsure about this line

Predict utilise alors que data.frame pour décider quels points de prévoir pour, si vous utilisez length.out = 5 ça wi ll sera une courbe très grossière et longueur.out = 1000 sera une courbe très lisse.

Ainsi, au lieu de prévoir une séquence entre 1: max (mm $ x) vous voulez prévoir pour votre xval et je voudrais donc utiliser

dat$predicted<-predict(model.drm, newdata=dat["xval"]) 

qui ajoutera une autre colonne à votre dat dataframe avec les valeurs prédites.

ajouter

+geom_point(data = dat, aes(x=xval,y=predicted),colour="red") 

à votre ggplot et vous devriez voir des points rouges sur la courbe aux points x que vous voulez. Note: Je ne suis pas bon en R donc je ne peux pas expliquer pourquoi dat ["xval"] renvoie une trame de données à 1 variable (dont vous avez besoin) et dat $ xval retourne un vecteur qui ne fonctionne pas prédire.

+0

C'est un bon début. Mais qu'en est-il de la première dérivée à ces points?Je ne peux pas accéder à l'équation facilement, et je ne suis pas sûr de savoir comment je serai en mesure d'obtenir une première dérivée en premier lieu basée sur la courbe geom_line. Les constantes du polynôme inverse qui gouverne geom_line sont intégrées dans le résumé – Tom