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.
J'ai besoin d'adapter toutes les données et de trouver les paramètres A, B, C, D, à condition que j'aie besoin d'un C et D unique 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, créez des paramètres avec 'Développer dans les catégories, sélection de la 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 UNIQUE dans toutes les catégories ? Est-ce qu'il correspond à l'ensemble de données correspondant à chaque ensemble de données et trouve C1, D1, C2, D2, etc. pour chaque ensemble et prend ensuite la médiane/moyenne ou autre chose ?
Ou trouve-t-il la plage de 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 devient-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 que je fais ce que je dois faire.
Merci
Binoy
Re : Régression non linéaire avec des paramètres étendus par catégoriesDésolé pour le retard. Je pensais qu'on avait fini !
Mon post précédent montre la formule avec un point commun B et bêta et paramètres conditionnels sur Catégorie niveaux. De quoi d'autres avez-vous besoin? Le script de ma première réponse automatise la construction d'une telle formule. Je ne comprends pas ce que vous pourriez exiger d'autre du point de vue du modèle.
Demandez-vous comment le Non linéaire plate-forme 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 des 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 des paramètres étendus par catégoriesSalut,
Je connais cette méthode de le faire manuellement. Je comprends que c'est assez facile de le faire manuellement. Cependant, j'ai besoin d'automatiser mon script dans le cadre d'un système plus vaste et donc nécessaire.
Merci pour votre temps et effort.
Binoy
Re : Régression non linéaire avec des paramètres étendus par catégoriesExcellent!!! A fonctionné comme un charme. C'est à peu près la réponse à mon message précédent (légèrement différent du message d'origine.)
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 d'une catégorie à l'autre. Maintenant, nous ne spécifions pas par une équation comment B et bêta varient d'une catégorie à l'autre, alors comment JMP trouve-t-il le meilleur B et bêta qui fonctionne pour toutes les catégories ? Quel est l'algorithme utilisé ?
Merci
Binoy
Re : Régression non linéaire avec des paramètres étendus par catégoriesJe souhaite ajouter à ma réponse précédente après que Jeff Perkinson a 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 Aider > 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 colonne... je vais l'appeler Modèle et ajouter un Formule propriété de la colonne. Je vais créer les paramètres avant de les utiliser pour créer la formule 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. La 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évelopper dans les 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. Alors maintenant, il y a un B, un bêta et un R0 et P pour chaque catégorie.
L'utilisation de cette approche avec le premier exemple Algae conduit à cette formule :

Ce modèle produit exactement les mêmes estimations avec non linéaire que la paramétrisation 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 des 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 inversé 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. Il suppose que trois colonnes de données sont présentes avec des noms donnés. Vous auriez à ajouter une boîte de dialogue personnalisée si les noms de colonne changeaient entre les exécutions. Mais il 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. De plus, vous voudrez peut-être 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 (Catégorie, rRelax, colonnes tStress) a fonctionné.
/* supposons que ces colonnes existent ou créez une boîte de dialogue personnalisée pour les affecter aux variables de script :
Catégorie
tRelax
tStress
*/
// trouver toutes les catégories
Catégorie# = : Catégorie << Obtenir des valeurs ;
// construit la formule de l'intérieur vers l'extérieur avec des expressions
correspondre à expr p# = correspondre à expr r0# = Expr ( Match ( : Catégorie ) ) ;
liste de paramètres# = Liste ( B = 2 , bêta = 0 ) ;
// itération sur toutes les catégories
Pour ( c = 1 , c <= N articles ( Catégorie# ) , c ++,
// rendre le paramètre R0 spécifique à la catégorie
Éval (
Analyser (
Remplaçant (
"Insérer dans( liste de paramètres#, Expr( Nom( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
Catégorie# [ c ]
)
)
) ;
Insérer dans ( correspondre à expr r0# , Catégorie# [ c ] ) ;
Éval (
Analyser (
Remplaçant (
"Insert Into( match expr r0#, Expr( Name( \!"R0_ccc\!" ) ) )" ,
"ccc" ,
Catégorie# [ c ]
)
)
) ;
// crée un paramètre P spécifique à la catégorie
Éval (
Analyser (
Remplaçant (
"Insérer dans( liste de paramètres#, Expr( Nom( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
Catégorie# [ c ]
)
)
) ;
Insérer dans ( correspondre à expr p# , Catégorie# [ c ] ) ;
Éval (
Analyser (
Remplaçant (
"Insert Into( match expr p#, Expr( Name( \!"P_ccc\!" ) ) )" ,
"ccc" ,
Catégorie# [ c ]
)
)
) ;
) ;
// substituer dans la formule générale du modèle
expression de formule # = Remplaçant (
Expr ( Paramètre ( je vais , rrr / ( 1 + B * ( : tRelax / : tStress ) ^ bêta + PPP ) ) ) ,
Expr ( je vais ) ,
liste de paramètres# ,
Expr ( rrr ) ,
Nom Expr ( correspondre à expr r0# ) ,
Expr ( PPP ) ,
Nom Expr ( correspondre à expr p# )
) ;
// définit la formule de la colonne de modèle
Éval (
Remplaçant (
Expr ( Tableau de données actuel () << Nouvelle colonne ( "Modèle" , Formule ( fff ) ) ) ,
Expr ( fff ) ,
Nom Expr ( expression de formule # )
)
) ;
Re : Régression non linéaire avec des 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 créer un script pour cet ajustement non linéaire et je suis confronté à certains problèmes. Besoin d'aide. Je réitère le problème ici :
J'ai des données qui doivent être ajustées par un modèle qui a 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 le post ci-dessus, doivent être uniques, c'est-à-dire que l'ajustement de régression extrait un B et un bêta uniques pour toutes les catégories. Alors que les deux autres paramètres P et R0 peuvent varier d'une catégorie à l'autre.
L'interface JMP ressemble à celle illustrée ci-dessous :

Maintenant, je dois coder cela en JSL.
Je sais que nous pouvons faire ce qui suit pour obtenir les quatre paramètres uniques :
dt << New Column("Modèle", Numérique, Continu, Formule( Parameter( {B = 5, beta = 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 fonction "regroupement" car cela n'aiderait que si les extractions étaient indépendantes.
Le code généré pendant que je copie la formule est illustré 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_Catégorie_D03_01_-1.8_100" ) = 0,
Nom( "P_Catégorie_D03_01_-1.8_1000" ) = 1,
Nom( "P_Catégorie_D03_01_-1.8_10000" ) = 1,
Nom( "P_Catégorie_D03_01_-1.8_158" ) = 0,
Nom( "P_Catégorie_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Nom( "tR" ) / :Nom( "tS" )) ^ bêta ) *
Correspondance( :Catégorie,
"D03_01_-1.8_100", Nom( "R0_Catégorie_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", Nom( "R0_Catégorie_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nom( "R0_Catégorie_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nom( "R0_Catégorie_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nom( "R0_Catégorie_D10_05_-2.6_6310" )
) + Correspondance( :Catégorie,
"D03_01_-1.8_100", Nom( "P_Catégorie_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Nom( "P_Catégorie_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nom( "P_Catégorie_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nom( "P_Catégorie_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nom( "P_Catégorie_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 pensais créer des tableaux associés pour chacun de ces P et R0 et les utiliser dans la formule, mais cela n'a 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 s'il vous plaît à coder cela?
Merci
Binoy
Re : Régression non linéaire avec des 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 l'ajustement est 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 de l'aide est illustré ci-dessous.Vous pouvez également utiliser votre propre jeu de paramètres, comme indiqué au chapitre 7.La section des statistiques commence à la page 152 du chapitre 7.

Re : Régression non linéaire avec des 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 ça 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 d'une catégorie à l'autre.
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 d'une catégorie à l'autre.
La question est de savoir comment obtient-il le meilleur B et bêta sur toutes les catégories ? Trouve-t-il initialement différents B et bêta pour chaque catégorie et fait-il des statistiques pour obtenir le meilleur B et bêta qui est assez bon pour toutes les catégories ? Si oui, quelle est la statistique utilisée.
Merci
Binoy

Re : Régression non linéaire avec des 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 mettez la colonne "catégories" dans le champ "groupe".Lorsque vous ajustez des modèles après cela, il calculera le résultat pour chaque groupe.Donc, si vous aviez 4 catégories, vous obtiendriez 4 modèles avec 4 ensembles de coefficients.
[Image manquante]