Comment puis-je calculer R2 entre deux variables (c'est-à-dire des colonnes) dans une fenêtre mobile (par exemple, 10 paires de données à la fois) ?
Sina
Merci @Mark_Bailey et @ron_horne . C'était très utile !!
Je comprends.
Voici un exemple basé sur la table de données Big Class dans le dossier Sample Data. Il correspond à une régression linéaire mobile avec une plage de 5. Il renvoie la valeur R au carré dans chaque ligne. Vous pouvez exécuter ce script pour voir comment cela fonctionne.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// example creates a new column with a moving R square with a span of 5
// for regression of :weight versus :height
dt << New Column( "Moving R Square",
Numeric,
Continuous,
Formula(
If( Row() > 2 & Row() < (N Row()-1),
x = J( 5, 1, 1 ) || :height[Index( Row() - 2, Row() + 2 )]`;
y = :weight[Index( Row() - 2, Row() + 2 )]`;
sst = Sum( (y - Mean( y )) ^ 2 );
b = (Inv( x` * x ) * x` * y);
yhat = x * b;
sse = Sum( (y - yhat) ^ 2 );
(sst-sse) / sst;
,
Empty()
)
)
);
Vous pouvez sélectionner la partie de ce script qui se trouve entre parenthèses après l'argument Formule et coller cette expression dans une nouvelle formule de colonne dans votre table de données, puis modifier les noms de colonne pour qu'ils correspondent à vos colonnes de données X et Y.
Merci @Mark_Bailey .Quelle est la fonction pour calculer R2 en JSL ? (désolé, je suis nouveau dans les scripts JSL et je ne l'ai pas trouvé en ligne).
Voir cette discussion sur effectuer une régression linéaire dans une formule de colonne . Cette approche pourrait être étendue pour obtenir R au carré ou d'autres résultats.