Loại III tổng bình phương


9

Tôi có một mô hình hồi quy tuyến tính với một biến phân loại (nam & nữ) và một biến liên tục .MộtB

Tôi thiết lập mã tương phản trong R với options(contrasts=c("contr.sum","contr.poly")). Và bây giờ tôi có các tổng bình phương loại III cho , và tương tác của chúng (A: B) bằng cách sử dụng .MộtBdrop1(model, .~., test="F")

Những gì tôi đang mắc kẹt với là cách tổng các bình phương được tính cho . TôiB nghĩ rằng nó là sum((predicted y of the full model - predicted y of the reduced model)^2). Các mô hình giảm sẽ trông như thế nào y~A+A:B. Nhưng khi tôi sử dụng predict(y~A+A:B), R sẽ trả về các giá trị dự đoán giống với các giá trị dự đoán của mô hình đầy đủ. Do đó, tổng bình phương sẽ là 0.

(Đối với các tổng bình phương của , tôi đã sử dụng mô hình rút gọn , giống như .)Mộty~B+A:By~A:B

Dưới đây là mã ví dụ cho dữ liệu được tạo ngẫu nhiên:

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
Đó là một câu hỏi hay và tôi có một số ý tưởng về cách một câu trả lời có thể trông như thế nào. Nhưng không có ví dụ tái sản xuất, tôi không đầu tư thời gian của mình. OP, giao hàng!
Henrik

1
Điều gì khiến bạn muốn xét nghiệm loại III ("Thượng viện Hoa Kỳ") trái ngược với xét nghiệm loại II ("Hạ viện Hoa Kỳ")? (tương tự do Paul Gallo, Novartis)
Frank Harrell

mã có giúp gì không?
Jo Lewis

Câu trả lời:


3

Tôi đã tìm thấy sự khác biệt trong ước tính các biến hồi quy giữa R 2.15.1 và SAS 9.2, nhưng sau khi cập nhật phiên bản R lên 3.0.1, kết quả vẫn như nhau. Vì vậy, trước tiên tôi cố gắng cập nhật R lên phiên bản mới nhất.

Bạn đang sử dụng sai phương pháp vì bạn đang tính tổng bình phương theo hai mô hình khác nhau, ngụ ý hai ma trận thiết kế khác nhau. Điều này dẫn bạn đến ước lượng hoàn toàn khác nhau trong các biến hồi quy được sử dụng bởi lm () để tính các giá trị dự đoán (bạn đang sử dụng các biến hồi quy với các giá trị khác nhau giữa hai mô hình). SS3 được tính toán dựa trên thử nghiệm hypoteis, giả sử rằng tất cả các biến hồi quy điều hòa đều bằng 0, trong khi đó, hồi quy điều hòa bằng 1. Đối với các phép tính, bạn sử dụng cùng một ma trận thiết kế được sử dụng để ước lượng mô hình đầy đủ, như đối với biến hồi quy ước tính trong toàn bộ mô hình. Hãy nhớ rằng SS3 không phải là phụ gia đầy đủ. Điều này có nghĩa là nếu bạn tính tổng SS3 ước tính, bạn không có được mô hình SS (SSM).

Ở đây tôi đề nghị triển khai R toán học thực hiện thuật toán GLS được sử dụng để ước tính SS3 và các biến hồi quy.

Các giá trị được tạo bởi mã này hoàn toàn giống với được tạo bằng cách sử dụng SAS 9.2 như đối với kết quả bạn đã cung cấp trong mã của mình, trong khi SS3 (B | A, AB) là 0.167486 thay vì 0.15075. Vì lý do này, tôi đề nghị một lần nữa cập nhật phiên bản R của bạn lên phiên bản mới nhất hiện có.

Hi vọng điêu nay co ich :)

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.