10
votes

Comment mettre une équation compliquée dans une formule R?

Nous avons le diamètre des arbres comme prédicteur et hauteur d'arbre que la variable dépendante. Un certain nombre d'équations différentes existent pour ce type de données et nous essayons de modéliser certains d'entre eux et de comparer les résultats.

Cependant, nous ne pouvons pas comprendre comment faire correctement une équation dans la formule R

Le Les arbres définis dans r peuvent être utilisés comme exemple. xxx

premier, l'exemple d'une équation qui semble fonctionner bien :

Entrez la description de l'image ici xxx

coefficients A , b et c sont estimés, ce qui nous intéresse.

maintenant le équation problématique:

Entrez la description de l'image ici

Essayer C'est comme ceci: xxx

donne une erreur: xxx

je suppose que c'est parce que / est interprété comme un modèle imbriqué et non un opérateur arithmétique?

Cela ne donne pas une erreur: xxx

mais le résultat n'est pas celui Nous voulons: xxx

Un seul coefficient est donné pour l'ensemble de la TE RM dans l'extérieur i () , qui semble être logique.

Comment pouvons-nous correspondre à la deuxième équation à nos données?


0 commentaires

3 Réponses :


12
votes

Vous avez des problèmes de couple. (1) Vous manquez des parenthèses pour le dénominateur de form2 (et r n'a aucun moyen de savoir que vous souhaitez ajouter une constante A dans le dénominateur, ou où Mettez l'un des paramètres, vraiment) et beaucoup plus problématique: (2) votre 2e modèle n'est pas linéaire , donc lm ne fonctionnera pas.

Fixation (1) est facile: xxx

fixation (2), bien qu'il existe de nombreuses façons d'estimer les paramètres d'un modèle non linéaire, le nls (non linéaire Les moindres carrés) est un bon endroit pour commencer: xxx

Vous devez fournir des suppositions de départ pour les paramètres dans NLS . Je viens de choisir 1, mais vous devriez utiliser de meilleures suppositions que les paramètres peuvent être.


1 commentaires

Merci pour votre réponse! Cela nous aurait pris des âges pour découvrir ces problèmes et même plus longtemps pour trouver une solution.



10
votes

edit : fixe, n'utilise plus mal à l'aide de la ...

une réponse qui complète @ shujaa's:

Vous pouvez transformer votre Problème de xxx

à xxx

Cela gâcherait normalement les hypothèses du modèle (c'est-à-dire si H a été normalement distribué avec une variance constante, puis 1 / (h-1.3) ne serait pas. Toutefois, essayons quand même: xxx

Ces résultats seraient normalement suffisamment bons pour obtenir de bonnes valeurs de démarrage pour le fichier NLS . Toutefois, vous pouvez faire mieux que celui via GLM , qui utilise un lien fonction pour permettre certaines formes de non-linéarité. Spécifiquement, xxx

Vous pouvez voir que les résultats sont environ identiques à ceux linéaires, Mais pas tout à fait. xxx

Nous utilisons prédit , mais il faut corriger la prédiction pour tenir compte du fait que nous soustrayons une constante de la LHS: xxx

 Entrez la description de l'image ici

Parce que nous avons utilisé la constante sur le LHS (ce presque, mais pas tout à fait, je ne sais pas tout à fait dans le cadre de l'utilisation de un décalse - nous ne pouvions utiliser un décalage que si notre formule était 1 / h - 1.3 = A / D ^ 2 + ... , c'est-à-dire si le réglage constant était Sur la balance de lien (inverse) plutôt que la balance d'origine), cela ne correspond pas parfaitement à ggplot 'S geom_smooth framework xxx

Entrez la description de l'image ici


0 commentaires

12
votes

en supposant que vous utilisez nls code> la formule R peut utiliser une fonction r ordinaire, H (A, B, C, D) code>, de sorte que la formule peut être juste H ~ H (A, B, C, DBH) Code> Et cela fonctionne:

plot(h ~ dbh, df)
lines(fitted(nls1) ~ dbh, df)


1 commentaires

Je vais marquer cette réponse comme la correcte parce que a) il inclut comment estimer les valeurs de démarrage, b) L'utilisation d'une fonction R normale nous permet d'adapter une autre fonction non linéaire très facilement et c) elle parcourt les résultats. Merci!