ผลรวมของสี่เหลี่ยมจัตุรัส Type III


9

ผมมีรูปแบบการถดถอยเชิงเส้นกับหนึ่งเด็ดขาดตัวแปร(ชายและหญิง) และเป็นหนึ่งในตัวแปรอย่างต่อเนื่องBAB

options(contrasts=c("contr.sum","contr.poly"))ฉันจะตั้งค่ารหัสความแตกต่างในการวิจัยกับ และตอนนี้ผมมีเงินก้อนประเภทที่สามของสี่เหลี่ยมสำหรับ, , และการมีปฏิสัมพันธ์ของพวกเขา (A: B) ด้วยABdrop1(model, .~., test="F")

สิ่งที่ฉันติดอยู่กับเป็นวิธีผลรวมของสี่เหลี่ยมที่มีการคำนวณสำหรับBฉันBsum((predicted y of the full model - predicted y of the reduced model)^2)คิดว่ามันเป็น y~A+A:Bลดรูปแบบจะมีลักษณะ แต่เมื่อฉันใช้predict(y~A+A:B)R จะส่งคืนค่าที่คาดการณ์ซึ่งเหมือนกับค่าแบบจำลองที่ทำนายไว้ทั้งหมด ดังนั้นผลบวกของกำลังสองจะเป็น 0

(สำหรับผลบวกของกำลังสองของฉันใช้รูปแบบที่ลดลงของซึ่งเหมือนกับ)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
อะไรทำให้คุณต้องการการทดสอบประเภท III ("วุฒิสภาสหรัฐอเมริกา") ซึ่งแตกต่างจากการทดสอบประเภท II ("สภาผู้แทนราษฎรแห่งสหรัฐอเมริกา") (การเปรียบเทียบเกิดจาก Paul Gallo, Novartis)
Frank Harrell

รหัสช่วยอะไรได้บ้าง
Jo Lewis

คำตอบ:


3

ฉันพบความแตกต่างในการประมาณค่า regressors ระหว่าง R 2.15.1 และ SAS 9.2 แต่หลังจากอัปเดต R เป็น 3.0.1 แล้วผลลัพธ์ก็เหมือนกัน ดังนั้นก่อนอื่นฉันแนะนำให้คุณอัปเดต R เป็นเวอร์ชันล่าสุด

คุณกำลังใช้วิธีการที่ผิดเพราะคุณกำลังคำนวณผลรวมของรูปสี่เหลี่ยมจัตุรัสกับแบบจำลองที่แตกต่างกันสองแบบซึ่งหมายถึงเมทริกซ์การออกแบบที่แตกต่างกันสองแบบ สิ่งนี้นำคุณไปสู่การประมาณค่าที่แตกต่างกันโดยสิ้นเชิงใน regressors ที่ใช้โดย lm () เพื่อคำนวณค่าที่คาดการณ์ไว้ (คุณกำลังใช้ regressors ที่มีค่าต่างกันระหว่างสองรุ่น) SS3 คำนวณจากการทดสอบไฮโปซิสโดยสมมติว่ารีจีสเตอร์ปรับสภาพทั้งหมดมีค่าเท่ากับศูนย์ในขณะที่รีจีสเตอร์ปรับสภาพเท่ากับ 1 สำหรับการคำนวณคุณใช้เมทริกซ์การออกแบบเดียวกับที่ใช้ประเมินโมเดลเต็ม แบบ โปรดจำไว้ว่า SS3s ไม่ได้เติมเต็ม ซึ่งหมายความว่าหากคุณรวม SS3 โดยประมาณคุณจะไม่ได้รับโมเดล SS (SSM)

ที่นี่ฉันขอแนะนำให้ใช้งาน R ของคณิตศาสตร์ที่ใช้อัลกอริทึม GLS ที่ใช้ในการประเมิน SS3 และ regressors

ค่าที่สร้างโดยรหัสนี้จะเหมือนกับที่สร้างขึ้นโดยใช้ SAS 9.2 สำหรับผลลัพธ์ที่คุณให้ในรหัสของคุณในขณะที่ SS3 (B | A, AB) คือ 0.167486 แทนที่จะเป็น 0.15075 ด้วยเหตุนี้ฉันแนะนำอีกครั้งเพื่ออัปเดตเวอร์ชัน 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.