タイプIIIの二乗和


9

私は、1つのカテゴリー変数(男性と女性)と1つの連続変数を持つ線形回帰モデルを持っています。AB

Rのコントラストコードをで設定しましたoptions(contrasts=c("contr.sum","contr.poly"))。そして今、私は、タイプIIIの二乗和と、を使用したそれらの相互作用(A:B)があります。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になります。

(の二乗和には、の縮小モデルを使用しました。これはと同じです。)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(「米国上院」)テストが必要な理由は何ですか。(ノバルティスのポール・ガロによるアナロジー)
フランク・ハレル2013

コードは役に立ちますか?
Jo Lewis

回答:


3

R 2.15.1とSAS 9.2の間でリグレッサの推定に違いがあることがわかりましたが、Rを3.0.1バージョンに更新した後、結果は同じでした。そこで、まずRを最新バージョンに更新することをお勧めします。

2つの異なるモデルに対して2乗和を計算しているため、間違ったアプローチを使用しています。これは、2つの異なる設計行列を意味します。これにより、予測値を計算するためにlm()によって使用されるリグレッサの完全に異なる推定につながります(2つのモデル間で異なる値を持つリグレッサを使用しています)。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.