장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?위반에 대해 사과드립니다. 아이러니하게도; JSL에서의 개인적 발전의 직접적인 결과입니다.
우리 조직의 매우 유용한 컴퓨터 과학자가 처음에 JSL로 작성된 내용을 Python으로 번역하려고 합니다. 구체적으로, JSL 함수 ' Vec Quadratic() '이 수행하는 작업을 어떻게 재현할 것인가가 문제입니다. 첨부된 예제 표도 참조하세요.
배경:
번역할 JSL 애플리케이션은 신뢰 구간과 예측 구간에 대한 수식 열을 생성합니다. 그런 다음 공식은 독립 변수라고도 하는 일부 사용자 지정 x 값에 대한 신뢰 구간 및 예측 구간 값을 계산하는 데 사용됩니다.
질문:
오리엔테이션 스크린샷:
- Python에서 달성하고자 하는 것(빨간색 프레임 안의 결과)

- 위에 표시된 열이 생성된 방법

자동화 및 스크립팅기본 데이터 분석 및 모델링Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?이에 대해 Python 커뮤니티에 문의해 보셨나요? 개인적으로 JMP 커뮤니티에서 누군가가 JMP에서 멀어지도록 돕기 위해 노력하는 것은 비생산적인 것 같습니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?한편으로는 사실입니다. 반면에 Python은 JMP18에 통합되어 있으며 이는 이러한 현실을 받아들이는 사람들이 있어야 함을 의미합니다. 나는 JSL 사용자가 그 반대의 경우보다 ' Vec Quadratic() '에 해당하는 Python을 알 가능성이 무한히 더 높다고 생각하기 때문에 커뮤니티의 누군가가 설명할 수 있기를 바랐습니다. (내가 물어보면 Python 커뮤니티에서는 뭐라고 말해줄까요?)
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?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: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?JMP 통계학자들이 신뢰할 수 있는 코드를 만들기 위해 많은 노력을 기울인 것은 의심할 여지가 없습니다. 내가 의심하는 것은 이 포럼에 Python 관련 질문이 없을 것이라는 기대입니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?고마워요, 정말 친절해요! 해결책을 찾았을 가능성이 있습니다: https://numpy.org/doc/stable/reference/generated/numpy.cov.html
편집: 이 게시물의 제목이 오해의 소지가 있습니다. numpy.polyfit은 아마도 ' Vec Quadratic() '을 에뮬레이션하는 데 적합하지 않을 것입니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?JMP 블로그에서는 Python 관련 질문을 환영합니다. 나는 최근에 많은 질문에 답변해 왔습니다. 샘플 코드가 포함되어 있으며 JMP에서 Python을 최대한 활용하는 방법에 대한 토론이 포함되어 있습니다.
Python 커뮤니티에 질문하는 것에 대한 @txnelson의 의견은 통계 블로그에 질문하는 것과 마찬가지로 유효한 것입니다. 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: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?@Paul_Nelson , 감사합니다. 나는 게시하기 전에 JSL 함수 'Vec Quadratic()'이 무엇을 하는지 이미 알고 있었습니다. 이 게시물에서 제 질문을 부적절하게 표현한 것에 대해 사과드립니다. 이 포럼의 모든 사람이 영어를 모국어로 사용하는 것은 아닙니다. 완전성을 위해 다음을 수행합니다.
귀하의 의견:
JSL의 'Vec Quadratic()'을 복제하는 방법을 묻는 대신 ...
내 원래 질문:
Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?
기분을 상하게 하는 것이 "재생산"의 사용입니까?
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?... 행렬 조작에 몇 가지 문제가 있다는 것을 알게 되었습니다.:)
대괄호를 조정하면 다음을 얻을 수 있습니다.
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: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?@Ressel 귀하의 요청에서 혼란스러운 부분은 Vec Quadratic()이 단순히 스크립팅 인덱스에 설명된 대로 행렬 수학을 수행한다는 것입니다. Vec Quadratic()의 결과는 단순히 행렬 연산의 출력입니다.
95% 값을 제공하는 공식 자체는 Fit Y by X 플랫폼에 의해 생성됩니다. 'Fit y By X'는 플롯을 만드는 역할도 담당합니다. 그래서 제가 이해하는 질문은 더 정확합니다. Python 또는 numpy에서 신뢰 수준을 사용하여 y By x의 이변량 맞춤을 어떻게 수행합니까?
Vec Quadratic()은 공식이나 상수를 생성하지 않았기 때문에 잘못된 초점이라고 생각합니다. 이는 생성된 공식의 수학적 연산일 뿐입니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?@Paul_Nelson , 이것은 정확합니다. 나중에 알아 낸 것입니다 (그리고 내 답변을 해결책으로 받아들이기 위해 뻔뻔스럽게 악용했습니다). 이것과 질문의 정확한 문구에 관해서는 솔직히 내 마음에 없었습니다. 더 많이 배울수록... 공유해 주셔서 정말 감사하고 즐거운 주말 보내세요.
(시: 정교하고 통계적인 소프트웨어 회사라면 계산 능력이 비즈니스 모델의 일부가 아닌 엔지니어에게 거의 의존할 것입니다. 좋든 나쁘든.)
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?Python용 Jmp의 개방성에 박수를 보냅니다.:)
@Paul_Nelson이 언급했듯이 이제 Jmp18을 사용하면 JMP에 기능이 누락된 경우 모든 사용자가 Python에서 2~3줄의 코드만으로 해당 기능을 쉽게 가져올 수 있습니다. 놀랍도록 유용합니다!
반면에 행렬 조작, DOE, 회귀, 신경망 등에 대한 일부 Wikipedia 지식은 "도난"될 염려가 없습니다.
최신 Python 패키지에서 제공되는 "기능"을 통해 JMP를 대표하는 것은 "소프트 스킬", 버그 없음, 직관적인 인터페이스, 뛰어난 사용자 경험이 될 것입니다. 경쟁업체와 분리하세요.
Re: 위시리스트 - 새 라벨: 사용자 경험
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?아마도
NormalContour = sqrt(ChiSquare Quantile( 0.95, 2 ));
Ellipse 의 아이디어가 올바른 방향을 제시해 줄 것입니다. 저는 통계가 아닌 사진을 찍기 때문에 멀리 있을 수도 있습니다. 하지만 타원 그림을 만들려면 비슷한 질문에 대답해야 했습니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?Copilot에게 묻는다면:

Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?더욱이 JMP를 통해 데이터 분석 및 자동화 작업을 시작하는 사용자가 Python이나 해당 문제에 대한 다른 프로그래밍 및 스크립팅 언어를 제대로 이해하지 못하는 것은 당연하다고 생각합니다. JMP는 이러한 유형의 사용자를 적극적으로 모집하려고 노력하고 있으며 JSL에서 스크립팅을 쉽게 시작할 수 있도록 하고 있습니다. 그러나 일단 사용자가 개발하고 학습하면, 적어도 어떤 경우에는 몇 가지 기본적인 계산 개념을 이해해야 하는 초기 장벽이 극복된 후에 추가 지식에 대한 욕구가 촉발될 것으로 예상할 수 있습니다. 물론 이런 종류의 사용자가 가장 먼저 직감하는 것은 커뮤니티에 도움을 요청하는 것입니다. 특히 JMP 18에 Python이 통합된 이후에는 더욱 그렇습니다. 마지막으로, 전문 데이터 과학자가 일반 통계학자가 JMP에서 개발한 내용을 복사하는 임무를 맡게 된다는 사실입니다. 실제 비즈니스 환경에서 사용하는 것은 그 자체로 의미가 있습니다. 하지만 내가 모든 것을 잘못 알고 있을 수도 있습니다.
Re: 장기적 관점: Vec Quadratic() 결과를 재현하기 위해 numpy.polyfit을 사용하는 방법은 무엇입니까?관심이 있는 분이라면 아래 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()