Пожалуйста, предоставьте R код, который позволяет проводить ANOVA между субъектами с -3, -1, 1, 3 контрастами. Я понимаю, что есть спор относительно соответствующего типа суммы квадратов (SS) для такого анализа. Однако тип SS по умолчанию, используемый в SAS и SPSS (тип III), считается стандартом в моей области. Поэтому я хотел бы, чтобы результаты этого анализа идеально соответствовали тем, что генерируются этими статистическими программами. Чтобы быть принятым ответ должен напрямую вызывать aov (), но за другие ответы может быть проголосовано (особенно, если они просты для понимания / использования).
sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
Изменить: Обратите внимание, что запрашиваемый мной контраст не является простым линейным или полиномиальным контрастом, а является контрастом, полученным из теоретического предсказания, то есть типа контрастов, обсуждаемых Розенталем и Росновом.
источник
Ответы:
Сумма квадратов типа III для ANOVA легко доступна через
Anova()
функцию из автомобильного пакета.Контраст кодирование может быть сделано несколькими способами, используя
C()
, вcontr.*
семью (как указано @nico), или непосредственноcontrasts()
функции / аргумент. Это подробно описано в §6.2 (стр. 144-151) « Современной прикладной статистики с S» (Springer, 2002, 4-е изд.). Обратите внимание, чтоaov()
это просто функция-обертка дляlm()
функции. Интересно, когда кто-то хочет контролировать погрешность модели (как в рамках внутрисубъектного дизайна), но в противном случае они оба дают одинаковые результаты (и независимо от того, как вы подходите к вашей модели, вы все равно можете выводить ANOVA или LM- как резюме сsummary.aov
илиsummary.lm
).У меня нет SPSS для сравнения двух выходов, но что-то вроде
стоит попробовать в первую очередь.
О факторном кодировании в R против SAS: R рассматривает базовый или опорный уровень как первый уровень в лексикографическом порядке, тогда как SAS рассматривает последний. Таким образом, чтобы получить сопоставимые результаты, либо вы должны использовать
contr.SAS()
илиrelevel()
ваш фактор R.источник
Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")
должно быть лучше. Пожалуйста, дайте мне знать, если это хорошо с вами.Это может выглядеть как самореклама (и я полагаю, что это так). Но я разработал пакет lsmeans для R (доступный на CRAN), который предназначен именно для такой ситуации. Вот как это работает для вашего примера:
Вы можете указать дополнительные контрасты в списке, если хотите. В этом примере вы получите те же результаты со встроенным линейным полиномиальным контрастом:
Чтобы подтвердить это, обратите внимание, что
"poly"
спецификация направляет его на вызовpoly.lsmc
, что приводит к следующим результатам:Если вы хотите выполнить совместную проверку нескольких контрастов, используйте
test
функцию сjoint = TRUE
. Например,Это даст тест типа III. В отличие от этого
car::Anova()
, он будет делать это правильно, независимо от контрастного кодирования, используемого на этапе подбора модели. Это связано с тем, что тестируемые линейные функции указываются напрямую, а не неявно, посредством сокращения модели. Дополнительная особенность заключается в том, что обнаруживается случай, когда проверяемые контрасты являются линейно зависимыми, и вырабатываются правильные статистические данные и степени свободы.источник
Вы можете посмотреть этот пост в блоге:
Получение того же результата ANOVA приводит к R, как и в SPSS - трудности с суммами квадратов типа II и типа III
( Спойлер: добавьте
options(contrasts=c("contr.sum", "contr.poly"))
в начале вашего скрипта)источник
Когда вы делаете контрасты, вы делаете конкретную, заявленную линейную комбинацию значений ячеек в контексте соответствующего термина ошибки. Как таковое, понятие «Тип СС» не имеет смысла с контрастами. Каждый контраст по сути является первым эффектом, использующим SS типа I. «Тип СС» имеет отношение к тому, что частично выделено или учитывается другими терминами. Для контрастов ничто не частично или не учитывается. Контраст стоит сам по себе.
источник
Тот факт, что тесты типа III используются на вашем рабочем месте, является самой слабой из причин продолжать их использовать. SAS нанес большой ущерб статистике в этом отношении. Изложение Билла Венейблса, на которое мы ссылаемся выше, является отличным источником информации по этому вопросу Просто скажите нет типу III; он основан на неверном представлении о балансе и имеет меньшую мощность из-за глупого взвешивания клеток в несбалансированном случае.
Более естественный и менее подверженный ошибкам способ получить общие контрасты и возможность описать то, что вы сделали, обеспечивается функцией
rms
пакета R.contrast.rms
Контрасты могут быть очень сложными, но для пользователя они очень просты, потому что они указаны с точки зрения различий в прогностических значениях. Тесты и одновременные контрасты поддерживаются. Это обрабатывает эффекты нелинейной регрессии, эффекты нелинейного взаимодействия, частичные контрасты, все виды вещей.источник
Попробуйте команду Anova в автомобильной библиотеке. Используйте аргумент type = "III", так как по умолчанию используется тип II. Например:
источник
Также для саморекламы я написал функцию именно для этого: https://github.com/samuelfranssens/type3anova
Установите следующим образом:
Вам также нужно будет установить
car
пакет.источник