III प्रकार के वर्ग


9

मेरे पास एक रेखीय प्रतिगमन मॉडल है जिसमें एक श्रेणीगत चर है (पुरुष और महिला) और एक सतत चर बी

मैं आर के साथ विरोधाभासी कोड सेट करता हूं options(contrasts=c("contr.sum","contr.poly"))। और अब मेरे पास , , और उनके इंटरैक्शन (A: B) का उपयोग करते हुए टाइप III के वर्ग हैं ।बीdrop1(model, .~., test="F")

क्या मैं के साथ फंस गया है कि कैसे वर्गों की राशि लिए गणना की जाती है । मुझेबी लगता है कि यह है sum((predicted y of the full model - predicted y of the reduced model)^2)। कम किया गया मॉडल जैसा दिखेगा y~A+A:B। लेकिन जब मैं उपयोग करता हूं predict(y~A+A:B), आर अनुमानित मूल्यों को वापस कर रहा है जो पूर्ण मॉडल अनुमानित मूल्यों के समान हैं। इसलिए, वर्गों का योग 0 होगा।

( के वर्गों के योगों के लिए , मैंने एक कम किए गए मॉडल का उपयोग किया , जो कि जैसा है वैसा ही है ।)y~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
यह एक अच्छा सवाल है और मेरे पास कुछ विचार हैं कि एक उत्तर कैसे दिख सकता है। लेकिन एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के बिना, मैं अपना समय निवेश नहीं कर रहा हूं। ओपी, उद्धार!
हेनरिक

1
टाइप II ("यूएस हाउस ऑफ रिप्रेजेंटेटिव") टेस्ट के विपरीत III ("यूएस सीनेट") टेस्ट क्या चाहते हैं? (पॉल गैलो, नोवार्टिस के कारण समानताएँ)
फ्रैंक हरेल

कोड मदद करता है?
जो लुईस

जवाबों:


3

मैंने R 2.15.1 और SAS 9.2 के बीच रजिस्टरों के आकलन में अंतर पाया है, लेकिन R को 3.0.1 संस्करण में अपडेट करने के बाद परिणाम समान थे। इसलिए, पहले मैं आपको आर को नवीनतम संस्करण में अपडेट करने के लिए चीनी देता हूं।

आप गलत दृष्टिकोण का उपयोग कर रहे हैं क्योंकि आप दो अलग-अलग मॉडलों के खिलाफ वर्ग के योग की गणना कर रहे हैं, जिसका अर्थ है दो अलग-अलग डिज़ाइन मैट्रेस। यह आपको अनुमानित मूल्यों की गणना करने के लिए lm () द्वारा उपयोग किए जाने वाले रजिस्टरों में पूरी तरह से अलग अनुमान लगाने की ओर ले जाता है (आप दो मॉडल के बीच अलग-अलग मूल्यों वाले रजिस्टरों का उपयोग कर रहे हैं)। SS3 की गणना एक हाइपोटिस परीक्षण के आधार पर की जाती है, यह मानते हुए कि सभी कंडीशनिंग रजिस्टर्स बराबर शून्य होते हैं, जबकि वातानुकूलित रजिस्ट्रर 1 के बराबर होते हैं। गणना के लिए, आप उसी मॉडल मैट्रिक्स का उपयोग करते हैं जिसका उपयोग पूर्ण मॉडल का अनुमान लगाने के लिए किया जाता है, जैसा कि पूर्णता में अनुमानित रजिस्ट्रार के लिए किया जाता है। नमूना। याद रखें कि SS3s पूर्ण योगात्मक नहीं हैं। इसका मतलब यह है कि यदि आप अनुमानित एसएस 3 को जोड़ते हैं, तो आप मॉडल एसएस (एसएसएम) प्राप्त नहीं करते हैं।

यहां मैं गणित के एक आर कार्यान्वयन का सुझाव देता हूं जो एसएस 3 और रजिस्टरों का अनुमान लगाने के लिए उपयोग किए जाने वाले जीएलएस एल्गोरिदम को लागू करता है।

इस कोड से उत्पन्न मान ठीक उसी प्रकार से उत्पन्न हुए हैं जैसे कि एसएएस 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))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.