Funzioni pendenza e intercettaSono rimasto molto sorpreso di scoprire che JMP non ha una funzione di pendenza o intercetta. Può davvero essere così?
Sarebbe fantastico se funzioni come Slope(xMatrix, yMatrix), Intercept (xMatrix, yMatrix), Col Slope(xCol, yCol, By Vraiables) e Col Intercept(xCol, yCol, By Vraiables) sono stati aggiunti (e funzioni diagnostiche come R2, SE ecc.), ottenendo semplici coefficienti di regressione lineare RMS.
So che posso eseguire le regressioni in bivariato, generare una tabella dati di pendenze ecc. e aggiornare la mia tabella originale con queste, ma questo non è dinamico e non è pratico per un gran numero di analisi di regressione.
Spero che aggiungerai tali funzioni in futuro.
Re: Funzioni pendenza e intercetta** Modificare:
Sulla base di questo post, ho aggiunto la funzione JSL Linear Regression() in JMP 14. Il JSL per estrarre la pendenza e l'intercettazione ora è molto più semplice:
coefs = Linear Regression( y, X )[1]; <BR />coefs[1]; // intercept
coefs[2]; // slope
Vengono inoltre restituiti vari dati diagnostici come la statistica t-test, il valore p e R-Squared e (facoltativamente) stampati ordinatamente nella finestra di registro.Nota che la regressione lineare() è capace di qualcosa di più della semplice regressione lineare. Consultare l'Indice degli script per tre diversi esempi di utilizzo della funzione con tutte le funzionalità opzionali.
***
Jesper,
Grazie per la raccomandazione Questo è un buon suggerimento e valuterò l'opportunità di aggiungere una soluzione migliore in una versione futura di JMP.Nel frattempo, ho aggiunto una funzione JSL in JMP 13 chiamata Least Squares Solve che potrebbe esserti utile.
In due righe di codice è possibile ottenere stime per l'intercetta, la pendenza e gli errori standard (senza contare il codice per estrarre i risultati).È più generale di quello che stai richiedendo ed è più facile da capire con una certa conoscenza dell'algebra lineare. Inoltre, non segnala i valori R^2 o la diagnostica di adattamento del modello disponibile in piattaforme come Adatta Y per X.
Per mostrarti come adattare una semplice regressione lineare con la risoluzione dei minimi quadrati, ho generato un vettore casuale per x e quindi ho generato y che dipende linearmente da x.
// Generating some data
intercept = 2; slope = 4;
x = J(100,1,Random Normal());
y = intercept + x * slope +J (100,1,Random Normal(0,.3));
In JMP 13, la risoluzione dei minimi quadrati richiede una matrice di progettazione e non aggiungerà un termine di intercettazione. Per aggiungere un'intercetta, devi aggiungere una colonna di 1 alla x osservata. Il JSL per fare questo è:
// add an intercept term by adding a column of 1s to the design matrix, X
X.design = J(nrow(x),1) || x;
Se hai familiarità con l'algebra lineare, la soluzione dei minimi quadrati risolverà le equazioni normali associate al modello:
y = X.design * beta + errore
Tuttavia, poiché X.design ha 2 colonne e la prima è una colonna di 1, questo modello si semplifica in una semplice regressione lineare, ovvero per il singolo i:
y_i = intercetta + pendenza * x_i + errore_i.
// Solve for intercept, slope, and variance terms for each
{beta, var} = Least Squares Solve(X.design, y);
Risolvi i minimi quadrati() restituisce i coefficienti beta stimati (intercetta e pendenza in questo caso) nonché le varianze e covarianze associate. Si noti che l'errore standard è la radice quadrata della varianza di una stima. Per estrarre l'intercetta, la pendenza e i rispettivi errori standard, il codice è:
// To retrieve the intercept, slope, and their associated standard errors:
beta[1]; //the intercept
beta[2]; //the slope
sqrt(var[1,1]); // the standard error for the intercept
sqrt(var[2,2]); // the standard error for the slope
Spero che aiuti,
Milo
Re: Funzioni pendenza e intercettaFa i calcoli che voglio, ma non nel modo che preferirei. Ancora una volta, posso fare i calcoli, quindi non è questo il problema. Penso solo che potrebbe (dovrebbe) esserci un modo più semplice.
Re: Funzioni pendenza e intercettaCiao Jesper,
Hai visto il componente aggiuntivo per la raccolta di pendenze e intercettazioni ?
Credo che questo farà quello che vuoi.
Saluti,
Stan
Re: Funzioni pendenza e intercettaGrazie
Penso di aver visto quest'ultimo esempio anche mentre cercavo la soluzione. Comunque non credo che risolva il mio problema. Il mio problema non è che non riesco a calcolare pendenza e intercetta, ma che sembra inutilmente complicato farlo.
Nel tuo esempio ho bisogno di scrivere le funzioni e anche di generare codice per estrarre le matrici xey per ciascuna variabile By rilevante dalla mia tabella.
La mia domanda non è per aiutare a fare i calcoli. Voglio solo esprimere il mio desiderio per dette funzioni integrate. Se fossero lì li userei regolarmente. E ora mi mancano con la stessa frequenza.
Jesper
Re: Funzioni pendenza e intercettaIL Guida allo scripting JMP ha una sezione su Esempi statistici nel Strutture dati sezione su Matrici che mostra come utilizzare le operazioni sulla matrice per calcolare una regressione lineare.
Ho usato quell'esempio per creare le funzioni Slope() e Intercept() che stavi cercando.
slope = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[2];
)
);
intercept = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[1];
)
);
Y = [98, 112.5, 84, 102.5, 102.5, 50.5, 90, 77, 112, 150, 128, 133, 85, 112];
X = [65.3, 69, 56.5, 62.8, 63.5, 51.3, 64.3, 56.3, 66.5, 72, 64.8, 67, 57.5, 66.5];
s = slope( x, y );
i = intercept( x, y );
Show( s, i );
IL Esempi statistici La sezione espande l'esempio per mostrare come calcolare i residui e altri risultati diagnostici anche per la regressione multipla.
Ripeterò l'esempio di seguito.
// open the data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// get data into matrices
x = (Column( "Age" ) << Get Values) || (Column( "Height" ) << Get Values);
x = J( N Row( x ), 1, 1 ) || x;
y = Column( "Weight" ) << Get Values;
// regression calculations
xpxi = Inv( x` * x );
beta = xpxi * x` * y; // parameter estimates
resid = y - x * beta; // residuals
sse = resid` * resid; // sum of squared errors
dfe = N Row( x ) - N Col( x ); // degrees of freedom
mse = sse / dfe; // mean square error, error variance estimate
// additional calculations on estimates
stdb = Sqrt( Vec Diag( xpxi ) * mse ); // standard errors of estimates
alpha = .05;
qt = Students t Quantile( 1 - alpha / 2, dfe );
betau95 = beta + qt * stdb; // upper 95% confidence limits
betal95 = beta - qt * stdb; // lower 95% confidence limits
tratio = beta :\</img> stdb; // Student's T ratios
probt = (1 - t Distribution( Abs( tratio ), dfe )) * 2; // p-values
// present results
New Window( "Big Class Regression",
Table Box(
String Col Box( "Term", {"Intercept", "Age", "Height"} ),
Number Col Box( "Estimate", beta ),
Number Col Box( "Std Error", stdb ),
Number Col Box( "TRatio", tratio ),
Number Col Box( "Prob>|t|", probt ),
Number Col Box( "Lower95%", betal95 ),
Number Col Box( "Upper95%", betau95 )
)
);
Re: Funzioni pendenza e intercettaVedo che fornisce una soluzione alternativa. Sapevo già fare i calcoli, ma non in modo semplice. Il mio post era più una richiesta di funzionalità. La mancanza di tali funzioni sembra una strana omissione.
Re: Funzioni pendenza e intercettaForse l'hai già visto, altrimenti c'è un thread correlato Qui .