適合線と切片の列の式、エラーのヘルプJMP18.1.1
私は測定データを扱っており、隣接するデータポイントを使用して、特定のデータポイントでの適合線を計算したいと思っています。次に、y=0 の x 軸切片を取得します。
調べてみて、自分でこの問題を解決しようとしたところ、JMP の「線形回帰」または「最小二乗法」のいずれかの機能を使用して解決できるようです。
私はこれを列の式で実行しました (評価するデータポイントを識別するための if ステートメントを使用)。
x = J( 2, 1, 0 );
y = J( 2, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
このコードは正しい出力を生成しますが、実行するとエラーが発生します。
「X のランクが X の行数に等しいため、パラメータ推定値の分散を推定できません」
ここで何が問題なのかよくわかりません。とにかく、インターセプトだけが必要なのです。これを修正する簡単な方法はありますか? または、警告をオフにできますか?
最小二乗関数を使用して同様のアプローチを試すこともできますが、同じエラーが発生します。
問題を示すサンプル テーブルを作成しました。そのテーブルで数式を再実行してエラーを確認してください。
ありがとう
基本的なデータ分析とモデリングRe: 適合線と切片の列の式、エラーの解決方法現在のデータポイントを含めて回帰のデータポイントの数を 3 に増やすことで、この問題をすぐに自分で修正できたようです。
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = :y_column;
x[3, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = :x_column;
y[3, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
これにより、エラーが表示されなくなります。今のところは問題ないかもしれません。ただし、将来的には 2 つのポイントのみからの切片を計算したいと考えています。そのため、私の質問はまだ残っています。
ありがとう
Re: 適合線と切片の列の式、エラーの解決方法計算を行っているポイントを含めることができます(つまり、2 つのポイントではなく 3 つのポイント)。
If(Row() > 1 & Row() < Col Number(:y_column),
Linear Regression(:y_column[Index(Row() - 1, Row() + 1)]`, :x_column[Index(Row() - 1, Row() + 1)]`)[1][1];
,
.
);
Re: 適合線と切片の列の式、エラーの解決方法返される切片値が正しくないという問題が発生しています...
これを示すには、実際のデータの抜粋を示す必要があります。ファイルが添付されています。
別の列が最大値になっている行で切片を評価しています。
スクリプトは隣接する行から値を正しく取得しており、ログ出力でマトリックスが正しく形成されていることがわかります。
切片の出力値は「-1053478758」です。しかし、これらの x/y 値を手動で別のテーブルに取り込んで、二変量直線近似を実行すると、切片は「-1.22」となり、これは正しい値です。
コード:
If( :"dlogIds/dVgs"n == Col Maximum( :"dlogIds/dVgs"n ),
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :I_Drain Abs, 1 );
x[2, 1] = :I_Drain Abs;
x[3, 1] = Lag( :I_Drain Abs, -1 );
y[1, 1] = Lag( :V_GATE, 1 );
y[2, 1] = :V_GATE;
y[3, 1] = Lag( :V_GATE, -1 );
Show( x );
Show( y );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
)
なぜ正しくないのか全く分かりません...
Re: 適合線と切片の列の式、エラーの解決方法精度の問題/見落とし/バグの可能性があります。JMP サポート@mzwaldにお問い合わせください。
Names Default To Here(1);
ys = [-0.999986, -1.49994, -1.99997];
xs = [1.3500e-12, 1.0600e-10, 1.9700e-9];
xs2 = Matrix(Eval List({1.3500e-12*10^12, 1.0600e-10*10^12, 1.9700e-9*10^12}));
ls = Linear Regression(ys, xs, << print to log);
ls2 = Linear Regression(ys, xs2, << print to log);
dt = New Table("",
New Column("Y", Numeric, Continuous, Values(ys)),
New Column("X1", Numeric, Continuous, Values(xs)),
New Column("X2", Numeric, Continuous, Values(xs2)),
);
biv1 = dt << Bivariate(Y(:Y), X(:X1), Fit Line({Line Color({230, 159, 0})}));
biv_estimates1 = Report(biv1)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates1 << get);
biv2 = dt << Bivariate(Y(:Y), X(:X2), Fit Line({Line Color({230, 159, 0})}));
biv_estimates2 = Report(biv2)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates2 << get);
Write();Re: 適合線と切片の列の式、エラーの解決方法精度の問題なのかと思いました。その関数内の何かが、十分な有効数字を持つ入力を処理していないようです。
今のところ、修正を使用して x 軸の値を処理可能な値に掛け合わせると機能します。
ありがとう!
Re: 適合線と切片の列の式、エラーの解決方法こんにちは@GRoberts86 : 完全を期すために、「エラー」メッセージ「X のランクが X の行数に等しいため、パラメータ推定値の分散を推定できません」が表示されるのは、ポイントが 2 つしかなく、それらを直線で接続しているためです。したがって、直線の周囲に変動はありません...つまり、実際には統計手順を実行しているわけではなく、数学的に2 つのポイントを接続しているだけです。ただし、ここで示すように、行列代数を介して統計パッケージを使用してこれを実行します。
https://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/13/lecture-13.pdf.
あなたが呼んだ統計的手順(線形回帰(y、x)[1])は、2つの点を数学的に結びつける以上のことを行います。また、傾きと切片の信頼区間、p値なども提供します。しかし、あなたの場合、2つの点(Xの順位=2)しかないため、変動はなく、したがって信頼区間などはありません。
つまり、簡単に言えば、「エラー」は実際には統計的な(数学的な出力とは異なります)出力がないことを通知するだけです。
Re: 適合線と切片の列の式、エラーの解決方法@MRB3855
少し考えてみて、そのことに気づきました。2 つの点だけを扱う場合は、古き良き「直線の方程式」y=mc+c を使用するのが適切です。
それでも、「サイレント」フラグはいいですね(笑)。