2013-08-21 2 views
1

Из этих данных:Добавление двух случайных эффектов в пределах фактора: GAM

UQdata MudUQ Estuary Site 
7.00 10.9 NoriPau A 
6.00 13.9 NoriPau A 
5.00 10.3 NoriPau B 
4.00 7.9  Porirua A 
4.00 8.3  Porirua A 
4.00 8.7  Porirua A 
4.00 10.9 NoriPau B 
3.00 9.8  Porirua B 
3.00 9.8  Porirua B 
3.00 11.5 Porirua B 

Я фитинг ниже модели GAM с использованием пакета mgcv:

aa2.estuary <- gam(UQdata~s(MudUQ, bs="ps", k=5) + s(Estuary, bs="re"), 
        family=Gamma(link=log),data=Antho) 

Проблема: Я хочу добавить Estuary и Site в Estuary как два случайных эффектов (т.е. s(Estuary ~ Site + Estuary, bs="re")), но когда я пытаюсь это он выдает эту ошибку:

aa2.estuary <- gam(UQdata ~ s(MudUQ,bs="ps", k=5) + 
        s(Estuary~Estuary+Site, bs="re"), 
        family=Gamma(link=log),data=Antho) 

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels 
In addition: Warning message: 
In s(Estuary ~ Estuary + Site, bs = "re") : 
    number of items to replace is not a multiple of replacement length 

Любая помощь здесь будет высоко оценена.


mnel, я попробовал ваш предложить строку:

> aa1.estuary<-gam(UQdata~s(MudUQ,bs="ps", k=5) + s(Estuary, bs="re") + s(Site, Estuary, bs = 're'),family=binomial, gamma=1,data=Antho) 
Error in while (mean(ldxx/(ldxx + ldss)) < 0.4) { : 
    missing value where TRUE/FALSE needed 

Любые идеи?

+1

Можете ли вы опубликовать воспроизводимый пример (например, некоторые данные) - пример для 'bs = 're'' из'? Gam.vcomp' не предполагает, что ваш 's (Estuary ~ Site + Estuary, bs = 're') 'правильно (без упоминания интерфейса формулы в вызове' s'). Возможно, 's (Estuary, bs = 're') + s (Site, Estuary, bs = 're')' - это то, что вы хотите – mnel

+0

@mnel Я думаю, это зависит от того, считается ли 'Site: Estuary-1'' Сайт '* вложен * в' Устье''. '? smooth.construct.re.smooth.spec' имеет более подробную информацию. Если это не считается вложенным, может быть проще переключиться на пакет ** gamm4 ** и использовать его 'gamm()', который использует 'glmer()' для соответствия моделям. –

+0

Я добавил новую информацию к вышеуказанной проблеме – brober

ответ

0

Возвращаясь к исходным данным и переименование Sites в ассоциации с каждым лимана (см):

UQdata MudUQ Estuary Site 
7.00 10.9 NoriPau Nori1 
6.00 13.9 NoriPau Nori1 
5.00 10.3 NoriPau Nori2 
4.00 7.9  Porirua Pori1 
4.00 8.3  Porirua Pori1 
4.00 8.7  Porirua Pori1 
4.00 10.9 NoriPau Nori2 
3.00 9.8  Porirua Pori2 
3.00 9.8  Porirua Pori2 
3.00 11.5 Porirua Pori2 

И в том числе Site как другой случайный эффект:

aa2.estuary <- gam(UQdata ~ s(MudUQ,bs="ps", k=5) + s(Estuary, bs="re") + s(Site, bs="re"),family=Gamma(link=log),data=Antho) 

И не беспокоиться о который вложен в него. Это учитывает как корреляции в пределах Site, так и корреляции в пределах Estuary.