Trova pendenza per una riga di dati, non una colonna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />I dati sono per argomento nel tempo, su una riga. Vedi il seguente esempio:
<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
Ho migliaia di tali file in cui è necessaria la pendenza.
Tutto ciò di cui ho veramente bisogno è la pendenza per ogni serie di numeri nella riga.
Una nuova colonna aggiuntiva che segue ogni serie dovrebbe contenere il valore di pendenza per quella particolare serie.
Ho chiesto su un forum SAS se SAS è in grado di gestirlo. Ti chiedi se JMP può? Qualsiasi aiuto sarebbe molto apprezzato.
Nicholas
Ri: Trova pendenza per una riga di dati, non una colonnaEcco un altro metodo. Ha solo un vantaggio, in quanto lo script duplica semplicemente ciò che potresti fare eseguendo in modo interattivo JMP. Ho allegato una tabella di dati di esempio in cui ho sviluppato lo script.
// Imposta un puntatore ai dati di esempio
i nomi sono predefiniti qui ( 1 ) ;
dt = tabella dei dati corrente () ;
// Impila le 6 colonne di dati da ciascuna riga
impilati = dt << Pila (
colonne ( : _3 , : _4 , : _5 , : _6 , : _7 , : _8) ,
Colonna dell'etichetta di origine ( "Etichetta" ) ,
Colonna dei dati in pila ( "Dati" )
) ;
// Crea una nuova colonna che rappresenta il fattore tempo
impilati << nuova colonna ( "tempo" , formula( Num ( substr ( : Etichetta , 2 , 1 )) - 2 )) ;
// Esegue l'analisi sui dati, per ogni riga (studente)
biv = impilati << bivariate (invisibile ,
Y ( : Dati) ,
X( : tempo ) ,
Adatta linea ({Colore linea ({ 213 , 72 , 87 })}) ,
da (_1)
) ;
// Crea una tabella di dati dall'output delle stime
dtslope = rapporto (Biv [ 1 ]) [ "Stime dei parametri" ] [ 1 ] << crea una tabella di dati combinata;
// Elimina i dati di intercettazione
dtslope << seleziona dove ( : termine == "Intercettare" ) ;
dtslope << cancella le righe;
// Seleziona le colonne che non sono desiderate ed eliminale
dtslope : X << imposta selezionato ( 1 ) ;
dtslope : y << imposta selezionato ( 1 ) ;
dtslope : termine << imposta selezionato ( 1 ) ;
dtslope : Nome ( "~ Polarizzazione" ) << imposta selezionato ( 1 ) ;
dtslope : errore std << imposta selezionato ( 1 ) ;
dtslope : rapporto t << imposta selezionato ( 1 ) ;
dtslope : Nome ( "Prob> | t |" ) << imposta selezionato ( 1 ) ;
dtslope << elimina colonne;
// Rinomina la colonna Stima in Pendenza
dtslope : Stima << imposta il nome ( "Slope" ) ;
// Aggiungi la pendenza alla tabella dei dati originale
dt << Aggiornare (
Con (dtslope) ,
Colonne delle corrispondenze ( : _1 = : _1)
) ;
Ri: Trova pendenza per una riga di dati, non una colonnaEcco un esempio di una formula di colonna per calcolare la pendenza tra le colonne. Non è chiaro quali siano i valori X, ma presumo che siano definiti dai nomi delle colonne come nell'esempio. Come puoi vedere la matrice X è ora codificata. La formula potrebbe essere resa più generale se i valori X sono stati tenuti ad esempio nella prima riga (o in una variabile di tabella).
// Tabella di esempio
dt = Nuova tabella ( "Slope_Across_Columns.jmp" ,
Aggiungi righe ( 2 ) ,
Nuova colonna ( "Soggetto" , Personaggio , Valori ({ "001" , "002" })) ,
Nuova colonna ( "_1" , Valori ([ - ,069,965723 millions , 2 ])) ,
Nuova colonna ( "_2" , Valori ([ ,492,749371 millions , 4 ])) ,
Nuova colonna ( "_3" , Valori ([ ,955,245597 millions , 6 ])) ,
Nuova colonna ( "_4" , Valori ([ 1,346,963522 millions , 8 ])) ,
Nuova colonna ( "_5" , Valori ([ 1,701,118239 millions , 10 ])) ,
Nuova colonna ( "_8" , Valori ([ 2,523,141195 millions , 16 ]))
) ;
// espressione della formula
F = Eval Espr (
Locale ({ io = 1 , n = expr ( N Col ( Tabella dei dati corrente ()) - 1 ) , X = J ( n , 1 , 1 ) || [ 1 , 2 , 3 , 4 , 5 , 8 ] , Y } ,
Y = Matrice ( Ripetere ({ io ++ ; Colonna ( io ) []} , n )) ;
( Inverso ( X ` * X ) * X ` * Y ) [ 2 ] ;
)
) ;
// Aggiungi la colonna della formula
dt << Nuova colonna ( "Slope" , Numerico , Formula ( Nome Espr ( F ))) ;
Ri: Trova pendenza per una riga di dati, non una colonnaCiao nkormanik ,
la risposta è si.
in generale è necessario trasporre i dati e fare i calcoli. supponendo che la tabella dati sia troppo grande per questo penso che sia più facile trasporre una matrice. pertanto, il processo in generale comporta l'estrazione dei dati in una matrice, la trasposizione e il calcolo delle pendenze. dai un'occhiata a questo. fa tutti i passaggi dfferent a scopo illustrativo. non è molto robusto (se hai dei valori mancanti) o qualcosa di divertente.
migliore,
ron
// crea una tabella di dati
dt = nuovo tavolo ( "dati in file" ,
aggiungi righe ( 100 ) ,
nuova colonna ( "Soggetto" , formula ( riga ())) ,
nuova colonna ( "Pista" ) ,
nuova colonna ( "R2" ) ,
aggiungi più colonne ( "colonna" , 20 , numerico )
) ;
// imposta i valori per le colonne di dati
per ( io = 4 , io <= 23 , io ++,
: colonna ( io ) << formula (( io / 2 ) + Casuale normale ()) << formula eval << elimina la formula ;
) ;
// iniziare a lavorare
// ottiene la tabella come una matrice
datamatrix = dt << GetAllColumnsAsMatrix ;
// rimuove le colonne non utilizzate per i calcoli di regressione (colonne 1-4)
datamatrix [ 0 , 1 :: 3 ] = [] ;
// traspone la matrice
dati = datamatrix `;
// crea una variabile x per il tempo.
X = ( 1 :: ncol ( datamatrix )) `;
// aggiungi una colonna di 1 per il termine di intercettazione
X = J ( nRow ( X ) , 1 ) || X ;
// ora abbiamo tutti i dati di cui abbiamo bisogno per i calcoli in forma di matrice
per ( IRow = 1 , IRow <= nrows ( dt ) , IRow ++, // per ogni riga
// estrae i singoli dati uno per uno
Y = dati [ 0 , IRow ] ;
// calcola le stime dei minimi quadrati
β = inv ( X `* X ) * X `* Y ;
dt : pendenza [ IRow ] = β [ 2 ] ;
// calcola R2
N = nRows ( Y ) ;
Ybar = Significare ( Y ) ;
R2 = ( β `* X `* Y - N * Ybar ^ 2 ) / ( Y `* Y - N * Ybar ^ 2 ) ;
dt : R2 [ IRow ] = R2 ;
) ;