ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?皮肉なことに、これは私の日本語能力の向上の直接的な結果であり、違反行為をお詫び申し上げます。
私の組織にいる非常に有能なコンピューター サイエンティストが、当初 JSL で記述されたものを Python に翻訳しようとしています。具体的には、JSL 関数 ' Vec Quadratic() ' の動作を再現する方法が課題です。添付の例の表も参照してください。
背景:
翻訳対象の JSL アプリケーションは、信頼区間と予測区間の数式列を作成します。次に、数式を使用して、ユーザーが指定したxの値 (独立変数とも呼ばれます) の信頼区間と予測区間の値を計算します。
質問:
オリエンテーションのスクリーンショット:
- Pythonで実現したいこと(赤枠内の結果)

- 上記の列がどのように生成されたか

自動化とスクリプト基本的なデータ分析とモデリングRe: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?この件について Python コミュニティに問い合わせましたか。個人的には、誰かを JMP から遠ざけるのを支援することに労力を費やすことは、JMP コミュニティにとって逆効果であるように思われます。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?一方で、それは真実です。しかし、もう一方では、Python は JMP18 に統合されているため、この現実を受け入れようとしている人がいるはずです。JSL ユーザーが ' Vec Quadratic() ' の Python 相当を知っている可能性の方が、その逆よりもずっと高いと思うので、コミュニティの誰かが説明してくれることを期待していました。(そして、Python コミュニティに尋ねたら、彼らは何と答えるでしょうか?)
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?jmp.DataTable オブジェクトにより、一部のユーザーは JMP データをエクスポートするより簡単な方法を利用できるようになりますが、改善された Python 統合は JMP ユーザーにメリットをもたらすことに重点を置いています。
- JMP を初めて使用するユーザーでも、Python に精通していればすぐに生産性を高めることができる環境を提供します。
- Python 統合の設計は、ワークフローのハブとしての JMP の機能を向上させることに重点を置いています。仕事を完了するために JMP を離れる必要性を減らします。希望 / 願望は、JMP 環境がより便利で魅力的になり、作業が JMP からエクスポートされるのではなく、JMP に取り込まれるようになることです。JMP / Python 統合は、JMP と Python の単なる集約以上のものになります。たとえば、次のようになります。
- JMP でまだサポートされていないファイル形式は、外部 Python パッケージ、parquet、hdf5 などを使用して開くことができます。
- JMP ユーザーが pyopencl や pyCUDA などのパッケージを通じてデスクトップ GPU を利用できるようにします。
- 階層密度クラスタリング(HDBSCAN)などの追加の統計機能
- matplotlib、plotly などのパッケージを使用した追加のプロットおよびグラフ作成機能...
- Python インターフェイスを介して他のソフトウェア システムと統合します。SAS、MatLab、R、...
JMP の統計学者とテスト担当者は、信頼性が高く、正確で、十分にテストされたコードの作成に多大な労力を費やしています。これが価値提案です。私たちは統計に重点を置いているので、統計の「車輪」を発明し直す必要はなく、アプリケーションに集中できます。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?JMP の統計学者が信頼性の高いコードの作成に多大な努力を払っていることには疑いの余地はありません。私が疑問に思うのは、このフォーラムを Python 関連の質問から解放しておくという期待です。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?ありがとうございます。とても親切ですね。解決策が見つかったかもしれません: https://numpy.org/doc/stable/reference/generated/numpy.cov.html
編集: この投稿のタイトルは誤解を招くものです。numpy.polyfit はおそらく' Vec Quadratic() ' をエミュレートするのに適していません。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?JMP ブログでは、Python に関する質問を歓迎しています。最近、多くの質問に回答しています。サンプル コードや、JMP で Python を最大限に活用する方法に関するディスカッションも含まれています。
@txnelson のPython コミュニティに質問するというコメントは、統計ブログに質問するのと同様に、妥当なものです。ただし、JSL の「Vec Quadratic()」を再現する方法を尋ねるのではなく、必要な結果をグラフ化する方法、Python で必要な統計を行う方法を尋ねるという言い方をしています。
この特定の質問への回答については、私にはお手伝いできません。 'Vec Quadratic()' が内部的にどのように機能するかについては、私にはわかりません。 しかし、スクリプト インデックスに書かれていることはお伝えできます。 スクリプト インデックスの Vec Quadratic( S, X ) の定義では、Vec Diag ( X * S * X ) として評価されると述べています。 スクリプト インデックスの Vec Diag( X ) の説明は、正方行列の対角要素をベクトルとして返します。 単純な行列計算のように見える何かを見逃していない限りは。
JMP で実行されている Python プログラムから 'Vec Quadriatic()' を呼び出して、結果をさらに処理するにはどうすればよいでしょうか。これは興味深い質問です。
S と X に numpy 配列を使用し、Python Get(S)、Python Get(X) を実行して、numpy 配列の値を JSL マトリックスとして JSL 環境に取得できます。また、jmp.run_jsl( 'Vec Quadratic( S, X)' ) を呼び出すことができます。その後、JMP の Python から、Python のデータ テーブルから直接列の結果を取得できます。jmp.DataTable および jmp.DataTable.Column オブジェクトについては、スクリプト インデックスを参照してください。
スクリプト インデックスの JSL「Vec Quadratic()」の例から派生しました。
import jmp
import numpy as np
s = np.array( [[1,3,5],[3,2,6], [5,6,1] ])
x = np.array( [[1,3,5],[2,4,6] ])
jmp.run_jsl('''
S = Python Get(s);
X = Python Get(x);
show(Vec Quadratic(S, X));
''')
結果を出す
/*:
//:*/
S = Python Get(s);
X = Python Get(x);
show(Vec Quadratic(S, X));
/*:
Vec Quadratic(S, X) = [292, 528];
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?@Paul_Nelson 、ありがとうございます。投稿する前に、JSL 関数 'Vec Quadratic()' が何をするかは既に知っていました。この投稿で質問を適切に表現できなかったことをお詫びします。このフォーラムの参加者全員が英語を母国語とするわけではありません。完全を期すために:
あなたのコメント:
ただし、JSL の「Vec Quadratic()」を複製する方法を尋ねる代わりに...
私の最初の質問:
numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいですか?
「再現」という言葉の使用が問題なのでしょうか?
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?...行列操作に問題があることに気づく:)
括弧を調整すると、次のようになります。
import numpy as np
s = np.array( [[1.,3.,5.],[3.,2.,6.], [5.,6.,1.] ])
x = np.array( [[1.,3.,5.],[2.,4.,6.] ])
res= x @ (s @ x.T)
print(res)
print(res.diagonal())
...これは
Names Default To Here( 1 );
exS = [1 3 5, 3 2 6, 5 6 1];
exX = [1 3 5, 2 4 6];
Print(r= exX * exS * exX`);
tmp=as list(r);
print(tmp[1][1],tmp[2][2])
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?@Resselあなたのリクエストで混乱を招く部分は、Vec Quadratic() が、Scripting Index で説明されているように、単に行列計算を実行している点だと思います。Vec Quadratic() の結果は、単に行列演算の出力です。
95% の値を与える数式自体は、Fit Y by X プラットフォームによって生成されます。「Fit y By X」は、プロットを作成する役割も担っています。したがって、私が理解している質問は、より正確には、 「Python または numpy で信頼レベルを使用して y By x の二変量フィットを実行するにはどうすればいいですか?」です。
Vec Quadratic() は、数式や定数を生成せず、生成された数式内の単なる数学演算であるため、焦点が間違っていると思います。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?@Paul_Nelson 、これは正解です。後になって初めて気づきました (そして恥知らずにも、自分の答えを解決策として受け入れるために利用しました)。これと質問の正確な言い回しに関しては、正直言って私にはわかりませんでした。学ぶほど... シェアしていただきありがとうございました。良い週末をお過ごしください。
(追記: 洗練された統計ソフトウェア会社なので、良くも悪くも、計算能力のないエンジニアがビジネス モデルの一部となることはほぼ確実です。)
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?私はJmp for Pythonのオープン性を称賛します:)
@Paul_Nelsonが述べているように、Jmp18 では、JMP に機能が不足している場合、すべてのユーザーが 2 ~ 3 行のコードで Python から簡単に取得できます。驚くほど便利です!
一方、行列操作、DOE、回帰、ニューラル ネットワークなどに関する Wikipedia の知識の一部は、「盗まれる」ことを心配する必要はありません。
最先端の最新の Python パッケージから得られる「機能」により、JMP が他社製品と一線を画すのは、「ソフト スキル」、バグのなさ、直感的なインターフェイス、優れたユーザー エクスペリエンスです。
Re: ウィッシュリスト - 新規 ラベル: ユーザー エクスペリエンス
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?たぶん
NormalContour = sqrt(ChiSquare Quantile( 0.95, 2 ));
Ellipseのアイデアは、正しい方向を指し示してくれるでしょう。私は統計ではなく画像を扱うので、大きく外れているかもしれません。しかし、楕円の画像を作成するために、同様の質問に答える必要がありました。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?Copilotに聞いてみると:

Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?さらに、JMP を介してデータ分析や自動化の作業に携わるユーザーが Python やその他のプログラミング言語やスクリプト言語をしっかりと理解している可能性は低いと思います。JMP は積極的にこのタイプのユーザーを募集しており、JSL でのスクリプト作成を簡単に行えるようにしています (私の考えでは)。ただし、ユーザーが開発して学習すると、少なくともいくつかの基本的な計算概念を理解するという最初の障壁を乗り越えた後は、追加の知識を求めるようになることが予想されます。もちろん、この種のユーザーが最初に直感的に思いつくのは、特に JMP 18 で宣伝されている Python 統合の後では、コミュニティに助けを求めることです。最後に、プロのデータ サイエンティストが、素人の統計学者が JMP で開発したものを実際のビジネス環境で使用するためにコピーする任務を負っているという事実は、それ自体が物語っています。ただし、私が完全に間違っている可能性もあります。
Re: ロングショット: numpy.polyfit を使用して Vec Quadratic() の結果を再現するにはどうすればよいでしょうか?興味のある方のために、以下の Python コードは、回帰の信頼区間を計算するという点で JMP が行っていることを正確に再現しているように見えます。このコード ブロックは、Jupyter ノートブックに直接貼り付けることができます。線形回帰のすべての X の信頼区間の Y 座標を計算するほかに、プロットを作成し、回帰係数、切片、関連する不確実性を計算し、結果を表にまとめます。
これを自分で書いたとは信じられませんが、それでも学習には役立ちます。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
# the data as array
x_coordinate = np.array([0, 1, 2, 3])
y_coordinate = np.array([0.0, 0.5, 1.2, 5.1])
# linear model
func = lambda x, a, b: a * x + b
# model fit
best_fit_ab, covar = curve_fit(func, x_coordinate, y_coordinate)
sigma_ab = np.sqrt(np.diagonal(covar))
# extract fitted parameters and uncertainties
a, b = best_fit_ab
a_err, b_err = sigma_ab
text_res = f"Best fit parameters:\na = {a:.10f} ± {a_err:.10f}\nb = {b:.10f} ± {b_err:.10f}"
print(text_res)
# calculate the standard error of the regression
residuals = y_coordinate - func(x_coordinate, a, b)
s_err = np.sqrt(np.sum(residuals**2) / (len(x_coordinate) - 2))
# define a function to calculate the confidence intervals
def predict_ci(x, func, popt, pcov, s_err, alpha=0.05): # adjust alpha here
from scipy.stats import t
df = len(x_coordinate) - 2
t_val = t.ppf(1 - alpha / 2, df) # t-value for the given confidence level and degrees of freedom
y = func(x, *popt)
ci = t_val * s_err * np.sqrt(1/len(x_coordinate) + (x - np.mean(x_coordinate))**2 / np.sum((x_coordinate - np.mean(x_coordinate))**2))
return y - ci, y + ci
# generate points for high-resolution x-axis
hires_x = np.linspace(x_coordinate.min(), x_coordinate.max(), 100)
# calculate confidence intervals
ci_lower_orig, ci_upper_orig = predict_ci(x_coordinate, func, best_fit_ab, covar, s_err)
# tabulate the original data and confidence intervals
table_orig = np.column_stack((x_coordinate, y_coordinate, ci_lower_orig, ci_upper_orig))
print("\nTabulated values (original data):")
print("X Coordinate\tY Coordinate\t\tCI Lower\t\tCI Upper")
for row in table_orig:
print(f"{row[0]:.2f}\t\t{row[1]:.10f}\t\t{row[2]:.10f}\t{row[3]:.10f}") # adjust decimals for tabulation
# plotting the data
plt.scatter(x_coordinate, y_coordinate, label='Data', color='blue')
# plotting the fitted model
plt.plot(hires_x, func(hires_x, *best_fit_ab), 'black', label='Fitted model')
# plotting the confidence intervals
ci_lower, ci_upper = predict_ci(hires_x, func, best_fit_ab, covar, s_err)
plt.fill_between(hires_x, ci_lower, ci_upper, color='black', alpha=0.15, label='Confidence interval')
# adding text with parameters
plt.text(x_coordinate.min() + 0.5, y_coordinate.max() - 0.5, text_res)
# customize plot
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Y Coordinate vs. X Coordinate')
plt.legend()
plt.show()