회귀에 대한 다항식 대비


18

회귀 피팅에서 다항식 대비의 사용법을 이해할 수 없습니다. 특히, 나는 이 페이지에R 설명 된 간격 변수 (똑같이 간격이있는 수준의 일반 변수)를 표현하기 위해 사용되는 인코딩을 언급하고 있습니다.

해당 페이지 의 예에서 , 내가 올바르게 이해하면 R은 구간 변수에 대한 모형을 적합하고 선형, 2 차 또는 3 차 추세에 가중치를 부여하는 일부 계수를 반환합니다. 따라서 적합 모델은 다음과 같아야합니다.

write=52.7870+14.2587X0.9680X20.1554X3,

여기서 는 간격 변수의 다른 수준에 따라 값 1 , 2 , 3 또는 4 를 가져와야합니다.X1234

이 올바른지? 그렇다면, 다항식 대비의 목적은 무엇입니까?


7
아닙니다. 이러한 계수는 직교 다항식 항에 대한 것입니다 . 원시 다항식 항에 대한 모형을 작성했습니다 . 교체 , X 2 , X 3 의 값, L , Q , C 각각을 (룩업 테이블). XX2X3LQC
Scortchi-Monica Monica 복원

1
@Scortchi님께, 답장을 보내 주셔서 감사합니다. 나는 당신이 의미하는 바를 이해한다고 생각하지만, 이러한 직교 다항식 용어가 어떻게 작동하는지 솔직히 이해하지 못했습니다. : P
Pippo

1
표기법 문제로서, 당신이 가진 것은 적합하지 않은 모델입니다. 쓰기의 예상 값 또는 쓰기의 예상 값을 의미하는 쓰기 (또는 E [write])에 대한 거대한 '모자'가 필요합니다. 또는 잔차를 나타 내기 위해 끝에 '+ e'가 필요합니다.
gung-복직 모니카

@Scortchi "조회 테이블"이란 무엇입니까?
Antoni Parellada

2
@AntoniParellada : 그것은 방공호에 링크 된 페이지에있는 테이블의 : ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL . & contr.polyR.
Scortchi-Reinstate Monica

답변:


31

요약하자면 (그리고 미래에 OP 하이퍼 링크가 실패 할 경우) 다음 hsb2과 같은 데이터 세트 를 보고 있습니다 .

   id     female race ses schtyp prog read write math science socst
1  70        0    4   1      1    1   57    52   41      47    57
2 121        1    4   2      1    3   68    59   53      63    61
...
199 118      1    4   2      1    1   55    62   58      58    61
200 137      1    4   3      1    2   63    65   65      53    61

여기에서 가져올 수 있습니다 .

변수 read를 순서 / 순서 변수로 바꿉니다.

hsb2$readcat<-cut(hsb2$read, 4, ordered = TRUE)
(means = tapply(hsb2$write, hsb2$readcat, mean))
 (28,40]  (40,52]  (52,64]  (64,76] 
42.77273 49.97849 56.56364 61.83333 

이제 우리는 모두 정규 분산 분석을 실행하도록 설정되었습니다. 예, R입니다. 기본적으로 연속적인 종속 write변수와 여러 수준의 설명 변수가 있습니다 readcat. R에서는 사용할 수 있습니다lm(write ~ readcat, hsb2)


1. 대비 매트릭스 생성

readcatn1=3

table(hsb2$readcat)

(28,40] (40,52] (52,64] (64,76] 
     22      93      55      30 

먼저 돈을 벌고 내장 R 기능을 살펴 보겠습니다.

contr.poly(4)
             .L   .Q         .C
[1,] -0.6708204  0.5 -0.2236068
[2,] -0.2236068 -0.5  0.6708204
[3,]  0.2236068 -0.5 -0.6708204
[4,]  0.6708204  0.5  0.2236068

이제 후드 아래에서 무슨 일이 있었는지 해보자.

scores = 1:4  # 1 2 3 4 These are the four levels of the explanatory variable.
y = scores - mean(scores) # scores - 2.5

y=[1.5,0.5,0.5,1.5]

seq_len(n) - 1=[0,1,2,3]

n = 4; X <- outer(y, seq_len(n) - 1, "^") # n = 4 in this case

[11.52.253.37510.50.250.12510.50.250.12511.52.253.375]

outer(a, b, "^")ab(1.5)0(0.5)00.501.50(1.5)1(0.5)10.511.51(1.5)2=2.25(0.5)2=0.250.52=0.251.52=2.25(1.5)3=3.375(0.5)3=0.1250.53=0.1251.53=3.375

QRc_Q = qr(X)$qr

[202.500.52.23604.5840.50.447200.50.8940.92961.342]

z = c_Q * (row(c_Q) == col(c_Q))RQR

raw = qr.qy(qr(X), z)Qqr(X)$qrQQ = qr.Q(qr(X))QzQ %*% z

QRQz

Matrix of Eigenvalues of R
     [,1]      [,2] [,3]      [,4]
[1,]   -2  0.000000    0  0.000000
[2,]    0 -2.236068    0  0.000000
[3,]    0  0.000000    2  0.000000
[4,]    0  0.000000    0 -1.341641

QR

Before QR factorization operations (orthogonal col. vec.)
     [,1] [,2] [,3]   [,4]
[1,]    1 -1.5 2.25 -3.375
[2,]    1 -0.5 0.25 -0.125
[3,]    1  0.5 0.25  0.125
[4,]    1  1.5 2.25  3.375


After QR operations (equally orthogonal col. vec.)
     [,1] [,2] [,3]   [,4]
[1,]    1 -1.5    1 -0.295
[2,]    1 -0.5   -1  0.885
[3,]    1  0.5   -1 -0.885
[4,]    1  1.5    1  0.295

마지막으로 (Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))행렬 raw직교 법선 벡터 로 변환합니다 .

Orthonormal vectors (orthonormal basis of R^4)
     [,1]       [,2] [,3]       [,4]
[1,]  0.5 -0.6708204  0.5 -0.2236068
[2,]  0.5 -0.2236068 -0.5  0.6708204
[3,]  0.5  0.2236068 -0.5 -0.6708204
[4,]  0.5  0.6708204  0.5  0.2236068

이 함수는 "/"각 요소를 열 단위로 ( )를 로 나누어 행렬을 "정규화"합니다.col.xi2(i) apply(raw, 2, function(x)sqrt(sum(x^2)))2 2.236 2 1.341(ii)(i)

R4contr.poly(4)

[0.67082040.50.22360680.22360680.50.67082040.22360680.50.67082040.67082040.50.2236068]

(sum(Z[,3]^2))^(1/4) = 1z[,3]%*%z[,4] = 0scores - mean123


2. 설명 변수의 수준 간 차이를 설명하는 데 어떤 대비 (열)가 크게 기여합니까?

ANOVA를 실행하고 요약을 볼 수 있습니다 ...

summary(lm(write ~ readcat, hsb2))

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  52.7870     0.6339  83.268   <2e-16 ***
readcat.L    14.2587     1.4841   9.607   <2e-16 ***
readcat.Q    -0.9680     1.2679  -0.764    0.446    
readcat.C    -0.1554     1.0062  -0.154    0.877 

... readcaton 의 선형 효과가 있음 을 write확인하여 원래 값 (포스트 시작 부분의 세 번째 코드 청크)을 다음과 같이 재현 할 수 있습니다.

coeff = coefficients(lm(write ~ readcat, hsb2))
C = contr.poly(4)
(recovered = c(coeff %*% c(1, C[1,]),
               coeff %*% c(1, C[2,]),
               coeff %*% c(1, C[3,]),
               coeff %*% c(1, C[4,])))
[1] 42.77273 49.97849 56.56364 61.83333

... 또는 ...

여기에 이미지 설명을 입력하십시오

또는 훨씬 더 나은 ...

여기에 이미지 설명을 입력하십시오

i=1tai=0a1,,at

여기에 이미지 설명을 입력하십시오

X0,X1,.Xn

그래픽 적으로 이해하기가 훨씬 쉽습니다. 큰 정사각형 검은 색 블록의 그룹 별 실제 평균을 미리 지정된 값과 비교하고 2 차 및 3 차 다항식의 기여도가 가장 적은 직선 근사 (왜곡 만 근사한 곡선 만 있음)가 최적인지 확인하십시오.

여기에 이미지 설명을 입력하십시오

효과를 위해 ANOVA의 계수가 다른 근사치 (2 차 및 3 차)에 대한 선형 대비에 대해 큰 경우, 다음의 무의미한 플롯은 각 "기여"의 다항식 플롯을 더 명확하게 나타냅니다.

여기에 이미지 설명을 입력하십시오

코드는 여기에 있습니다 .


와우 +1 이 답변 (지금까지 끝까지 읽지 못했습니다)을 이전의 잊혀진 질문에 대한 답변으로 볼 수 있습니까 stats.stackexchange.com/q/63639/3277 ?
ttnphns

(+1) @ttnphns : 아마도 더 잘 맞을 것입니다.
Scortchi-Monica Monica 복원

팁 : 당신은 여기에 대한 링크로 저에게 의견을 남기고 싶을 수도 있습니다. 또는 거기에 대답을 드리겠습니다.
ttnphns

1
@ttnphns와 @Scortchi 감사합니다! 나는이 개념들을 이해하려고 꽤 많은 시간을 보냈으며 많은 반응을 기대하지 않았다. 매우 긍정적 인 놀라움입니다. 나는 qr.qy()기능 을 설명하는 데 약간의 주름이 있다고 생각 하지만, 시간이 생기 자마자 당신의 질문에 대해 최소한 일관된 말을 할 수 있는지 확실히 노력할 것입니다.
Antoni Parellada

1
@Elvis 나는 좋은 요약 문장을 선택하여 게시물의 어딘가에 배치하려고했습니다. 나는 이것이 좋은 점이라고 생각하고 좋은 수학적 설명을 요구하지만,이 시점에서 더 자세히 설명하기에는 너무 많은 것일 수 있습니다.
Antoni Parellada

5

나는 당신의 예를 사용하여 그것이 어떻게 작동하는지 설명 할 것입니다. 4 개의 그룹에 다항식 대비를 사용하면 다음과 같은 결과가 나타납니다.

Ewrite1=μ0.67L+0.5Q0.22CEwrite2=μ0.22L0.5Q+0.67CEwrite3=μ+0.22L0.5Q0.67CEwrite4=μ+0.67L+0.5Q+0.22C

readi

Ewritei=μ+readiL+readi2Q+readi3C

L,Q,Cβ1,β2,β3L,Q,Creadi,readi2,readi3LQC

μ,L,Q,C

μ^=52.79,L^=14.26,Q^=0.97,C^=0.16
μ^=14i=14Ewriteiμ^,L^,Q^,C^

L^

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.