Régression non linéaire avec paramètres étendus par catégories<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut
J'ai un ensemble de données que je dois ajuster à l'aide d'un modèle non linéaire, avec quatre paramètres d'ajustement, A, B, C et D. L'ensemble de données (Y, colonne) doit être séparé à l'aide de « Catégories » qui est une colonne. Ainsi, Y pour chaque « catégorie » unique est un ensemble unique de données.
Je dois ajuster toutes les données et trouver les paramètres A, B, C, D, à condition que j'ai besoin d'un C et D uniques pour tous les ensembles de données dans toutes les « catégories », tandis que A, B peuvent varier selon les « catégories ».
Pour cela, je crée une colonne pour le modèle et crée les paramètres C, D et pour A et BI, je crée des paramètres avec 'Développer en catégories, sélection de colonne' coché et je sélectionne 'Catégories' pour la colonne et je fais un ajustement de régression non linéaire. . J'obtiens les C et D optimaux dans toutes les catégories et différents A et B dans toutes les catégories.
Ma question est la suivante : comment trouve-t-il un C et un D UNIQUES dans toutes les catégories ? Est-ce qu'il s'adapte à l'ensemble de données correspondant à chaque ensemble de données et trouve C1, D1, C2, D2, etc. pour chaque ensemble et prend plus tard la médiane/moyenne ou autre chose ?
Ou trouve-t-il la plage des valeurs C et D et crée-t-il des points fins dans C et D et ajuste-t-il à nouveau tous les ensembles de données et va-t-il de plus en plus fin jusqu'à ce que l'erreur soit dans les limites ?
J'ai besoin de connaître la méthode, car je veux être sûr de faire ce que je dois faire.
Merci
Binoy
Re : Régression non linéaire avec paramètres étendus par catégoriesDésolé pour le retard. Je pensais que nous avions fini !
Mon post précédent montre la formule avec un commun B et bêta et paramètres conditionnels sur Catégorie les niveaux. De quoi d'autres avez-vous besoin? Le script de ma première réponse automatise la création d'une telle formule. Je ne comprends pas de quoi d'autre vous pourriez avoir besoin du point de vue du modèle.
Demandez-vous comment le Non linéaire la plateforme résout un tel problème (estimer les paramètres) ? Il utilise un procédure d'optimisation numérique et un fonction de perte surveiller. Il utilise le donné valeurs de départ puis les fait varier pour améliorer le résultat de la fonction de perte (minimisation). La fonction de perte par défaut est somme des carrés des erreurs , ou moindres carrés .Il surveille plusieurs mesures de changement pour déterminer quand convergence est atteint et il s'arrête.
Re : Régression non linéaire avec paramètres étendus par catégoriesSalut,
Y a-t-il une mise à jour sur cette question que j'ai posée ?
Merci
Binoy
Re : Régression non linéaire avec paramètres étendus par catégoriesSalut,
Je connais cette méthode pour le faire manuellement. Je comprends que c'est assez facile de le faire manuellement. Cependant, je dois automatiser mon script car il fait partie d'un système plus vaste et est donc nécessaire.
Merci pour votre temps et effort.
Binoy
Re : Régression non linéaire avec paramètres étendus par catégoriesExcellent!!! A fonctionné à merveille. C'est à peu près la réponse à mon message précédent (légèrement différent du message original.)
Merci pour votre temps et votre scénario.
Passons maintenant à la question bonus (en fait, ma question initiale 
Dans cet ajustement de régression non linéaire, nous avons 2 paramètres B et bêta qui restent les mêmes pour toutes les catégories, tandis que P et R0 varient entre elles. Désormais, nous ne précisons par aucune équation comment les valeurs B et bêta varient selon les catégories. Alors, comment JMP trouve-t-il les meilleurs B et bêta qui fonctionnent pour toutes les catégories ? Quel est l'algorithme utilisé ?
Merci
Binoy
Re : Régression non linéaire avec paramètres étendus par catégoriesJe souhaite ajouter à ma réponse précédente après que Jeff Perkinson ait souligné un exemple similaire à ce que vous voulez faire. Nous ne savons pas si vous avez vraiment besoin d'un script pour créer la formule modèle dont vous avez besoin. Sélectionner Aide > Exemple de bibliothèque de données , ouvrez le Exemples non linéaires dossier, et enfin ouvrez le Algues Mitscherlich tableau de données. Ouvrez le Éditeur de formule avec le Mitscherlich colonne. Ça devrait ressembler à ça:

dans ce cas, comme votre cas, les 2 paramètres alpha et bêta sont conditionnés à la Traitement .
J'ouvre la maquette de vos données que j'ai créée et sélectionne Cols > Nouvelle rubrique... je l'appellerai Modèle et ajoutez un Formule propriété de colonne. Je vais créer les paramètres avant de les utiliser pour créer la formule du modèle. je clique Colonnes du tableau en haut à gauche et sélectionnez Paramètres . je clique Nouveau paramètre. .. et entrez B pour le nom et donnez-lui une valeur de départ de 2 , puis clique D'ACCORD . je crée bêta = 0 de la même manière. Le B et bêta les paramètres sont inconditionnels et leur valeur est commune à toutes les catégories.
Les deux autres paramètres sont différents. je clique Nouveau paramètre , entrer R0 pour le nom, 2 pour la valeur de départ et sélectionnez Développez en catégories, en sélectionnant la colonne . je clique D'ACCORD puis sélectionnez le Catégorie colonne. Maintenant, j'ai un paramètre unique pour R0 pour chaque catégorie. Je fais la même chose pour le P. paramètre.
Je construis maintenant la formule en basculant entre la liste des paramètres et la liste des colonnes du tableau pour créer cette formule :

L'éditeur insère automatiquement l'expression Match(...) lorsque je clique sur le paramètre groupé dans la liste des paramètres. Il y a donc maintenant un B, un bêta et un R0 et un P pour chaque catégorie.
Utiliser cette approche avec le premier exemple Algues conduit à cette formule :

Ce modèle produit exactement les mêmes estimations avec non linéaire que le paramétrage d'origine.
Veuillez comprendre que nous avons peut-être mal interprété votre question. Les scripts sont puissants mais pas toujours nécessaires.
Re : Régression non linéaire avec paramètres étendus par catégoriesJ'ai utilisé trois principes pour résoudre ce problème. Cela semble facile maintenant, mais il y a eu quelques faux départs désordonnés avant que je ne réussisse. J'ai procédé à une ingénierie inverse de la formule du modèle, j'ai divisé le problème en problèmes plus petits et j'ai construit la solution de l'intérieur vers l'extérieur. Cela suppose que trois colonnes de données sont présentes avec des prénoms. Vous devrez ajouter une boîte de dialogue personnalisée si les noms de colonnes changent entre les exécutions. Mais elle s'adapte à n'importe quel nombre de catégories. Je ne sais pas si Nonlinear sera capable de résoudre le modèle lorsque vous avez un grand nombre de catégories. Vous souhaiterez peut-être également préparer une liste de valeurs de départ et utiliser mon exemple pour en utiliser des uniques.
Je n'ai pas votre tableau de données mais ma maquette de ce que je pense que vous avez (colonnes Catégorie, rRelax, tStress) a fonctionné.
/* suppose que ces colonnes existent ou crée une boîte de dialogue personnalisée pour les affecter aux variables de script :
Catégorie
Détendez-vous
tStress
*/
// trouver toutes les catégories
catégorie# = : Catégorie << Obtenir des valeurs ;
// construit une formule de l'intérieur vers l'extérieur avec des expressions
correspond à l'expression p# = correspondance expr r0# = Expr ( Correspondre ( : Catégorie ) ) ;
liste de paramètres# = Liste ( B = 2 , bêta = 0 ) ;
// parcourir toutes les catégories
Pour ( c = 1 , c <= N articles ( catégorie# ) , c ++,
// crée un paramètre R0 spécifique à la catégorie
Évaluer (
Analyser (
Remplaçant (
"Insérer dans (liste de paramètres#, Expr( Nom( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
catégorie# [ c ]
)
)
) ;
Insérer dans ( correspondance expr r0# , catégorie# [ c ] ) ;
Évaluer (
Analyser (
Remplaçant (
"Insérer dans (match expr r0#, Expr( Nom( \!"R0_ccc\!" ) ) )" ,
"ccc" ,
catégorie# [ c ]
)
)
) ;
// crée un paramètre P spécifique à la catégorie
Évaluer (
Analyser (
Remplaçant (
"Insérer dans (liste de paramètres#, Expr( Nom( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
catégorie# [ c ]
)
)
) ;
Insérer dans ( correspond à l'expression p# , catégorie# [ c ] ) ;
Évaluer (
Analyser (
Remplaçant (
"Insérer dans (match expr p#, Expr( Nom( \!"P_ccc\!" ) ) )" ,
"ccc" ,
catégorie# [ c ]
)
)
) ;
) ;
// remplacement dans la formule générale du modèle
formule expr# = Remplaçant (
Expr ( Paramètre ( je vais , rrr / ( 1 + B * ( : Détendez-vous / : tStress ) ^ bêta + ppp ) ) ) ,
Expr ( je vais ) ,
liste de paramètres# ,
Expr ( rrr ) ,
Nom Expr ( correspondance expr r0# ) ,
Expr ( ppp ) ,
Nom Expr ( correspond à l'expression p# )
) ;
// définit la formule de la colonne Modèle
Évaluer (
Remplaçant (
Expr ( Tableau de données actuel () << Nouvelle colonne ( "Modèle" , Formule ( fff ) ) ) ,
Expr ( fff ) ,
Nom Expr ( formule expr# )
)
) ;
Re : Régression non linéaire avec paramètres étendus par catégoriesSalut,
Merci pour la réponse. J'ai parcouru le manuel. Je n'ai toujours pas pu obtenir ce que je cherchais.
J'essaie maintenant de rédiger un script pour cet ajustement non linéaire et je suis confronté à quelques problèmes. Besoin d'aide. Je vais réitérer le problème ici :
J'ai des données qui doivent être ajustées par un modèle comportant 4 paramètres d'ajustement. Les ajustements pour chaque catégorie ne sont PAS INDÉPENDANTS les uns des autres. 2 des paramètres d'ajustement, B et bêta, comme indiqué dans l'article ci-dessus, doivent être uniques, c'est-à-dire que l'ajustement de régression extrait un B et une bêta uniques pour toutes les catégories. Alors que les deux autres paramètres P et R0 peuvent varier selon les catégories.
L'interface JMP ressemble à celle ci-dessous :

Maintenant, je dois coder cela en JSL.
Je sais que nous pouvons procéder comme suit pour obtenir les quatre paramètres uniques :
dt << Nouvelle colonne("Modèle", Numérique, Continu, Formule( Paramètre( {B = 5, bêta = 0,25, P = 10, R0 = 10}, R0 / (1 + B * (:Name( "tRelax( s)" ) / :Name( "tStress(s)" )) ^ beta) + P )));
Cependant, ce n'est pas ce que je veux. Et je ne veux pas utiliser la fonctionnalité "regroupement" car cela n'aiderait que si les extractions étaient indépendantes.
Le code généré lors de la copie de la formule est présenté ci-dessous :
Paramètre(
{B = 2, bêta = 0,
Nom( "R0_Category_D03_01_-1.8_100" ) = 2,
Nom( "R0_Category_D03_01_-1.8_1000" ) = 3,
Nom( "R0_Category_D03_01_-1.8_10000" ) = 3,
Nom( "R0_Category_D03_01_-1.8_158" ) = 3,
Nom( "R0_Category_D03_01_-1.8_1580" ) = 3,
Nom( "P_Category_D03_01_-1.8_100" ) = 0,
Nom( "P_Category_D03_01_-1.8_1000" ) = 1,
Nom( "P_Category_D03_01_-1.8_10000" ) = 1,
Nom( "P_Category_D03_01_-1.8_158" ) = 0,
Nom( "P_Category_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Name( "tR" ) / :Name( "tS" )) ^ bêta ) *
Correspondance( :Catégorie,
"D03_01_-1.8_100", Nom( "R0_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", Nom( "R0_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nom( "R0_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nom( "R0_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nom( "R0_Category_D10_05_-2.6_6310" )
) + Correspondance( :Catégorie,
"D03_01_-1.8_100", Nom( "P_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", Nom( "P_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nom( "P_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nom( "P_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nom( "P_Category_D10_05_-2.6_6310" )
)
)
J'ai besoin d'automatiser cela et je ne peux donc pas l'utiliser tel quel.
Je peux créer des tableaux pour P_XXX et R0_XXX à partir de la colonne « Catégorie ».
Je réfléchissais à la création de tableaux associés pour chacun de ces P et R0 et à leur utilisation dans une formule, mais je n'ai pas fonctionné.
Bien sûr, après avoir créé cette formule, je dois exécuter l'ajustement de régression non linéaire sur la colonne et les données.
Quelqu'un peut-il m'aider à coder ceci ?
Merci
Binoy
Re : Régression non linéaire avec paramètres étendus par catégoriesBinoy,
Un bon endroit pour avoir une idée de l'ajustement de votre modèle et des statistiques derrière cet(s) ajustement(s) se trouve dans la section Aide sous Livres > Modèles spécialisés.Les ajustements non linéaires commencent à la page 105. La suggestion de Michael Anderson pour regrouper vos ajustements montrera également comment les catégories individuelles sont ajustées et vous verrez également un graphique des ajustements combinés.Un exemple tiré de l'aide est présenté ci-dessous.Vous pouvez également utiliser votre propre jeu de paramètres, comme indiqué au chapitre 7.La section statistiques commence à la page 152 du chapitre 7.

Re : Régression non linéaire avec paramètres étendus par catégoriesSalut,
Merci pour la réponse.
Pour être plus clair. Je connais une méthode pour faire ce que je veux. Je veux savoir comment cela se fait.
Dans l'exemple ci-dessous, B et bêta correspondent à C et D demandés dans la question, tandis que P est un paramètre comme A ou B qui peut varier selon les catégories.
Vous trouverez ci-dessous une capture d'écran de l'ajustement en cours, avec B et bêta comme paramètres qui restent CONSTANTS pour toutes les catégories tandis que P est un paramètre qui peut varier selon les catégories.
La question est de savoir comment obtenir le meilleur B et bêta dans toutes les catégories ? Trouve-t-il initialement différents B et bêta pour chaque catégorie et effectue-t-il des statistiques pour obtenir le meilleur B et la meilleure bêta qui soient suffisants pour toutes les catégories ? Si oui, quelle est la statistique utilisée.
Merci
Binoy

Re : Régression non linéaire avec paramètres étendus par catégoriesIl semble que vous souhaitiez utiliser une variable de regroupement dans la plate-forme non linéaire.Mettez vos variables X et Y dans les champs appropriés de la plateforme puis placez la colonne "catégories" dans le champ "groupe".Lorsque vous ajusterez ensuite les modèles, il calculera le résultat pour chaque groupe.Ainsi, si vous aviez 4 catégories, vous obtiendriez 4 modèles avec 4 ensembles de coefficients.
[Image manquante]