Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grande<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'étudie la croissance d'une bactérie en milieu de croissance liquide dans les puits d'une plaque 96 puits. Je veux obtenir le taux de croissance maximum, qui est la pente d'une ligne droite dans la phase de croissance exponentielle, comme ci-dessous :

Ce que je dois faire, c'est couper les données dans les deux sens afin que la ligne s'adapte aux 10 points de données qui ont la plus grande pente.

Chacun de mes tableaux de données comporte 96 de ces courbes indiquées par une désignation lettre-chiffre (« bien »).

Les données de l'axe des ordonnées sont transformées en logarithme naturel "(Ln OD 600") et les données de l'axe des abscisses sont exprimées en heures ("Time [hrs]"). Actuellement, j'ai écrit un script qui utilise la plate-forme Fit Y by X, met "Ln OD 600" dans la réponse Y, "Time [hrs]" dans le facteur X et "Well" dans la By-box. Je reçois donc un rapport avec 96 graphiques différents, à chaque graphique correspond une ligne et ouvre un filtre de données local en utilisant "Time [hrs]" et le coupe à 10 points de données/lignes correspondantes.

Ensuite, je dois faire glisser manuellement ce filtre/curseur dans le temps pour trouver la plus grande pente de la ligne. J'ai quelques centaines de fichiers de données, donc cela prend beaucoup de temps à faire !

Ce que j'essaie de faire, c'est d'écrire un script qui déplacerait automatiquement le curseur dans le temps et trouverait la plus grande pente de la ligne. Malheureusement, les scripts et le codage ne font pas partie de mes compétences, je suis donc perplexe. J'ai joint mon script JSL dès maintenant. Merci pour toute aide ou réflexion !
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grande
Salut Jim -
Comment modifieriez-vous le script pour trouver la plus grande pente des données illustrées dans le graphique ci-dessus au cours de la plage ?J'ai essayé de modifier votre script mais il n'a correctement exclu aucune ligne. Il est dans le même format que l'OP.Chaque "puits" a une forme d'onde similaire.
Merci,
A dessiné
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeJim,
C'est merveilleux ! Je l'ai exécuté sur 1 ensemble complet de données et les pentes de ligne calculées par le script sont corrélées aux pentes calculées à la main avec un R au carré de 0,98. Je soupçonne que la petite variation est due à l'erreur impliquée dans leur calcul à la main. Je vais en faire d'autres, mais cela ressemble exactement à ce dont j'avais besoin!Je posterai à nouveau une fois que je l'aurai exécuté sur certains de mes fichiers de données déjà analysés sur ses performances.
Merci beaucoup pour l'aide,
Nath
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeEssayez ce script sur vos données et voyez s'il est plus proche de ce que vous voulez :
Noms par défaut ici ( 1 ) ;
// ouvre la table de données
dt = Tableau de données actuel () ;
Résumer ( dt , Liste de puits = par ( : Bien ) ) ;
dt << couleur par colonne ( : Bien ) ;
// Parcourez les données de chaque puits et trouvez les 10 meilleurs points contigus
// avec la meilleure pente
Pour ( je = 1 , je <= N articles ( Liste de puits ) , je ++,
// Configurez les listes pour qu'elles contiennent les 10 points de données déterminés avec la pente la plus élevée
dt << sélectionner où ( : Bien == Liste de puits [ je ] ) ;
meilleur bêta = 0 ;
démarrer = 0 ;
vous tous = : Ln DE 600 [ dt << obtenir les lignes sélectionnées ] ;
xall = : Temps [ dt << obtenir les lignes sélectionnées ] ;
Pour ( k = 1 , k <= N lignes ( xall ) - dix , k ++,
X = xall [ k :: k + 9 ] ;
X = J ( N rangée ( X ) , 1 , 1 ) || X ;
y = vous tous [ k :: k + 9 ] ;
// calculs de régression
xpxi = Inverse ( X ` * X ) ;
bêta = xpxi * X ` * y ;
Si ( Abdos ( bêta [ 2 ] ) > meilleur bêta ,
meilleur bêta = Abdos ( bêta [ 2 ] ) ;
démarrer = ( dt << obtenir les lignes sélectionnées )[ k ] ;
) ;
) ;
Pour ( k = Min ( dt << obtenir les lignes sélectionnées ) , k <= Max ( dt << obtenir les lignes sélectionnées ) , k ++,
Si ( démarrer <= k <= démarrer + 9 ,
État de la ligne ( k ) = État exclu ( 0 ) , État de la ligne ( k ) = État exclu ( 1 )
) ;
) ;
) ;
// Création de la sortie graphique
Bivarié ( Oui ( : Ln DE 600 ) , X ( : Temps ) , Par groupe ( : Bien ) , Ligne d'ajustement ( 1 ) ) ;
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeJim,
Merveilleux, merci! Je n'ai probablement pas précisé cela. C'est ma première incursion dans le scripting. J'apprécie l'aide,
Nath
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeMon erreur en pensant que chacune des différentes valeurs de puits se trouvaient dans des colonnes différentes.Ce ne sera pas un projet majeur de modifier le script pour répondre à vos besoins.Je ne pourrai pas y arriver avant demain après-midi, mais je vous le ferai parvenir à ce moment-là.
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeJim,
Merci pour la réponse et les réflexions ! J'ai pu modifier le script pour l'appliquer à ma table et l'exécuter. Cependant, j'ai en fait besoin que la ligne soit adaptée à chaque courbe, lorsque chaque courbe est tracée avec le temps comme axe des abscisses. Ensuite, je dois sélectionner 10 points contigus (contigus selon le temps) qui produisent la plus grande pente. Mes excuses si je n'ai pas été clair à ce sujet. En gros s'il y a 10 minutes entre chaque point, je recherche la période de 100 minutes qui a la plus grande pente de la droite.
Voici un aperçu de mes fiches techniques. Fondamentalement, dans la colonne "Well", il y a 96 identifiants de combinaison de lettres et de chiffres. Chaque identifiant comporte environ 140 lignes. Ensuite, je trace le "Time [hrs]" sur le x et le "OD 600" sur le y, "Well" dans la case By. Est ce que ça aide?

Voici la boîte de dialogue :

Merci beaucoup pour l'aide!
~ Nathan
Re : Besoin d'aide pour les scripts - Ajustement linéaire où la pente est la plus grandeVoici un script qui, je pense, fera ce que vous voulez.Il est configuré à titre d'exemple à l'aide de la table de données JMP Sample appelée Big Class.Cependant, si vous pointez simplement le script vers la table de données que vous souhaitez exécuter, et modifiez le Y Var = "age"; à la colonne Y contre laquelle vous voulez courir, vous devriez obtenir ce que vous voulez.Il y a 2 hypothèses avec le script ..... la première est que toutes les colonnes numériques et continues de la table de données doivent être analysées, et la deuxième hypothèse est que les données dans les colonnes sont triées par la variable X.Si ce n'est pas le cas, le script peut être modifié pour gérer cette situation.Cela ajoutera simplement plus de temps de traitement J'ai changé le script pour faire le tri.
Noms par défaut ici ( 1 ) ;
// ouvre la table de données
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
Y Var = "âge" ;
// récupère les données dans des matrices
ListeCol = dt << obtenir les noms de colonnes ( continu , chaîne ) ;
// Supprime la variable Y de la liste
ListeCol = Retirer ( ListeCol , Contient ( ListeCol , Y Var ) , 1 ) ;
// Configurez les listes pour qu'elles contiennent les 10 points de données déterminés avec la pente la plus élevée
Meilleures données = {} ;
Meilleur Y = {} ;
Noms de colonne = {} ;
meilleur bêta = 0 ;
démarrer = 0 ;
// Boucle sur les colonnes
Pour ( je = 1 , je <= N articles ( ListeCol ) , je ++,
// Trier les données pour s'assurer que les données sont en X croissant
dt << trier ( par ( Collision [ je ] ) , commande ( Ascendant ) , remplacer le tableau ( 1 ) ) ;
vous tous = Colonne ( Y Var ) << getValues ;
xall = ( Colonne ( dt , colliste [ je ] ) << getValues ) ;
Pour ( k = 1 , k <= N lignes ( xall ) - dix , k ++,
X = xall [ k :: k + 9 ] ;
X = J ( N rangée ( X ) , 1 , 1 ) || X ;
y = vous tous [ k :: k + 9 ] ;
// calculs de régression
xpxi = Inverse ( X ` * X ) ;
bêta = xpxi * X ` * y ;
Si ( Abdos ( bêta [ 2 ] ) > meilleur bêta ,
meilleur bêta = Abdos ( bêta [ 2 ] ) ;
démarrer = k ;
) ;
) ;
Meilleures données = Meilleures données || Comme liste ( xall [ démarrer :: démarrer + 9 ] ) ;
Meilleur Y = Meilleur Y || Comme liste ( vous tous [ démarrer :: démarrer + 9 ] ) ;
Pour ( k = 1 , k <= dix , k ++,
Insérer dans ( Noms de colonne , ListeCol [ je ] )
) ;
) ;
// Crée la nouvelle table de données avec les 10 meilleurs points pour toutes les colonnes
ensemble = Nouveau tableau ( "Les résultats" ,
Nouvelle colonne ( "Nom de colonne" , personnage , valeurs ( Noms de colonne ) ) ,
Nouvelle colonne ( "O" , valeurs ( Meilleur Y ) ) ,
Nouvelle colonne ( "Données" , valeurs ( Meilleures données ) )
) ;
// Création de la sortie graphique
ensemble << couleur par colonne ( : nom de colonne ) ;
Bivarié ( Oui ( : Oui ) , X ( : Données ) , Par groupe ( : Nom de colonne ) , Ligne d'ajustement ( 1 ) ) ;