변수별 선형 회귀의 모수 추정값 저장세 번째 열로 그룹화된 2개 열의 선형 회귀를 수행하려고 하는데 중단되었습니다. 해당 행에 대한 기울기가 있는 열과 해당 행에 대한 절편이 있는 다른 열이 필요합니다.
짧은 배경:
저는 각각 13가지 다른 수준의 산으로 테스트된 30,000가지의 다양한 제제를 가지고 있습니다. 나는 산 농도의 함수로서 pH의 기울기를 이해하고 싶습니다. 내 범위(및 목적)에 따라 선형 회귀로 이를 수행할 수 있습니다.
내 데이터 테이블은 이와 같이 설정되어 있지만 총 390,000개의 행에 대해 30,000개의 공식 콤보와 13개의 산 수준이 있습니다.
| 공식 |
산성도 |
pH |
|---|
콤보A
|
5 |
6.7 |
| 콤보B |
5 |
6.75 |
| 콤보C |
5 |
6.5 |
| 콤보A |
10 |
6.4 |
| 콤보B |
10 |
6.45 |
나는 Fit Y by X로 플롯하고 데이터를 그룹화한 다음 선형 피팅을 추가할 수 있다는 것을 알고 있습니다. 하지만 1) 30,000개의 그룹을 사용하면 시간이 오래 걸리고 2) 해당 보고서에서 기울기를 끌어내는 것이 고통스럽습니다.
나는 현재 "산성 수준"으로 테이블을 분할하고 "pH"를 분할하고 "공식"을 유지하고 있습니다. 나는 이와 같은 것을 알고 있으며 올바른 2개의 열을 채울 수 있는 방법을 원합니다.
| 공식 |
pH 5 |
pH 10 |
pH 15 |
pH 20 |
경사 |
인터셉트 |
|---|
| 콤보A |
데이터 |
데이터 |
데이터 |
데이터 |
|
|
| 콤보B |
데이터 |
데이터 |
데이터 |
데이터 |
|
|
| 콤보C |
데이터 |
데이터 |
데이터 |
데이터 |
|
|
첫 번째 선호는 공식을 사용하는 것입니다. 스크립트를 작성해야 한다면 그렇게 할 수도 있습니다.
감사해요
Re: 열 기준 데이터 세트의 선형 회귀<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />표현식을 계산하는 방법은 다음과 같습니다.
SS_TOT = 합( i = 1, N 행( dt1 ), (열( dt1, k )) - 평균) ^ 2 / N 행( dt1 ) );
그러나 모든 열 "k"에 대해 계산이 이루어집니다.
그룹 분리를 어떻게 포함할 수 있는지에 대한 힌트가 있나요?
SS_TOT[gp#1] / SS_TOT[gp#2] ...
Re: 열별 데이터 세트의 선형 회귀이 주제로 다시 돌아오겠습니다.
나는 모든 조작을 이해하고 내 데이터에 적용할 수 있지만 다음 부분에 대해서는 여전히 매우 명확하지 않습니다.
베타 = J(ng, 2, .);
(g=1, g <= ng, g++,
thisGroup = Loc(그룹ID == g);
beta[g, 0] = Transpose(Inv(xVals[thisGroup, 0]`*xVals[thisGroup, 0])*xVals[thisGroup, 0]`*yVals[thisGroup]);
);
베타 매트릭스가 생성되고 모든 데이터가 새 테이블에서 대체된다는 점을 제외하고는 무슨 일이 일어나고 있는지 파악할 수 없습니다.
이 점을 이해하도록 도와주실 수 있나요?
Re: 열 기준 데이터 세트의 선형 회귀마지막 댓글을 고려해 확인해보겠습니다. 고마워요 이안
Re: 열 기준 데이터 세트의 선형 회귀위와 같이 각 그룹에 대한 적합 계수가 있으면 예측 값을 얻을 수 있으므로 잔차와 잔차 제곱합(각 그룹에 대한)을 얻을 수 있습니다. (각 그룹에 대한) 총 제곱합도 쉬우므로 다음을 얻는 데 필요한 모든 것이 있습니다. R 제곱 (각 그룹마다).
하지만 JSL에 더 많은 조작을 추가하면 시간이 더 오래 걸린다는 점을 명심하세요(이 경우 플랫폼을 사용하는 것보다 여전히 빠르지만). 물론 누군가는 코드를 작성하고 검증해야 합니다!
Re: 열 기준 데이터 세트의 선형 회귀이안
매트릭스를 사용한 좋은 접근 방식입니다. 감사합니다.
Rsquare도 얻을 수 있는 방법이 있나요?
Re: 열 기준 데이터 세트의 선형 회귀우연히도 선형 회귀가 필요하고 매개변수만 원하는 경우 JSL이 훨씬 빠르다는 점을 지적하려고 했습니다. 아래 코드는 내 노트북에서 약 100초 정도 걸렸습니다.
이름DefaultTo여기 ( 1 ) ;
// 그룹화된 데이터 만들기
GS = 10 ; // 그룹 크기
ng = 30000 ; // 그룹 수
그룹ID = 오름차순 정렬 ( 반복하다 (( 1 :: ng ) `, GS )) ;
xVals = 제이 ( Nrow ( 그룹ID ) , 1 , 랜덤보통 ()) ;
yVal = 제이 ( Nrow ( 그룹ID ) , 1 , 랜덤보통 ()) ;
// 테이블에 데이터 넣기
dt1 = 새 테이블 ( "그룹화된 회귀 데이터" ,
새열 ( "그룹" , 숫자 , 명사 같은 , 가치 ( 그룹ID )) ,
새열 ( "엑스" , 숫자 , 마디 없는 , 가치 ( xVals )) ,
새열 ( "와이" , 숫자 , 마디 없는 , 가치 ( yVal )) ,
) ;
// Fit Y By X를 사용하여 피팅을 수행하려면 이 블록의 주석 처리를 해제하세요.
/*
// Y를 X로 맞추기 사용
fxy = dt1 << Bivariate(Y( :y ), X( x ), Fit Line( {Line Color( {208, 64, 86} )} ), By(:Group));
// pfitted 매개변수를 테이블로 가져옵니다.
// (이 작업을 대화형으로 수행하려면 보고서의 매개변수 추정 테이블을 마우스 오른쪽 버튼으로 클릭하고 '결합된 데이터 테이블 만들기'를 선택하세요.)
fxyRep = fxy << 보고서;
dt2 = fxyRep[1][TableBox(3)] << makeCombinedDataTable;
// dt2 분할
dt3 = dt2 << Split(Split By( :Term ), Split( :Estimate ), Group( :Group ), 나머지 열( 모두 삭제 ));
dt3 << setName("Y를 X로 피팅한 매개변수 추정값");
닫기(dt2, noSave);
*/
/// 플랫폼을 우회하여 JSL에서 선형 회귀를 수행합니다. . .
// (1) 테이블에서 데이터를 가져옵니다.
xVals = 열 ( dt1 , "엑스" ) << getAsMatrix ;
yVal = 열 ( dt1 , "와이" ) << getAsMatrix ;
그룹ID = 열 ( dt1 , "그룹" ) << getAsMatrix ;
// (2) 디자인 행렬에 단위 벡터를 추가합니다.
xVals = 제이 ( Nrow ( xVals ) , 1 , 1 ) || xVals ;
// (3) 각 그룹에 대해 선형 회귀를 수행하고 결과를 저장합니다.
베타 = 제이 ( ng , 2 , . ) ;
~을 위한 ( g = 1 , g <= ng , g ++,
이 그룹 = 위치 ( 그룹ID == g ) ;
베타 [ g , 0 ] = 바꾸어 놓다 ( 인보이스 ( xVals [ 이 그룹 , 0 ] `* xVals [ 이 그룹 , 0 ]) * xVals [ 이 그룹 , 0 ] `* yVal [ 이 그룹 ]) ;
) ;
// (4) 결과 테이블을 만듭니다.
dt4 = 테이블로 ( 베타 ) ;
dt4 << 세트이름 ( "JSL의 매개변수 추정" ) ;
열 ( dt4 , "콜1" ) << 세트이름 ( "인터셉트" ) ;
열 ( dt4 , "콜2" ) << 세트이름 ( "엑스" ) ;
Re: 열 기준 데이터 세트의 선형 회귀Peter의 대본이 도움이 될 것입니다.그러나 참고로 JSL이 아닌 JMP로 이 작업을 수행하려는 경우(일회성 분석인지 여부에 따라 시간이 많이 소요되는 경우가 많습니다) yxx에 맞추면 다음과 같이 할 수 있습니다. 적합선을 브로드캐스트하고 필요한 경우 커피 한 잔을 마시고 JMP 실행이 끝나면 모수 추정 테이블 중 하나를 마우스 오른쪽 버튼으로 클릭하고 "결합된 데이터 테이블 만들기"를 선택하여 추정값이 포함된 테이블을 만듭니다.스크립트 없이 Peter의 스크립트를 실행하는 방법입니다.
Re: 열 기준 데이터 세트의 선형 회귀Ian Cox의 게시물에서 대부분의 관련 코드를 얻었습니다. 여기 .이렇게 하면 분석이 수행되고 모든 기울기와 절편이 테이블에 표시됩니다.
dt = 새 테이블 ( "샘플 데이터" , 행 추가 ( 6 ) ,
새 열 ( "공식" , 성격 , 명사 같은 ,
값 설정 ( { "콤보A" , "콤보씨" , "콤보B" , "콤보씨" , "콤보A" , "콤보B" } )
) ,
새 열 ( "산성 수준" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) ,
값 설정 ( [ 5 , 15 , 5 , 5 , 10 , 10 ] )
) ,
새 열 ( "pH" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) ,
값 설정 ( [ 6.7 , 4.8 , 6.75 , 6.5 , 6.4 , 6.45 ] )
)
) ;
// Fit Y by X 실행
bv = dt << 이변량 (
와이 ( : pH ) ,
엑스 ( : 산성도 ) ,
적합선 ( { 선 색상 ( { 213 , 72 , 87 } )} ) ,
에 의해 ( : 공식 )
) ;
// 보고서 레이어에 대한 참조: bivREp도 목록입니다.
bivRep = bv << 보고서 ;
// 'Make Combined Data Table'을 사용하면 'bivRep'의 각 항목에 메시지를 보낼 필요가 없습니다.
dt2 = bivRep [ 1 ] [ 테이블박스 ( 삼 )] << 결합된 데이터 테이블 만들기 ;
Re: 열에 의한 데이터 세트의 선형 회귀JSL을 실행하는 것은 대규모 데이터 세트와 대규모 #groupID에 매우 유용합니다. 숫자가 아닌 groupID를 반복하는 방법이 있습니까?
물론 숫자가 아닌 GroupID를 저장할 열도 필요합니다.