Trouver la pente d'une ligne de données, pas d'une colonne<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Les données sont classées par sujet dans le temps, sur une ligne. Voir l'exemple suivant:
<SPAN class="number token" style="color: #008080; font-weight: bold;">subject(001) data -0.069965723</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.492749371</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.955245597</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.346963522</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.701118239</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">2.523141195</SPAN> columns _1 _2 _3 _4 _5 _8
J'ai des milliers de ces lignes où la pente est nécessaire.
Tout ce dont j'ai besoin, c’est la pente pour chaque série de nombres de la rangée.
Une nouvelle colonne supplémentaire après chaque série doit contenir la valeur de pente pour cette série particulière.
J'ai demandé sur un forum SAS si SAS peut gérer cela. Vous vous demandez si JMP peut ?? Toute aide serait grandement appréciée.
Nicolas
Re: Trouver la pente pour une ligne de données, pas une colonneVoici une autre méthode. Cela présente un seul avantage: le script ne fait que dupliquer ce que vous pourriez faire en exécutant JMP de manière interactive. J'ai joint un exemple de table de données sur lequel j'ai développé le script.
// Définir un pointeur sur les exemples de données
les noms par défaut ici ( 1 ) ;
dt = tableau de données actuel () ;
// Empile les 6 colonnes de données de chaque ligne
empilés = dt << Empiler (
colonnes ( : _3 , : _4 , : _5 , : _6 , : _7 , : _8) ,
Colonne d'étiquette source ( "Étiquette" ) ,
Colonne de données empilées ( "Les données" )
) ;
// Créer une nouvelle colonne qui représente le facteur temps
empilés << nouvelle colonne ( "temps" , formule( Num ( Substr ( : Étiquette , 2 , 1 )) - 2 )) ;
// Exécuter l'analyse sur les données, par chaque ligne (étudiant)
biv = empilés << Bivarié (invisible ,
Y ( : Les données ) ,
X( : temps ) ,
Ajuster la ligne ({Ligne Couleur ({ 213 , 72 , 87 })}) ,
par (_1)
) ;
// Créer une table de données à partir de la sortie d'estimations
dtslope = rapport (biv [ 1 ]) [ "Estimations de paramètres" ] [ 1 ] << faire table de données combinée;
// se débarrasser des données d'interception
dtslope << sélectionner où ( : terme == "Intercepter" ) ;
dtslope << supprimer des lignes;
// Sélectionnez les colonnes non souhaitées et supprimez-les.
dtslope : X << set selected ( 1 ) ;
dtslope : y << set selected ( 1 ) ;
dtslope : terme << set selected ( 1 ) ;
dtslope : prénom ( "~ biais" ) << set selected ( 1 ) ;
dtslope : erreur standard << set selected ( 1 ) ;
dtslope : t ratio << set selected ( 1 ) ;
dtslope : prénom ( "prob> | t |" ) << set selected ( 1 ) ;
dtslope << supprimer des colonnes;
// Renomme la colonne Estimation en pente
dtslope : Estimation << nom du set ( "Pente" ) ;
// Ajoute la pente à la table de données d'origine
dt << Mettre à jour (
Avec (dtslope) ,
Match Columns ( : _1 = : _1 )
) ;
Re: Trouver la pente pour une ligne de données, pas une colonneVoici un exemple de formule de colonne pour calculer la pente sur plusieurs colonnes. Les valeurs X ne sont pas claires, mais je suppose qu'elles sont définies par les noms de colonne, comme dans votre exemple. Comme vous pouvez le voir, la matrice X est maintenant codée en dur. La formule pourrait être plus générale si les valeurs X étaient conservées, par exemple dans la première ligne (ou dans une variable de table).
// exemple de table
dt = Nouvelle table ( "Slope_Across_Columns.jmp" ,
Ajouter des lignes ( 2 ) ,
Nouvelle colonne ( "Assujettir" , Personnage , Valeurs ({ "001" , "002" })) ,
Nouvelle colonne ( "_1" , Valeurs ([ - 0.069965723 , 2 ])) ,
Nouvelle colonne ( "_2" , Valeurs ([ 0.492749371 , 4 ])) ,
Nouvelle colonne ( "_3" , Valeurs ([ 0,955245597 , 6 ])) ,
Nouvelle colonne ( "_4" , Valeurs ([ 1,346963522 , 8 ])) ,
Nouvelle colonne ( "_5" , Valeurs ([ 1,701118239 , dix ])) ,
Nouvelle colonne ( "_8" , Valeurs ([ 2.523141195 , 16 ]))
) ;
// expression de formule
F = Eval Expr (
Local ({ je = 1 , n = Expr ( N Col ( Tableau de données actuel ()) - 1 ) , X = J ( n , 1 , 1 ) || [ 1 , 2 , 3 , 4 , 5 , 8 ] , Y } ,
Y = Matrice ( Répéter ({ je ++ ; Colonne ( je ) []} , n )) ;
( Inverse ( X ` * X ) * X ` * Y ) [ 2 ] ;
)
) ;
// Ajouter une colonne de formule
dt << Nouvelle colonne ( "Pente" , Numérique , Formule ( Nom Expr ( F ))) ;
Re: Trouver la pente pour une ligne de données, pas une colonnesalut Nkormanik ,
la réponse est oui.
En général, vous devez transposer les données et effectuer les calculs. en supposant que la table de données est trop grande pour cela, je pense qu'il est plus facile de transposer une matrice. par conséquent, le processus implique généralement d'extraire les données dans une matrice, de les transposer et de calculer les pentes. jetez un oeil à cela. il fait toutes les étapes à des fins d'illustration. ce n'est pas très robuste (si vous avez des valeurs manquantes) ou quelque chose de drôle.
meilleur,
Ron
// crée une table de données
dt = nouvelle table ( "données en lignes" ,
ajouter des lignes ( 100 ) ,
nouvelle colonne ( "Assujettir" , formule ( rangée ())) ,
nouvelle colonne ( "pente" ) ,
nouvelle colonne ( "R2" ) ,
ajouter plusieurs colonnes ( "colonne" , 20 , numérique )
) ;
// définir des valeurs pour les colonnes de données
pour ( je = 4 , je <= 23 , je ++,
: colonne ( je ) << formule (( je / 2 ) + Aléatoire Normal ()) << formule d'évaluation << supprimer la formule ;
) ;
// commencer à travailler
// récupère la table sous forme de matrice
matrice de données = dt << GetAllColumnsAsMatrix ;
// supprime les colonnes non utilisées pour les calculs de régression (colonnes 1-4)
matrice de données [ 0 , 1 :: 3 ] = [] ;
// transpose la matrice
Les données = matrice de données `;
// crée une variable x pour le temps.
X = ( 1 :: ncol ( matrice de données )) `;
// ajoute une colonne de 1 pour le terme d'interception
X = J ( Nrow ( X ) , 1 ) || X ;
// maintenant nous avons toutes les données nécessaires pour les calculs sous forme de matrice
pour ( Je rame = 1 , Je rame <= maintenant ( dt ) , Je rame ++, // pour chaque ligne
// extrait les données individuelles une par une
Y = Les données [ 0 , Je rame ] ;
// calculer les estimations des moindres carrés
β = Inv ( X `* X ) * X `* Y ;
dt : pente [ Je rame ] = β [ 2 ] ;
// calcule R2
N = NRows ( Y ) ;
Ybar = Signifier ( Y ) ;
R2 = ( β `* X `* Y - N * Ybar ^ 2 ) / ( Y `* Y - N * Ybar ^ 2 ) ;
dt : R2 [ Je rame ] = R2 ;
) ;