제 III 유형의 제곱합


9

범주 형 변수가 하나 인 선형 회귀 모형이 있습니다. A(남녀) 및 하나의 연속 변수 .B

R에서 대비 코드를로 설정했습니다 options(contrasts=c("contr.sum","contr.poly")). 이제 , 및을 사용하여 상호 작용 (A : B)에 대한 Type III 제곱합이 있습니다.ABdrop1(model, .~., test="F")

내가 붙어있는 것은 의 제곱합이 계산되는 방법 입니다. 나는B 그것이 생각합니다 sum((predicted y of the full model - predicted y of the reduced model)^2). 축소 된 모델은 다음과 같습니다 y~A+A:B. 그러나을 사용할 때 predict(y~A+A:B)R은 전체 모델 예측 값과 동일한 예측 값을 반환합니다. 따라서 제곱의 합은 0이됩니다.

(제곱의 합 들어 , I는 감소 된 이용 모델 과 동일하다 .)Ay~B+A:By~A:B

무작위로 생성 된 데이터의 예제 코드는 다음과 같습니다.

A<-as.factor(rep(c("male","female"), each=5))
set.seed(1)
B<-runif(10)
set.seed(5)
y<-runif(10)

model<-lm(y~A+B+A:B)

options(contrasts = c("contr.sum","contr.poly"))

#type3 sums of squares
drop1(model, .~., test="F")
#or same result:
library(car)
Anova(lm(y~A+B+A:B),type="III")

#full model
predFull<-predict(model)

#Calculate sum of squares
#SS(A|B,AB)
predA<-predict(lm(y~B+A:B))
sum((predFull-predA)^2) 

#SS(B|A,AB) (???)
predB<-predict(lm(y~A+A:B))
sum((predFull-predB)^2) 
#Sums of squares should be 0.15075 (according to anova table)
#but calculated to be 2.5e-31

#SS(AB|A,B)
predAB<-predict(lm(y~A+B))
sum((predFull-predAB)^2)


#Anova Table (Type III tests)
#Response: y
#             Sum Sq Df F value Pr(>F)
#(Intercept) 0.16074  1  1.3598 0.2878
#A           0.00148  1  0.0125 0.9145
#B           0.15075  1  1.2753 0.3019
#A:B         0.01628  1  0.1377 0.7233
#Residuals   0.70926  6    

1
좋은 질문이며 답이 어떻게 생겼는지에 대한 아이디어가 있습니다. 그러나 재현 가능한 예가 없으면 시간을 투자하지 않습니다. OP, 전달!
Henrik

1
유형 II ( "미국 하원") 시험과 달리 유형 III ( "미국 상원") 시험을 원하는 이유는 무엇입니까? (노바티스의 Paul Gallo로 인한 분석)
Frank Harrell

코드가 도움이 되나요?
Jo Lewis

답변:


3

R 2.15.1과 SAS 9.2 사이의 회귀 변수 추정에서 차이점을 발견했지만 R을 3.0.1 버전으로 업데이트 한 후 결과는 동일했습니다. 먼저 R을 최신 버전으로 업데이트하도록 제안합니다.

두 가지 모델에 대해 제곱합을 계산하기 때문에 잘못된 접근 방식을 사용하고 있습니다. 이는 두 가지 디자인 매트릭스를 의미합니다. 이로 인해 예측 값을 계산하기 위해 lm ()에 의해 사용 된 회귀 분석기에서 완전히 다른 추정값을 얻을 수 있습니다 (두 모델간에 다른 값을 갖는 회귀 분석기를 사용합니다). SS3은 모든 컨디셔닝 회귀 분석기가 0이고 컨디셔닝 회귀 분석기가 1과 같다는 가정하에 가정 된 테스트에 기초하여 계산됩니다. 모델. SS3는 완전 첨가제가 아닙니다. 즉, 추정 SS3을 합하면 모델 SS (SSM)를 얻지 못합니다.

여기서는 SS3 및 회귀자를 추정하는 데 사용되는 GLS 알고리즘을 구현하는 수학의 R 구현을 제안합니다.

이 코드에서 생성 된 값은 SAS 9.2를 사용하여 코드에서 제공 한 결과와 정확히 동일하게 생성되는 반면 SS3 (B | A, AB)는 0.15075 대신 0.167486입니다. 이러한 이유로 R 버전을 최신 버전으로 다시 업데이트하는 것이 좋습니다.

도움이 되었기를 바랍니다 :)

A<-as.factor(rep(c("male","female"), each=5))
set.seed(1)
B<-runif(10)
set.seed(5)
y<-runif(10)


# Create a dummy vector of 0s and 1s
dummy <- as.numeric(A=="male")

# Create the design matrix
R <- cbind(rep(1, length(y)), dummy, B, dummy*B)

# Estimate the regressors
bhat <- solve(t(R) %*% R) %*% t(R) %*% y
yhat <- R %*% bhat
ehat <- y - yhat

# Sum of Squares Total
# SST <- t(y)%*%y - length(y)*mean(y)**2
# Sum of Squares Error
# SSE <- t(ehat) %*% ehat
# Sum of Squares Model
# SSM <- SST - SSE

# used for ginv()
library(MASS)

# Returns the Sum of Squares of the hypotesis test contained in the C matrix
SSH_estimate <- function(C)
{
    teta <- C%*%bhat
    M <- C %*% ginv(t(R)%*%R) %*% t(C)
    SSH <- t(teta) %*% ginv(M) %*% teta
    SSH
}

# SS(A|B,AB)
# 0.001481682
SSH_estimate(matrix(c(0, 1, 0, 0), nrow=1, ncol=4))
# SS(B|A,AB)
# 0.167486
SSH_estimate(matrix(c(0, 0, 1, 0), nrow=1, ncol=4))
# SS(AB|A,B)
# 0.01627824
SSH_estimate(matrix(c(0, 0, 0, 1), nrow=1, ncol=4))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.