कार के उपयोग के दोहराए गए उपायों के लिए विशिष्ट विरोधाभासों को कैसे निर्दिष्ट करें?


12

मैं आर में दोहराया जाने वाले उपायों को चलाने का प्रयास कर रहा हूं, उसके बाद उस डेटासेट पर कुछ विशिष्ट विरोधाभास हैं। मुझे लगता है कि सही दृष्टिकोण Anova()कार पैकेज से उपयोग करना होगा ।

आइए डेटा के ?Anovaउपयोग से लिए गए उदाहरण के साथ मेरे प्रश्न का वर्णन OBrienKaiserकरें (ध्यान दें: मैंने उदाहरण से लिंग कारक को निर्धारित किया है):
हमारे पास विषयों के कारक, उपचार (3 स्तरों: नियंत्रण, ए, बी) और 2 के बीच एक के साथ एक डिज़ाइन है और दोहराया गया -सुविधाएँ (विषयों के भीतर) कारक, चरण (3 स्तर: प्रीटेस्ट, पोस्टटेस्ट, फॉलोअप) और घंटे (5 स्तर: 1 से 5)।

मानक एनोवा तालिका द्वारा दिया गया है (उदाहरण के लिए अंतर में (एनोवा) मैंने टाइप 3 वर्ग के वर्गों पर स्विच किया, यही मेरा क्षेत्र चाहता है):

require(car)
phase <- factor(rep(c("pretest", "posttest", "followup"), c(5, 5, 5)),
levels=c("pretest", "posttest", "followup"))
hour <- ordered(rep(1:5, 3))
idata <- data.frame(phase, hour)
mod.ok <- lm(cbind(pre.1, pre.2, pre.3, pre.4, pre.5, post.1, post.2, post.3, post.4, post.5, fup.1, fup.2, fup.3, fup.4, fup.5) ~ treatment, data=OBrienKaiser)
av.ok <- Anova(mod.ok, idata=idata, idesign=~phase*hour, type = 3)
summary(av.ok, multivariate=FALSE)

अब, कल्पना करें कि उच्चतम क्रम इंटरैक्शन महत्वपूर्ण होगा (जो कि मामला नहीं है) और हम इसे निम्नलिखित विरोधाभासों के साथ आगे भी एक्सप्लोर करना चाहेंगे:
क्या घंटे 1 और 2 बनाम घंटे 3 (विपरीत 1) और घंटे 1 और 2 के बीच का अंतर है उपचार की स्थिति (ए एंड बी एक साथ) में घंटे बनाम 4 और 5 (कंट्रास्ट 2)?
दूसरे शब्दों में, मैं इन विरोधाभासों को कैसे निर्दिष्ट करूँ:

  1. ((treatment %in% c("A", "B")) & (hour %in% 1:2)) बनाम ((treatment %in% c("A", "B")) & (hour %in% 3))
  2. ((treatment %in% c("A", "B")) & (hour %in% 1:2)) बनाम ((treatment %in% c("A", "B")) & (hour %in% 4:5))

मेरा विचार गैर-आवश्यक उपचार की स्थिति (नियंत्रण) के कारण एक और एनोवा को चलाना होगा:

mod2 <- lm(cbind(pre.1, pre.2, pre.3, pre.4, pre.5, post.1, post.2, post.3, post.4, post.5, fup.1, fup.2, fup.3, fup.4, fup.5) ~ treatment, data=OBrienKaiser, subset = treatment != "control")
av2 <- Anova(mod2, idata=idata, idesign=~phase*hour, type = 3)
summary(av2, multivariate=FALSE)

हालांकि, मुझे अभी भी पता नहीं है कि 4 और 5 के साथ 3 और 1 और 2 के साथ घंटे 1 & 2 की तुलना करने वाले उचित-विषय विपरीत मैट्रिक्स को कैसे सेट किया जाए। और मुझे यकीन नहीं है कि गैर-आवश्यक उपचार समूह को छोड़ना वास्तव में एक अच्छा विचार है क्योंकि यह समग्र त्रुटि अवधि को बदलता है।

जाने से पहले Anova()मैं भी सोच रहा था lme। हालांकि, पाठ्यपुस्तक एनोवा के बीच एफ और पी मूल्यों में छोटे अंतर हैं और anove(lme) मानक एनोवा (जो कि अनुमति नहीं हैlme ) में संभावित नकारात्मक भिन्नताओं के कारण वापस आ गया है । संबंधित, किसी ने मुझे इंगित किया है glsजो एनोवा को बार-बार फिटिंग करने के लिए अनुमति देता है, हालांकि, इसका कोई विपरीत तर्क नहीं है।

स्पष्ट करने के लिए: मुझे एक एफ या टी टेस्ट (प्रकार III वर्ग के वर्गों का उपयोग करके) चाहिए जो उत्तर देता है कि वांछित विरोधाभास महत्वपूर्ण हैं या नहीं।


अपडेट करें:

मैंने पहले ही आर-हेल्प पर एक समान प्रश्न पूछा था, कोई उत्तर नहीं था

कुछ समय पहले आर-हेल्प पर इसी तरह के सवाल किए गए थे। हालाँकि, जवाब से भी समस्या हल नहीं हुई।


अपडेट (2015):

जैसा कि यह प्रश्न अभी भी कुछ गतिविधि उत्पन्न करता है, थिसिस को निर्दिष्ट करता है और मूल रूप से अन्य सभी विरोधाभासों को afexपैकेज के साथ संयोजन में अपेक्षाकृत आसान किया जा सकता है lsmeansजैसा कि एफेक्स विगनेट में वर्णित है ।


1
क्या आपने पहले से ही टी-टेस्ट का उपयोग करने के खिलाफ फैसला किया है? मेरा मतलब है कि 1) नियंत्रण समूह से डेटा बाहर फेंकते हैं, 2) treatmentप्रत्येक व्यक्ति के औसत स्तर के लिए , 3) के विभिन्न स्तरों को अनदेखा करते हैं prePostFup, 4) औसतन प्रत्येक व्यक्ति के लिए औसतन 1,2 घंटे (= डेटा समूह 1) से अधिक है। घंटों के साथ-साथ 3,4 (= डेटा समूह 2), 5) 2 आश्रित समूहों के लिए टी-टेस्ट चलाते हैं। मैक्सवेल और डेलाने (2004) के साथ-साथ किर्क (1995) के भीतर के डिजाइन में एक त्रुटि वाले शब्द के साथ विरोधाभासी करने के लिए हतोत्साहित करते हैं, यह एक सरल विकल्प हो सकता है।
काराकल

मैं कंट्रास्ट एनालिसिस करना चाहता हूं न कि पूल टेस्ट करना। कारण यह है कि विरोधाभास (उनकी समस्याओं के बावजूद) मनोविज्ञान में मानक प्रक्रिया प्रतीत होती है और पाठकों / समीक्षक / पर्यवेक्षकों को वही चाहिए। इसके अलावा, वे SPSS में करने के लिए अपेक्षाकृत सीधे हैं। हालांकि, एक सक्रिय आर उपयोगकर्ता के रूप में मेरे 2 वर्षों के बावजूद अब तक मैं आर के साथ इसे प्राप्त करने में असमर्थ रहा हूं। अब मुझे कुछ विरोधाभास करने होंगे और मैं इसके लिए एसपीएसएस में वापस नहीं जाना चाहता। जब R भविष्य है (जो मुझे लगता है कि यह है), विरोधाभास संभव होना चाहिए।
हेनरिक

जवाबों:


6

इस पद्धति को आम तौर पर "पुराने जमाने" माना जाता है, जबकि यह संभव हो सकता है, वाक्यविन्यास मुश्किल है और मुझे कम लोगों पर संदेह है कि जो आप चाहते हैं उसे पाने के लिए एनोवा कमांड को हेरफेर करना जानते हैं। अधिक सामान्य विधि glhtएक संभावना आधारित मॉडल के साथ nlmeया से उपयोग कर रही है lme4। (हालांकि मैं निश्चित रूप से अन्य उत्तरों द्वारा गलत साबित होने का स्वागत करता हूं।)

उस ने कहा, अगर मुझे ऐसा करने की आवश्यकता होती है, तो मैं एनोवा कमांड के साथ परेशान नहीं होता; मैं केवल समकक्ष मॉडल का उपयोग कर फिट हूं lm, इस कंट्रास्ट के लिए सही त्रुटि शब्द को चुनता हूं, और एफ परीक्षण की गणना खुद करता हूं (या समकक्ष, टी परीक्षण के बाद से केवल 1 डीएफ है)। इसके लिए सब कुछ संतुलित होना चाहिए और गोलाकार होना चाहिए, लेकिन यदि आपके पास ऐसा नहीं है, तो आपको संभवतः वैसे भी संभावना आधारित मॉडल का उपयोग करना चाहिए। आप ग्रीनहाउस-गीजर या ह्येनह-फेल्डट सुधारों का उपयोग करके गैर-गोलाकार के लिए कुछ हद तक सही हो सकते हैं, जो (मेरा मानना ​​है) एक ही एफ स्टेटिस्टिक का उपयोग करते हैं लेकिन त्रुटि शब्द के डीएफ को संशोधित करते हैं।

यदि आप वास्तव में उपयोग करना चाहते हैं car, तो आपको हेपलट विगनेट्स मददगार मिल सकते हैं ; वे वर्णन करते हैं कि carपैकेज में मैट्रिक्स कैसे परिभाषित किए जाते हैं।

कैराकल की विधि (विपरीत 1 और 2 - 3 और 1 और 2 - 4 और 5 के लिए) का उपयोग करके, मुझे मिलता है

      psiHat      tStat          F         pVal
1 -3.0208333 -7.2204644 52.1351067 2.202677e-09
2 -0.2083333 -0.6098777  0.3719508 5.445988e-01

यह है कि मैं उन्हीं p-मानों को कैसे प्राप्त करूंगा:

डेटा को लंबे प्रारूप में रीसेट करें और lmसभी एसएस शब्द प्राप्त करने के लिए चलाएं ।

library(reshape2)
d <- OBrienKaiser
d$id <- factor(1:nrow(d))
dd <- melt(d, id.vars=c(18,1:2), measure.vars=3:17)
dd$hour <- factor(as.numeric(gsub("[a-z.]*","",dd$variable)))
dd$phase <- factor(gsub("[0-9.]*","", dd$variable), 
                   levels=c("pre","post","fup"))
m <- lm(value ~ treatment*hour*phase + treatment*hour*phase*id, data=dd)
anova(m)

घंटे की अवधि के लिए एक वैकल्पिक विपरीत मैट्रिक्स बनाएं।

foo <- matrix(0, nrow=nrow(dd), ncol=4)
foo[dd$hour %in% c(1,2) ,1] <- 0.5
foo[dd$hour %in% c(3) ,1] <- -1
foo[dd$hour %in% c(1,2) ,2] <- 0.5
foo[dd$hour %in% c(4,5) ,2] <- -0.5
foo[dd$hour %in% 1 ,3] <- 1
foo[dd$hour %in% 2 ,3] <- 0
foo[dd$hour %in% 4 ,4] <- 1
foo[dd$hour %in% 5 ,4] <- 0

जांचें कि मेरे विरोधाभासों को डिफ़ॉल्ट विरोधाभासों के समान एसएस (और पूर्ण मॉडल से समान) दिया जाता है।

anova(lm(value ~ hour, data=dd))
anova(lm(value ~ foo, data=dd))

SS प्राप्त करें और मुझे जो दो विरोधाभास चाहिए, उसके लिए df करें।

anova(lm(value ~ foo[,1], data=dd))
anova(lm(value ~ foo[,2], data=dd))

P- मान प्राप्त करें।

> F <- 73.003/(72.81/52)
> pf(F, 1, 52, lower=FALSE)
[1] 2.201148e-09
> F <- .5208/(72.81/52)
> pf(F, 1, 52, lower=FALSE)
[1] 0.5445999

वैकल्पिक रूप से गोलाकार के लिए समायोजित करें।

pf(F, 1*.48867, 52*.48867, lower=FALSE)
pf(F, 1*.57413, 52*.57413, lower=FALSE)

वह भी काम करता है! और विगनेट के लिंक के लिए धन्यवाद heplots, यह वास्तव में सामान्य रैखिक मॉडल के संदर्भ में क्या हो रहा है, का एक अच्छा सारांश है।
काराकल

बहुत बहुत धन्यवाद। मैं इस उत्तर (अन्य महान उत्तर के बजाय) को स्वीकार करूंगा, क्योंकि इसमें गोलाकार सुधार पर कुछ विचार शामिल हैं।
हेनरिक

भविष्य के पाठकों पर ध्यान दें: गोलाकार सुधार समान रूप से अन्य समाधान पर भी लागू होता है।
हारून ने

6

यदि आप संबंधित ANOVA से जमा त्रुटि अवधि के साथ विरोधाभासों का उपयोग करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं। दुर्भाग्य से, यह लंबा होगा, और मुझे नहीं पता कि यह कैसे करना है। फिर भी, मुझे लगता है कि परिणाम सही हैं, क्योंकि वे मैक्सवेल और डेलानी के खिलाफ सत्यापित हैं (नीचे देखें)।

आप कारक के भीतर अपनी पहली के समूहों की तुलना करना चाहते hourएक एसपीएफ़ p.qr डिजाइन (से अंकन में किर्क स्प्लिट प्लॉट भाज्य डिजाइन 1 कारक के बीच: (1995) treatmentपी समूहों के साथ, पहली कारक भीतर hourक्ष समूहों के साथ, दूसरा कारक के भीतर prePostFupके साथ r समूह)। निम्नलिखित मानते हैं कि treatmentसमूहों और गोलाकार आकार की पहचान है ।

Nj    <- 10                                             # number of subjects per group
P     <- 3                                              # number of treatment groups
Q     <- 5                                              # number of hour groups
R     <- 3                                              # number of PrePostFup groups
id    <- factor(rep(1:(P*Nj), times=Q*R))                                  # subject
treat <- factor(rep(LETTERS[1:P], times=Q*R*Nj), labels=c("CG", "A", "B")) # treatment
hour  <- factor(rep(rep(1:Q, each=P*Nj), times=R))                         # hour
ppf   <- factor(rep(1:R, each=P*Q*Nj), labels=c("pre", "post", "fup"))     # prePostFup
DV    <- round(rnorm(Nj*P*Q*R, 15, 2), 2)               # some data with no effects
dfPQR <- data.frame(id, treat, hour, ppf, DV)           # data frame long format

summary(aov(DV ~ treat*hour*ppf + Error(id/(hour*ppf)), data=dfPQR)) # SPF-p.qr ANOVA

पहले ध्यान दें कि मुख्य प्रभाव hourऔसत ओवर के बाद समान है prePostFup, इस प्रकार सरल एसपीएफ़-पीके डिज़ाइन पर स्विच करना जिसमें केवल IVs होते हैं treatmentऔर hourजैसा कि होता है ।

dfPQ <- aggregate(DV ~ id + treat + hour, FUN=mean, data=dfPQR)  # average over ppf
# SPF-p.q ANOVA, note effect for hour is the same as before
summary(aov(DV ~ treat*hour + Error(id/hour), data=dfPQ))

अब ध्यान दें कि एसपीएफ़-पीके एनोवा में, प्रभाव के लिए hourबातचीत के खिलाफ परीक्षण किया जाता है id:hour, अर्थात, यह इंटरैक्शन परीक्षण के लिए त्रुटि शब्द प्रदान करता है। अब hourसमूहों के लिए विरोधाभासों का परीक्षण ऐसे ही किया जा सकता है जैसे कि एक विषय-वस्तु ANOVA के बीच केवल त्रुटि शब्द, और स्वतंत्रता की इसी डिग्री को प्रतिस्थापित करके। इस बातचीत के SS और df प्राप्त करने का आसान तरीका मॉडल के साथ फिट होना है lm()

(anRes <- anova(lm(DV ~ treat*hour*id, data=dfPQ)))
SSE    <- anRes["hour:id", "Sum Sq"]     # SS interaction hour:id -> will be error SS
dfSSE  <- anRes["hour:id", "Df"]         # corresponding df

लेकिन यहां भी सब कुछ मैन्युअल रूप से गणना करें।

# substitute DV with its difference to cell / person / treatment group means
Mjk   <- ave(dfPQ$DV,           dfPQ$treat, dfPQ$hour, FUN=mean)  # cell means
Mi    <- ave(dfPQ$DV, dfPQ$id,                         FUN=mean)  # person means
Mj    <- ave(dfPQ$DV,           dfPQ$treat,            FUN=mean)  # treatment means
dfPQ$IDxIV <- dfPQ$DV - Mi - Mjk + Mj                             # interaction hour:id
(SSE  <- sum(dfPQ$IDxIV^2))               # SS interaction hour:id -> will be error SS
dfSSE <- (Nj*P - P) * (Q-1)               # corresponding df
(MSE  <- SSE / dfSSE)                     # mean square

टी=ψ^-0||सी||एससी||सी||ψ^=Σ=1क्षसीएसhour:id

Mj     <- tapply(dfPQ$DV, dfPQ$hour, FUN=mean)  # group means for hour
Nj     <- table(dfPQ$hour)                      # cell sizes for hour (here the same)
cntr   <- rbind(c(1, 1, -2,  0, 0),
                c(1, 1, -1, -1, 0))             # matrix of contrast vectors
psiHat <- cntr   %*% Mj                         # estimates psi-hat
lenSq  <- cntr^2 %*% (1/Nj)                     # squared lengths of contrast vectors
tStat  <- psiHat / sqrt(lenSq*MSE)              # t-statistics
pVal   <- 2*(1-pt(abs(tStat), dfSSE))           # p-values
data.frame(psiHat, tStat, pVal)

α

Anova()carε^


अच्छा जवाब। यह कमोबेश मैंने क्या किया अगर मेरे पास यह काम करने का धैर्य होता।
हारून ने

आपके विस्तृत उत्तर के लिए धन्यवाद। हालांकि यह व्यवहार में अस्वाभाविक लगता है।
हेनरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.