আনোভা গাড়ি ব্যবহার করে বারবার ব্যবস্থা করার জন্য নির্দিষ্ট বিপরীতে কীভাবে নির্দিষ্ট করবেন?


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) এর বিপরীতে (A&B একসাথে)?
অন্য কথায়, আমি এই বিপরীতগুলি কীভাবে নির্দিষ্ট করব:

  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 এর সাথে 1 এবং 2 এর সাথে 3 এবং 1 এবং 2 এর সাথে তুলনামূলকভাবে উপযুক্ত কনট্রাস্ট ম্যাট্রিক্স সেটআপ করতে হবে তা সম্পর্কে আমার কোনও ধারণা নেই। এবং আমি নিশ্চিত নই যে অ-প্রয়োজনীয় চিকিত্সা গোষ্ঠীটি বাদ দেওয়া সত্যিই একটি ভাল ধারণা কারণ এটি সামগ্রিক ত্রুটির শব্দটিকে পরিবর্তন করে।

যাওয়ার আগে Anova()আমিও যাব ভেবেছিলাম lme। তবে পাঠ্যপুস্তিকা আনোভা এবং anove(lme) স্ট্যান্ডার্ড আনোভাতে (যা অনুমোদিত নয়lme ) সম্ভাব্য নেতিবাচক পরিবর্তনের কারণে যেটি থেকে ফিরে এসেছে তার মধ্যে F এবং p মানের মধ্যে সামান্য পার্থক্য রয়েছে । সম্পর্কিত, কেউ আমাকে নির্দেশ করেছেন glsযা বারবার ব্যবস্থা আনোভা ফিটিংয়ের জন্য মঞ্জুরি দেয়, তবে এর কোনও বিপরীতে যুক্তি নেই।

স্পষ্ট করার জন্য: আমি একটি এফ বা টি পরীক্ষা চাই (ধরণের তৃতীয় ধরণের স্কোয়ার ব্যবহার করে) চাই যা পছন্দসই বৈপরীত্যগুলি তাত্পর্যপূর্ণ কিনা তা নয় answers


হালনাগাদ:

আমি ইতিমধ্যে আর-সহায়তা সম্পর্কে একটি অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি , এর কোনও উত্তর নেই

কিছুটা আগে আর-হেল্পে অনুরূপ প্রশ্ন উত্থাপন হয়েছিল। তবে উত্তরগুলিও সমস্যার সমাধান করেনি।


আপডেট (2015):

যেহেতু এই প্রশ্নটি এখনও কিছু ক্রিয়াকলাপ উত্পন্ন করে, এগুলি নির্দিষ্ট করে এবং মূলত অন্যান্য সমস্ত বিপরীতে এখন এফেক্স ভিগনেটে বর্ণিত প্যাকেজের afexসাথে মিশ্রিত প্যাকেজের সাথে তুলনামূলক সহজ কাজ করা যেতে পারে ।lsmeans


1
আপনি কি ইতিমধ্যে টি-পরীক্ষা ব্যবহারের বিরুদ্ধে সিদ্ধান্ত নিয়েছেন? আমার অর্থ হ'ল 1) কন্ট্রোল গ্রুপ থেকে ডেটা ফেলে দিন, 2) treatment3 এর বিভিন্ন স্তরের উপেক্ষা করুন , 4) প্রতিটি ব্যক্তির গড় স্তরের উপরে prePostFup, 4) প্রতিটি ব্যক্তির জন্য গড়ে ঘন্টা ধরে 1,2 (= ডেটা গ্রুপ 1) পাশাপাশি কয়েক ঘন্টা ধরে 3,4 (= ডেটা গ্রুপ 2), 5) 2 নির্ভর গ্রুপের টি-টেস্ট চালান। যেহেতু ম্যাক্সওয়েল অ্যান্ড ডেলানির (2004) পাশাপাশি কર્ક (1995) এর মধ্যে নকশাগুলির মধ্যে পোল্ড ত্রুটি শব্দটির সাথে বৈপরীত্য করা নিরুৎসাহিত করে, এটি একটি সহজ বিকল্প হতে পারে।
কারাকাল

আমি কনট্রাস্ট এনালাইসিস করতে চাই এবং পোল্ড টি টেস্ট করে না। কারণটি হ'ল বিপরীতগুলি (তাদের সমস্যা থাকা সত্ত্বেও) মনোবিজ্ঞানের মানক পদ্ধতি হিসাবে মনে হয় এবং এটিই পাঠক / পর্যালোচক / সুপারভাইজাররা চান। তদুপরি, এসপিএসএসে তারা তুলনামূলকভাবে সরাসরি এগিয়ে রয়েছে। তবে, সক্রিয় আর ব্যবহারকারী হিসাবে আমার 2 বছর সত্ত্বেও আমি আর এর সাথে এটি অর্জন করতে অক্ষম হয়েছি Now এখন আমাকে কিছু বিপরীতে করতে হবে এবং আমি কেবল এসটির জন্য এসপিএসে ফিরে যেতে চাই না। যখন আর ভবিষ্যত হয় (যা আমি এটি মনে করি) তখন বিপরীতে অবশ্যই সম্ভব হওয়া উচিত।
হেনরিক

উত্তর:


6

এই পদ্ধতিটি সাধারণত "পুরানো ধাঁচের" হিসাবে বিবেচিত হয় তাই এটি সম্ভব হওয়ার সময় বাক্য গঠনটি কঠিন এবং আমার সন্দেহ হয় যে আপনি কী চান তা পেতে আনোভা আদেশগুলি কীভাবে পরিচালনা করতে হয় তা কম লোকই জানেন। আরও সাধারণ পদ্ধতিটি glhtসম্ভাবনা ভিত্তিক মডেলটি ব্যবহার করে nlmeবা থেকে আসছে lme4। (যদিও আমি অবশ্যই অন্য উত্তর দ্বারা ভুল প্রমাণিত স্বাগত।)

এটি বলেছিল, যদি আমার এটি করার দরকার হয় তবে আমি আনোভা আদেশগুলি নিয়ে বিরক্ত করব না; আমি কেবল এই সমতুল্য মডেলটি ব্যবহার করে ফিট করব lm, এই বিপরীতে সঠিক ত্রুটি শব্দটি বেছে নেব এবং এফ পরীক্ষাটি নিজেই গণনা করবো (বা সমানভাবে, টেস্টের যেহেতু কেবলমাত্র 1 ডিএফ আছে)। এর জন্য সমস্ত কিছু ভারসাম্যপূর্ণ হওয়া এবং গোলকত্ব থাকতে হবে, তবে আপনার যদি তা না থাকে তবে আপনার সম্ভবত সম্ভবত সম্ভাবনা-ভিত্তিক মডেলটি ব্যবহার করা উচিত। আপনি গ্রীনহাউস-গিজার বা হুইন-ফিল্ড্ট সংশোধন ব্যবহার করে অ-গোলাকৃতির জন্য কিছুটা সংশোধন করতে সক্ষম হতে পারেন (আমি বিশ্বাস করি) একই এফ পরিসংখ্যান ব্যবহার করে তবে ত্রুটি শব্দটির df পরিবর্তন করতে পারেন।

আপনি কি সত্যিই ব্যবহার করতে চান তাহলে car, আপনি পেতে পারে heplot সহায়ক vignettes; তারা বর্ণনা করে যে কীভাবে 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

এইভাবে আমি সেই একই পি-মানগুলি পেতে পারি:

ডেটাটিকে দীর্ঘ বিন্যাসে পুনরায় আকার দিন এবং 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))

আমি চাই মাত্র দুটি বিপরীতে জন্য এসএস এবং ডিএফ পান।

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

পি-মানগুলি পান।

> 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

Herচ্ছিকভাবে গোলকের জন্য সামঞ্জস্য করুন।

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

এটিও কাজ করে! এবং heplotsবিজোনেটের লিঙ্কের জন্য ধন্যবাদ , এটি সাধারণ রৈখিক মডেলের ক্ষেত্রে কী চলছে তার একটি দুর্দান্ত সংক্ষিপ্ত বিবরণ।
কারাকাল

অনেক ধন্যবাদ. আমি এই উত্তরটি গ্রহণ করব (অন্য দুর্দান্ত উত্তরের পরিবর্তে), কারণ এতে গোলকের সংশোধন সম্পর্কিত কিছু চিন্তাভাবনা রয়েছে।
হেনরিক

ভবিষ্যতের পাঠকদের জন্য দ্রষ্টব্য: গোলকের সংশোধন অন্যান্য সমাধানের ক্ষেত্রেও সমানভাবে প্রযোজ্য।
অ্যারোন

6

যদি আপনি সংশ্লিষ্ট আনোভা থেকে পুলযুক্ত ত্রুটি শর্তের সাথে বৈপরীত্য ব্যবহার করতে চান / করতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন। দুর্ভাগ্যক্রমে, এটি দীর্ঘ হবে, এবং আমি কীভাবে এটি আরও সুবিধাজনকভাবে করব তা জানি না। তবুও, আমি মনে করি ফলাফলগুলি সঠিক, যেমন তারা ম্যাক্সওয়েল এবং ডেলানির বিরুদ্ধে যাচাই করা হয়েছে (নীচে দেখুন)।

আপনি hourএকটি এসপিএফ-পি.কি.আর ডিজাইনের ফ্যাক্টরের মধ্যে আপনার প্রথমের গোষ্ঠীগুলির সাথে তুলনা করতে চান ( কিরক থেকে সংকেত (1995): স্প্লিট-প্লট-ফ্যাক্টরিয়াল ডিজাইন 1 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, সুতরাং কেবলমাত্র সহজ এসপিএফ-পিক ডিজাইনটিতে স্যুইচ করা হয় যা কেবল থাকে 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গোষ্ঠীগুলির জন্য বৈপরীত্যগুলি কেবল ত্রুটি শর্তটি প্রতিস্থাপন করে এবং স্বাধীনতার সাথে সংশ্লিষ্ট ডিগ্রিগুলির মাধ্যমে বিষয়গুলি আনোভা-র মধ্যে একদিকে যেমন পরীক্ষা করা যেতে পারে। এই ইন্টারঅ্যাকশনটির এসএস এবং ডিএফ পাওয়ার সহজ উপায় হ'ল মডেলটির সাথে ফিট করে 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

t=ψ^0||c||MSEc||c||ψ^=k=1qckM.kMSEhour: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ϵ^


চমৎকার উত্তর. এই কাজটি করার যদি আমার ধৈর্য থাকে তবে আমি এটি কমবেশি করতাম।
অ্যারন

আপনার বিস্তারিত উত্তরের জন্য ধন্যবাদ। যদিও অনুশীলনে অহলদী কিছুটা মনে হয়।
হেনরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.