R: анализиране на множество отговори (т.е. зависими променливи) в модел със смесени ефекти (lme4)

Имам, както си мислех, наистина прост въпрос. В лонгитюден експеримент с група участници всеки е оценил всички останали по, да речем, 10 променливи (напр. „Този ​​човек е симпатичен“, „Този ​​човек е скучен“ и т.н.) в 7 различни времена. Ако искам да получа някакво възприемащо и целево отклонение за една променлива/отговор, бих използвал:

lmer(scale(Var1) ~ (1|target) + (1|perceiver), data= subset(x, time_point == 1))

Тук имаме зависима променлива „Var1“ от рамка с данни „x“ със спецификацията на 1-вата time_point (която също е променлива на x).

Дотук добре, това работи добре.

Сега, както казах, имам множество отговори и множество времеви точки. Затова исках да използвам a) цикъл "for" или b) lapply, за да получа всички модели наведнъж.

Така или иначе, трябва по някакъв начин да "индексирам" зависимата променлива, било то като уточня позицията на колоната (x[,10] с 10 е предполагаемата позиция на Var1) или самата променлива (x$Var1) или (което е поне малко странно) поставяне или отпечатайте името на променливата във формулата (col.names(c[10]).

Това, което се опитвам да кажа е, че нито едно от двете не работи. Винаги получавам грешка за различни променливи дължини. Но, както писах, използвам абсолютно същите колони!

Някой от вас има ли опит с управление на множество lmers?

Всички идеи са добре дошли и се оценяват! Надявам се, че не съм бил твърде неясен, ако имате нужда от допълнителна информация, ще се радвам да предоставя, доколкото мога.

Наздраве, Ал


person Al_    schedule 11.12.2013    source източник
comment
Моля, публикувайте възпроизводим пример. Имената на променливите от Var1 до Var7 ли са? time_point варира ли от 1 до 7?   -  person Sven Hohenstein    schedule 11.12.2013
comment
1) Единичен смесен модел може лесно да се справи с повтарящи се измервания - не съм сигурен, че изграждането на отделни модели има голям статистически смисъл. 2) Показването на резултата от head(x) ще ни помогне много да отговорим на вашия въпрос; още по-добре би било dput(head(x)), така че хората да могат да възстановят част от вашия data.frame за проверка на техния код.   -  person Matt Parker    schedule 11.12.2013
comment
Защо искате да оцените само един фиксиран ефект (прихващане)?   -  person Sven Hohenstein    schedule 11.12.2013
comment
Хей, Свен, благодаря за коментара, самият набор от данни е огромен и аз наистина (по кодиране) не мога да генерирам такъв. Времевите точки варират от 1 до 7, да, и променливите могат да бъдат от Var1 до Var10 (те имат други имена, специфични за съдържанието, но това всъщност няма значение) в колони от 1 до 10. Спецификацията в рамките на lmer- формулата е проблема.   -  person Al_    schedule 11.12.2013
comment
Така че имате по-малко времеви точки, отколкото променливи за отговор. Искате ли всички комбинации от тези два фактора, т.е. 70 модела? Моля, посочете моделите, които търсите.   -  person Sven Hohenstein    schedule 11.12.2013
comment
Здравей, Мат, също благодаря! Не се тревожа за множеството времеви точки, а просто за спецификацията, различна от простото име на променлива във функцията lmer, т.е. трябва да напишете Var1 ~ ... вместо x[,1] ~ ... Тъй като наборът от данни е огромен и аз опростих именуването, не знам дали това ще работи добре (dput(head(x)) също е огромен.   -  person Al_    schedule 11.12.2013
comment
Добре, искам по-късно да продължа и да анализирам допълнителни модели с извлечените произволни ефекти, така че искам да използвам всеки модел сам по себе си. напр. lmer(scale(Var1) ~ (1|target) + (1|perceiver), data= subset(x, time_point == 1))и след това lmer(scale(Var2) ~ (1|target) + (1|perceiver), data= subset(x, time_point == 1)) и така нататък   -  person Al_    schedule 11.12.2013
comment
А, погрешно разбрах - не разбрах, че имате десет различни променливи на резултата.   -  person Matt Parker    schedule 11.12.2013
comment

Когато използвате password-compare, вие не правите връзка с LDAP като потребител, с неговата парола, тъй като се предполага, че се използва LDAP, така че LDAP никога не вижда неуспешния опит за влизане.

Вместо това Spring извлича паролата от потребителския запис, действайки като LDAP администратор, и сравнява самата парола.

Не трябва да използвате тази опция. Това е в противоречие с намерението на дизайна на LDAP.

  -  person Al_    schedule 11.12.2013


Отговори (1)


Бих опитал да преоформя вашите данни, така че всяка оценка да има свой собствен запис, и след това да повторя тези:

library(reshape2)


# This will create a data.frame with one row for each  rating, 
# which are uniquely specified by the characteristic being rated,
# the time point, the perceiver, and the target
# (I think)
x.melt <- melt(x,
               id.var = c("time_point", "perceiver", "target"),
               measure.var = c("Var1", "Var2", "Var3", "Var4",
                               "Var5", "Var6", "Var7")
)


# I'd use plyr to iterate, personally
library(plyr)

# This will return a list containing one model for each combination of variable
# (which are your various outcomes) and time_point
x.models <- dlply(x.melt, .var = c("variable", "time_point"), .fun = function(x) {

    lmer(scale(value) ~ (1|target) + (1|perceiver), data= x))

})


# Which then makes it easy to do things like print summaries for every model
lapply(x.models, summary)

Все още смятам, че има повече смисъл да имате time_point като компонент във вашите модели, в който случай можете просто да го премахнете от аргумента .var = c("variable", "time_point") и да го добавите към спецификацията на модела.

В R много неща стават много по-лесни, когато данните са в правилната форма. Изключително си струва да научите за концепциите за „топене“ и „отливане“ зад пакета reshape2 – не знам как успях да се справя без тях.

person Matt Parker    schedule 11.12.2013
comment
Здравей Мат, страхотно, благодаря, мислех, че това ще е по-лесно, но изглежда добре, ще го пробвам веднага и ще те уведомя. Благодаря! Проблемът с времевата точка в модела би бил, че ще ми трябва като трети произволен ефект и не съм съвсем сигурен дали това е осъществимо. Но така или иначе, това, което искам да направя по-късно, е да извлека с ranef ефектите за всеки субект и да ги анализирам по-нататък в латентните модели на растеж. - person Al_; 11.12.2013
comment
Има начини да се изгради моделна формула от цикъл, както се опитвате да направите, но мисля, че това е по-лесно в дългосрочен план и затова забравих как да го направя. - person Matt Parker; 11.12.2013
comment
От известно време не съм правил много със смесени модели, но разполагането на моделите в списък като този определено ще помогне с всякакъв вид операции, които искате да направите върху целия набор от модели. - person Matt Parker; 11.12.2013
comment
И накрая, има StackOverflow за статистика, stats.stackexchange.com, който определено трябва да проверите за всякакви статистически въпроси, които се появяват. Това е страхотен сайт. - person Matt Parker; 11.12.2013
comment
+1 Предполагам, че искате да замените subset(x, time_point == 1) с x. - person Sven Hohenstein; 11.12.2013
comment
@SvenHohenstein Наистина. Благодаря! - person Matt Parker; 11.12.2013
comment
Страхотна идея, страхотен сайт и да, страхотно е да ги имаш всички поотделно. Благодаря ви двамата! - person Al_; 11.12.2013