nonlinear

nlmod

##set_nonlinear

Description

L'action nlmod (Nonlinear Models) est l'outil ultime pour les statisticiens qui refusent la linéarité de la vie ! Elle permet d'ajuster des modèles de régression non linéaire en utilisant soit les moindres carrés , soit le maximum de vraisemblance. Contrairement aux modèles linéaires classiques, vous pouvez ici définir vos propres équations complexes. C'est un peu comme si vous passiez de la peinture au numéro à la sculpture sur mesure : c'est plus complexe, mais le résultat est bien plus fidèle à la réalité de vos données.

Syntaxe Officielle
nonlinear.nlmod /
table={caslib="nom_caslib", name="nom_table"}
model={depvar="variable_cible", distribution="type_dist", distparms={"parms"}}
nlmodCode="expression_du_modele"
parameters={{name="p1", vals=val_initiale}, ...}
bounds={{name="p1", leb=0}, ...}
predict={{expression="expr", label="mon_label"}}

Paramètres Clés

Nom du paramètre Description
table Indique la table de données d'entrée chargée en mémoire CAS .
model Définit la variable dépendante, sa distribution (GAUSSIAN, POISSON, BINOMIAL, etc.) et les paramètres de cette distribution .
nlmodCode Le cœur du réacteur : une chaîne de caractères contenant les instructions de programmation SAS pour définir la fonction non linéaire .
parameters Liste des paramètres à estimer et leurs valeurs de départ. Choisissez-les bien, sinon l'algorithme pourrait tourner en rond comme un chat après sa queue .
bounds Ajoute des contraintes (bornes inférieures 'lb/leb' ou supérieures 'ub/ueb') sur vos paramètres pour éviter des résultats physiquement impossibles .
estimate Permet de calculer des fonctions supplémentaires des paramètres après la convergence du modèle .
predict Spécifie les expressions à prédire pour chaque observation de la table d'entrée .
optimizeOpts Options pour contrôler l'algorithme d'optimisation (méthode, nombre d'itérations, critères de convergence) .

Préparation des données

Création de données de croissance exponentielle

Génération d'un jeu de données simulant une croissance bactérienne avec un peu de bruit aléatoire.

1DATA casuser.growth; call streaminit(123); DO time = 1 to 20; biomass = 10 * exp(0.15 * time) + rand('Normal', 0, 2); OUTPUT; END; RUN;

Exemples d'utilisation

Régression exponentielle basique

Ajustement d'un modèle de type y = a * exp(b * x) sur les données de croissance.

1PROC CAS; nonlinear.nlmod / TABLE={name="growth", caslib="casuser"}, model={depvar="biomass", distribution="GAUSSIAN", distparms={"pred"}}, nlmodCode="pred = a * exp(b * time);", parameters={{name="a", vals=5}, {name="b", vals=0.1}}; RUN;
Résultat Attendu :
Un tableau des estimations de paramètres affichant les valeurs de 'a' et 'b' proches de 10 et 0.15.
Modèle avec contraintes, prédictions et statistiques

Ajustement complet avec bornes de paramètres, calcul d'une estimation dérivée et génération d'une table de résultats.

1PROC CAS; nonlinear.nlmod / TABLE={name="growth", caslib="casuser"}, model={depvar="biomass", distribution="GAUSSIAN", distparms={"mu"}}, nlmodCode="mu = alpha * exp(beta * time);", parameters={{name="alpha", vals=1}, {name="beta", vals=0.1}}, bounds={{name="alpha", leb=0.001}, {name="beta", leb=0}}, estimate={{expression="alpha * beta", label="Vitesse_Initiale"}}, predict={{expression="mu", label="Biomasse_Predite", pred="P_biomass"}}, predOut={name="growth_scored", replace=True}, outputTables={names={ParameterEstimates="params_final"}}; RUN;
Résultat Attendu :
Estimation des paramètres alpha et beta, calcul de la vitesse initiale, et création d'une table 'growth_scored' contenant les valeurs prédites.