遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?對違規行為表示歉意,即:諷刺地;這是我個人在 JSL 取得進步的直接結果。
我的組織中一位非常樂於助人的電腦科學家正在嘗試將最初用 JSL 編寫的內容轉換為 Python。具體來說,挑戰是如何重現 JSL 函數「 Vec Quadratic() 」正在做什麼?另請參閱隨附的範例表。
背景:
要翻譯的 JSL 應用程式為置信區間和預測區間建立公式列。然後使用這些公式計算某些使用者指定的x值(也稱為自變數)的置信區間和預測區間的值。
問題:
定向螢幕截圖:
- 我們想要用Python實現什麼(紅框內的結果)

- 上面顯示的列是如何產生的

自動化和腳本編寫基礎資料分析與建模回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?你有向Python社群詢問過這個問題嗎?就我個人而言,努力幫助某人離開 JMP 似乎對 JMP 社群產生反作用。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?一方面是真的。但另一方面,Python 已整合到 JMP18 中,這表明必須有人接受這一現實。我希望社群中有人能夠解釋,因為我認為 JSL 使用者更有可能知道「 Vec Quadratic() 」的 Python 等效項,而不是相反。 (當我問 Python 社群時,他們會告訴我什麼?)
回覆:遠景:如何使用 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 統計人員和測試人員投入了大量精力來創建可靠、準確且經過良好測試的程式碼。這就是價值主張。我們專注於統計數據,因此您可以專注於您的應用程序,而不必重新發明統計「輪子」。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?我毫不懷疑 JMP 統計學家為創建可靠的程式碼付出了很多努力。我懷疑的是希望這個論壇沒有與 Python 相關的問題。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?謝謝,真是太貼心了!我們可能找到了解決方案: https://numpy.org/doc/stable/reference/ generated /numpy.cov.html
編輯:這篇文章的標題具有誤導性。 numpy.polyfit 可能不適合模擬「 Vec Quadratic() 」。
回覆:遠景:如何使用 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];
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?@Paul_Nelson ,謝謝。在發布之前我已經知道 JSL 函數「Vec Quadratic()」的作用。很抱歉在這篇文章中沒有充分錶達我的問題。這個論壇並不是每個人都是以英語為母語的。只是為了完整性:
你的評論:
儘管不是詢問如何複製 JSL 的“Vec Quadratic()”...
我原來的問題:
如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?
使用「再現」是否令人反感?
回覆:遠景:如何使用 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])
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?@Ressel我認為您的請求中令人困惑的部分是 Vec Quadratic() 只是執行腳本索引所描述的矩陣數學。 Vec Quadratic() 的結果只是矩陣運算的輸出。
給出 95% 值的公式本身是由 Fit Y by X 平台產生的。 「Fit y By X」也是故事情節的創作者。因此,據我了解,這個問題更準確;如何在 Python 或 numpy 中使用置信水準對 y 乘 x 進行二變量擬合?
我認為Vec Quadratic()是錯誤的焦點,因為它沒有創建公式或常數,它只是產生公式中的數學運算。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?@Paul_Nelson ,這是正確的,我後來才發現(並且無恥地利用接受我自己的答案作為解決方案)。關於這一點以及問題的確切措辭,老實說我沒有。學到的東西越多...非常感謝您的分享,祝週末愉快。
(附:作為一家複雜的統計軟體公司,您幾乎可以依靠工程師而無需計算人才成為商業模式的一部分。無論好壞。)
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?我對 Jmp for Python 的開放性表示讚賞:)
正如@Paul_Nelson所提到的 - 現在有了 Jmp18,如果 JMP 中缺少某個功能,每個用戶都可以輕鬆地從 Python 獲取它 - 只需 2-3 行程式碼。非常有用!
另一方面,維基百科上的一些關於矩陣操作、DOE、回歸、神經網路等的知識完全不用擔心被「竊取」。
憑藉來自最先進、最新 Python 軟體包的“功能”,“軟技能”、無錯誤、直觀的介面和卓越的用戶體驗將成為 JMP 的代表並將其與競爭對手區分開來:
回覆:願望清單 - 新標籤:使用者體驗
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?也許是
NormalContour = sqrt(ChiSquare Quantile( 0.95, 2 ));
Ellipse的想法將為您指明正確的方向。我做圖片,不做統計,所以我可能離題還很遠。但為了製作橢圓形圖片,我必須回答類似的問題。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?如果你問副駕駛:

回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?此外,我認為透過 JMP 進入資料分析和自動化工作的使用者不太可能牢固掌握 Python 或任何其他與此相關的程式設計和腳本語言,這是很自然的。 JMP 正在積極嘗試招募此類用戶,並使其(我認為)能夠輕鬆地使用 JSL 編寫腳本。然而,一旦使用者開發和學習,至少在某些情況下,並且在克服了理解一些基本計算概念的最初障礙之後,預計這會引發對額外知識的渴望。當然,這類使用者的第一個直覺是向社群尋求協助,尤其是在 JMP 18 中宣傳 Python 整合之後。的使用是不言而喻的。雖然,我可能全都搞錯了。
回覆:遠景:如何使用 numpy.polyfit 重現 Vec Quadratic() 結果?如果有人有興趣,下面的 Python 程式碼看起來將準確地重現 JMP 在計算回歸的置信區間方面所做的工作。該程式碼區塊可以直接貼到 Jupyter Notebook 中。除了計算線性迴歸中每個 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()