傾き関数と切片関数JMP には傾きや切片の関数がないことに気づき、非常に驚きました。 これは本当にそうなのでしょうか?
Slope(xMatrix, yMatrix)、Intercept などの関数があれば素晴らしいでしょう(xMatrix、yMatrix)、Col Slope(xCol、yCol、By Vraiables)、および Col Intercept(xCol、yCol、By Vraiables) が追加され (および R2、SE などの診断関数)、単純な RMS 線形回帰係数が得られます。
二変量で回帰を実行し、傾きなどのデータ テーブルを生成し、それらを使用して元のテーブルを更新できることはわかっていますが、これは動的ではないため、多数の回帰分析には実用的ではありません。
将来的にはこのような機能も追加していただければと思います。
Re: 傾き関数と切片関数** 編集:
この投稿に基づいて、JMP 14 に Linear Regression() JSL 関数を追加しました。 傾きと切片を抽出するための JSL は、はるかに単純になりました。
coefs = Linear Regression( y, X )[1]; <BR />coefs[1]; // intercept
coefs[2]; // slope
t 検定統計量、p 値、R 二乗などのさまざまな診断も返され、(オプションで) ログ ウィンドウにきちんと出力されます。Linear Regression() に注意してください。できる単純な線形回帰以上のものです。 すべてのオプション機能を備えた関数の使用例については、「スクリプト索引」を参照してください。
***
ジェスパー
推薦してくれてありがとう。 これは良い提案です。JMP の将来のバージョンでより良いソリューションを追加することを検討します。それまでの間、私は JMP 13 に、役に立つかもしれない最小二乗法ソルブと呼ばれる JSL 関数を追加しました。
2 行のコードで、切片、傾き、標準誤差の推定値を取得できます (結果を抽出するコードはカウントしません)。これはあなたが要求しているものよりも一般的であり、線形代数の知識があれば最も簡単に理解できます。 また、Fit Y by X などのプラットフォームで利用できる R^2 値やモデル フィッティング診断もレポートしません。
最小二乗法ソルブを使用して単純な線形回帰を近似する方法を示すために、x のランダム ベクトルを生成し、次に x に線形に依存する y を生成しました。
// Generating some data
intercept = 2; slope = 4;
x = J(100,1,Random Normal());
y = intercept + x * slope +J (100,1,Random Normal(0,.3));
JMP 13 では、最小二乗法ソルブには計画行列が必要ですが、切片項は追加されません。 切片を追加するには、観測された x に 1 の列を追加する必要があります。 これを行うための JSL は次のとおりです。
// add an intercept term by adding a column of 1s to the design matrix, X
X.design = J(nrow(x),1) || x;
線形代数に精通している場合は、最小二乗法でモデルに関連付けられた正規方程式を解きます。
y = X.デザイン * ベータ + エラー
ただし、X.design には 2 つの列があり、最初の列は 1 の列であるため、このモデルは単純な線形回帰に単純化されます。つまり、個々の i に対して次のようになります。
y_i = 切片 + 傾き * x_i + error_i。
// Solve for intercept, slope, and variance terms for each
{beta, var} = Least Squares Solve(X.design, y);
Least Squares Solve() は、推定されたベータ係数 (この場合は切片と傾き) とそれに関連する分散と共分散を返します。 標準誤差は推定値の分散の平方根であることに注意してください。 切片、傾き、およびそれぞれの標準誤差を抽出するためのコードは次のとおりです。
// 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
これがお役に立てば幸いです、
マイロ
Re: 傾き関数と切片関数私が望む計算は実行されますが、私が望む方法ではありません。 繰り返しますが、計算はできるので、それは問題ではありません。 もっと簡単な方法があるかもしれない(はずである)と思います。
Re: 傾き関数と切片関数こんにちは、ジェスパーさん
見たことがありますか傾きと切片を収集するためのアドイン?
これであなたの望むことができると思います。
乾杯、
スタン
Re: 傾き関数と切片関数ありがとう
後者の例も、解決策を探していたときに見たと思います。 それでも私の問題が解決したとは思えません。 私の問題は、傾きと切片を計算できないことではなく、計算するのが不必要に面倒に見えることです。
あなたの例では、関数をスクリプト化し、テーブルから関連する各 By 変数の x 行列と y 行列を抽出するコードも生成する必要があります。
私の質問は計算を手伝ってもらうためではありません。 私は、上記の組み込み関数に対する私の願望を表明したいだけです。 もしそこにあれば、私は定期的にそれらを使用するでしょう。 そして今、私は同じ頻度で彼らを恋しく思います。
ジェスパー
Re: 傾き関数と切片関数のJMP スクリプト ガイドに関するセクションがあります統計的な例の中にデータ構造のセクション行列これは、行列演算を使用して線形回帰を計算する方法を示しています。
この例を使用して、あなたが探していたslope()関数とintercept()関数を作成しました。
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 );
の統計的な例このセクションでは例を拡張して、重回帰の残差やその他の診断結果を計算する方法を示します。
以下にその例を繰り返します。
// 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: 傾き関数と切片関数回避策が提供されていることがわかります。 計算はすでにできていましたが、簡単ではありませんでした。 私の投稿は機能リクエストに近いものでした。 上記の機能が欠如しているのは、奇妙な省略のように思えます。
Re: 傾き関数と切片関数おそらくすでに見たかもしれませんが、そうでない場合は関連スレッドがありますここ。