विपरीत कोड वाले R में टाइप III SS ANOVA कैसे करता है?


26

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

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

संपादित करें: कृपया ध्यान दें, मैं जो अनुरोध कर रहा हूं, वह एक साधारण रैखिक या बहुपद विपरीत नहीं है, बल्कि एक सैद्धांतिक भविष्यवाणी, जो रोसेन्थल और रोसनोव द्वारा चर्चा की गई विरोधाभासों के प्रकार से व्युत्पन्न एक विपरीत है।


5
मैं समझता हूं कि आपको टाइप III योग की आवश्यकता है, लेकिन यह ( आँकड़ें ।ox.ac.uk/pub/MASS3/Exegeses.pdf ) लेख एक अच्छा पढ़ा है। यह कुछ दिलचस्प बिंदुओं को दिखाता है।
सनकूलू

अपने प्रश्न के बारे में आपको निम्नलिखित चर्चा में रुचि हो सकती है: आंकड़े . stackexchange.com/questions/60362/… ANOVA प्रकार I, II और III के बीच का विकल्प उतना आसान नहीं है जितना लगता है।
phx

आपके प्रश्न को इस रूप में उपयोगी माना गया कि इसने कई सीखी गई प्रतिक्रियाओं को उकसाया, लेकिन मैं यह भी ध्यान देता हूं कि आपने उस उत्तरदाता के साथ सहमति व्यक्त की है जिसने मूल रूप से कहा था कि प्रश्न का आधार गलत था। मुझे आशा है कि मैं StaGuy की स्थिति को संक्षेप में कह रहा हूं क्योंकि परिभाषित विरोधाभास "प्रकार I" से थे और अन्य प्रकार की चर्चा केवल आंशिक प्रतिगमन आँकड़ों का आकलन करते समय प्रासंगिक हो गई, संभवतः सबसे महत्वपूर्ण है जब "स्वचालित रूप से मशीन को" ड्राइविंग "" स्वचालित तरीकों से करते हैं।
डीडिन

@ ड्विन: मुझे यकीन नहीं है कि मैं पूरी तरह से आपका अनुसरण करूंगा। कोई भी 'मशीन को चलाने' (कम से कम जैसा कि मैं उस वाक्यांश को समझता हूं) को बताए बिना अन्य प्रकार के एसएस का वैध रूप से उपयोग कर सकता हूं। मैं यहां थोड़ा कठोर हो सकता हूं, लेकिन यदि स्मृति कार्य करती है, तो आंशिक प्रतिगमन का उपयोग नहीं करने पर अन्य प्रकार प्रासंगिक हो सकते हैं। उदाहरण के लिए, टाइप III एसएस मुख्य प्रभाव को सहभागिता से बाहर नहीं करता है। प्रकारों के बीच का अंतर ठीक-ठीक मायने रखता है क्योंकि टाइप III आंशिक नहीं है जबकि टाइप I करता है। बताई गई समस्या में केवल एक कंट्रास्ट शामिल था और इसलिए एसएस के प्रकारों के बीच अंतर मूट था।
रुसेलपिएर्स

मेरी समझ यह थी कि एसएएस ने III एसएसएस चुनने के लिए जो तर्क दिया है (और ऐसा इसलिए लगता है कि लोगों को लगता है कि टाइप- III को प्राथमिकता दी जाती है) यह बेहतर है कि यह पिछड़े और आगे की चयन प्रक्रिया का समर्थन करता है।
डीडिन

जवाबों:


22

एनोवा के लिए टाइप III योग कार पैकेज Anova()से फ़ंक्शन के माध्यम से आसानी से उपलब्ध हैं ।

कंट्रास्ट कोडिंग का उपयोग कई तरीकों से किया जा सकता है C(), contr.*परिवार (जैसा @nico द्वारा इंगित किया गया है), या सीधे contrasts()फ़ंक्शन / तर्क। यह एस (स्प्रिंगर, 2002, 4 डी एड) के साथ आधुनिक एप्लाइड सांख्यिकी के .26.2 (पीपी। 144-151) में विस्तृत है । ध्यान दें कि aov()फ़ंक्शन के लिए सिर्फ एक आवरण lm()समारोह है। यह दिलचस्प है जब कोई मॉडल के त्रुटि शब्द को नियंत्रित करना चाहता है (जैसे कि एक विषय-वस्तु डिज़ाइन में), लेकिन अन्यथा वे दोनों एक ही परिणाम देते हैं (और जिस तरह से आप अपने मॉडल को फिट करते हैं, आप अभी भी ANOVA या LM- आउटपुट कर सकते हैं के साथ सारांश की तरह summary.aovया summary.lm)।

मेरे पास दो आउटपुट की तुलना करने के लिए SPSS नहीं है, लेकिन कुछ ऐसा है

> library(car)
> sample.data <- data.frame(IV=factor(rep(1:4,each=20)),
                            DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> Anova(lm1 <- lm(DV ~ IV, data=sample.data, 
                  contrasts=list(IV=contr.poly)), type="III")
Anova Table (Type III tests)

Response: DV
            Sum Sq Df F value    Pr(>F)    
(Intercept)  18.08  1  21.815  1.27e-05 ***
IV          567.05  3 228.046 < 2.2e-16 ***
Residuals    62.99 76                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

पहली बार में प्रयास करने के लायक है।

R बनाम SAS ​​में कारक कोडिंग के बारे में: R बेसलाइन या संदर्भ स्तर को लेक्सिकोग्राफ़िक क्रम में पहले स्तर के रूप में मानता है, जबकि SAS अंतिम को मानता है। तो, तुलनीय परिणाम प्राप्त करने के लिए, या तो आपको अपने आर कारक का उपयोग करना होगा contr.SAS()या करना relevel()होगा।


1
मुझे नहीं लगता कि यह उत्तर -3, -1,1,3 कंट्रास्ट का उपयोग करता है जो मैंने निर्दिष्ट किया है और न ही यह कंट्रास्ट का 1 डीएफ परीक्षण प्रदान करता है।
रसेलपिएरेस

@drknexus हाँ, आप सही हैं। बहुत जल्दी लिखा। जैसे कुछ Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")बेहतर होना चाहिए। कृप्या मुझे बता दें अगर आप के साथ यह ठीक है।
chl

धन्यवाद! यह ठीक है कि मैं कल SPSS के खिलाफ इसे सत्यापित कर दूंगा और आपको वापस कर दूंगा।
रुसैलपिएरेस

1
BTW, Anz कोड को लपेटने के लिए ez पैकेज ( cran.r-project.org/web/packages/ez/index.html ) पर एक नज़र डालें ...
Tal Galili

2
@drknexus: यदि केवल ez के लिए एक सुविधा अनुरोध और समस्याएँ प्रस्तुत करने वाले पृष्ठ थे ... github.com/mike-lawrence/ez/issues :)
माइक लॉरेंस

11

यह थोड़ा आत्म-प्रचार की तरह लग सकता है (और मुझे लगता है कि यह है)। लेकिन मैंने आर (सीआरएएन पर उपलब्ध) के लिए एक लेसेन्स पैकेज विकसित किया जो इस तरह की स्थिति को ठीक से संभालने के लिए बनाया गया है। यहां बताया गया है कि यह आपके उदाहरण के लिए कैसे काम करता है:

> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)

> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
 IV    lsmean        SE df   lower.CL  upper.CL
  1 -3.009669 0.2237448 76 -3.4552957 -2.564043
  2 -3.046072 0.2237448 76 -3.4916980 -2.600445
  3  1.147080 0.2237448 76  0.7014539  1.592707
  4  3.049153 0.2237448 76  2.6035264  3.494779

> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
 contrast estimate       SE df t.ratio p.value
 mycon    22.36962 1.000617 76  22.356  <.0001

यदि आप चाहें तो आप सूची में अतिरिक्त विरोधाभासों को निर्दिष्ट कर सकते हैं। इस उदाहरण के लिए, आपको बिल्ट-इन लीनियर बहुपद के विपरीत परिणाम प्राप्त होंगे।

> con <- contrast(sample.lsm, "poly")
> con
 contrast   estimate        SE df t.ratio p.value
 linear    22.369618 1.0006172 76  22.356  <.0001
 quadratic  1.938475 0.4474896 76   4.332  <.0001
 cubic     -6.520633 1.0006172 76  -6.517  <.0001

इसकी पुष्टि करने के लिए, ध्यान दें कि "poly"विनिर्देश इसे कॉल करने के लिए निर्देशित poly.lsmcकरता है, जो इन परिणामों का उत्पादन करता है:

> poly.lsmc(1:4)
  linear quadratic cubic
1     -3         1    -1
2     -1        -1     3
3      1        -1    -3
4      3         1     1

यदि आप कई विरोधाभासों का संयुक्त परीक्षण करना चाहते हैं, तो testफ़ंक्शन का उपयोग करें joint = TRUE। उदाहरण के लिए,

> test(con, joint = TRUE)

यह "टाइप III" परीक्षण का उत्पादन करेगा। इसके विपरीत car::Anova(), यह मॉडल-फिटिंग चरण में उपयोग किए गए कंट्रास्ट कोडिंग की परवाह किए बिना सही ढंग से करेगा। ऐसा इसलिए है क्योंकि परीक्षण किए जा रहे रैखिक कार्यों को मॉडल में कमी के माध्यम से सीधे निर्दिष्ट किया जाता है। एक अतिरिक्त विशेषता यह है कि ऐसा मामला जहां परीक्षण किए जा रहे विरोधाभास रैखिक रूप से निर्भर होते हैं, और सही परीक्षण सांख्यिकीय और स्वतंत्रता की डिग्री का उत्पादन किया जाता है।


10

आप इस ब्लॉग पोस्ट पर एक नज़र रखना चाहते हैं:

एसपीएसएस में आर के समान एनोवा परिणाम प्राप्त करना - टाइप II और टाइप III के साथ कठिनाइयों का वर्ग

( Spoiler:options(contrasts=c("contr.sum", "contr.poly")) अपनी स्क्रिप्ट की शुरुआत में जोड़ें )


Rvl के उत्तर में संयुक्त परीक्षण पर अतिरिक्त जानकारी नोट करें।
rvl

7

जब आप विरोधाभास कर रहे होते हैं, तो आप उचित त्रुटि शब्द के संदर्भ में सेल साधनों का एक विशिष्ट, घोषित रैखिक संयोजन कर रहे होते हैं। जैसे, "एसएस के प्रकार" की अवधारणा विरोधाभासों के साथ सार्थक नहीं है। प्रत्येक विपरीत अनिवार्य रूप से एक प्रकार I SS का उपयोग करने वाला पहला प्रभाव है। "एसएस के प्रकार" को अन्य शर्तों के साथ क्या किया जाता है या क्या किया जाता है इसका हिसाब देना होगा। विरोधाभासों के लिए, कुछ भी पक्षपातपूर्ण नहीं है या इसके लिए जिम्मेदार नहीं है। इसके विपरीत खड़ा है।


तुम पूरी तरह ठीक हो।
रसेलपिएरेस

3

तथ्य यह है कि आपके काम के स्थान पर टाइप III परीक्षणों का उपयोग किया जाता है, उनका उपयोग करने के कारणों में सबसे कमजोर है। एसएएस ने इस संबंध में आंकड़ों की बड़ी क्षति की है। ऊपर उल्लिखित बिल वेनेबल्स का एक्साइजिस, इस पर एक महान संसाधन है। केवल III टाइप करने के लिए ना कहें; यह संतुलन की दोषपूर्ण धारणा पर आधारित है और असंतुलित मामले में कोशिकाओं के मूर्खतापूर्ण भार के कारण कम शक्ति है।

सामान्य विरोधाभासों को प्राप्त करने के लिए एक अधिक प्राकृतिक और कम त्रुटि-युक्त तरीका, और यह वर्णन करने में सक्षम होने के लिए कि आपने क्या किया, आर rmsपैकेज contrast.rmsफ़ंक्शन द्वारा प्रदान किया गया है । विरोधाभास बहुत जटिल हो सकते हैं लेकिन उपयोगकर्ता के लिए बहुत सरल हैं क्योंकि वे भविष्य कहे जाने वाले मूल्यों में अंतर के संदर्भ में बताए गए हैं। परीक्षण और एक साथ विरोधाभासों का समर्थन किया जाता है। यह nonlinear प्रतिगमन प्रभाव, nonlinear बातचीत प्रभाव, आंशिक विरोधाभासों, सभी प्रकार की चीजों को संभालता है।


कहने के लिए एक प्रतिष्ठित व्यक्ति के रूप में आपके लिए यह सब ठीक है और अच्छा है। दूसरों के पास समीक्षकों से असहमत होने की स्थिति नहीं है। चूंकि आंकड़ों की व्याख्या अलग है, आप नए लोगों को सिद्धांत पर खड़े होने और अनुचित लागत के लिए पूछ रहे होंगे। मैं कहता हूं कि किसी के रूप में जो इस (और इसी तरह) पहाड़ियों के ऊपर मेरे हिस्से का मर गया। इस मोर्चे पर IMO परिवर्तन द्वारपालों, अर्थात संपादकों और समीक्षकों की जिम्मेदारी है।
रुसलपिएरेस

जो लोग डेटा के साथ वास्तव में अच्छे हैं उनके पास नौकरियों की एक विस्तृत पसंद है और उन क्षेत्रों में काम करने का विकल्प हो सकता है जहां उनके कौशल और राय का सम्मान किया जाता है।
फ्रैंक हरेल

1
... और अब मैं यही करता हूं। लेकिन जो लोग इस सवाल पर आ रहे हैं वे अक्सर उस वर्ग के नहीं होंगे। जैसे मैं 7 साल पहले नहीं था। मैं केवल नौसिखिए और उनकी परिस्थितियों के लिए थोड़ी सहानुभूति की वकालत करता हूं।
रुसलपिएर्स

2

कार लाइब्रेरी में अनोवा कमांड का प्रयास करें। प्रकार = "III" तर्क का उपयोग करें, क्योंकि यह II टाइप करने के लिए चूक करता है। उदाहरण के लिए:

library(car)
mod <- lm(conformity ~ fcategory*partner.status, data=Moore, contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod, type="III")

3
मुझे पता है कि मूर कार लाइब्रेरी में है, लेकिन जब नमूना डेटा प्रदान किया जाता है तो सवाल पूछने वाले के लिए आपकी प्रतिक्रिया को समझना आसान होता है यदि आप नमूना डेटा का उपयोग करते हैं।
रसेलपिएर्स

0

इसके अलावा स्व-प्रचार, मैंने इसके लिए एक फ़ंक्शन लिखा: https://github.com/samuelfranssens/type3anova

निम्नानुसार स्थापित करें:

library(devtools)
install_github(samuelfranssens/type3anova)
library(type3anova)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

type3anova(lm(DV ~ IV, data = sample.data))

आपको carपैकेज स्थापित करने की भी आवश्यकता होगी ।


आप इसे प्रश्न के विपरीत भाग पर कैसे लागू करेंगे?
रुसलपिएरेस

1
क्षमा याचना, मैंने प्रश्न को ठीक से नहीं पढ़ा। मेरा कार्य केवल III एनोवा को ले जाने को सरल करेगा। ऊपर StatGuy की तरह, मैं यह नहीं देखता कि विशिष्ट विरोधाभासों का परीक्षण करते समय SS किस स्थान पर आता है।
sam_f
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.