2012-02-25 14 views
20

że wykorzystują lme4 w B w celu dopasowania modelu mieszanegoJak działki wyniki modelu mieszanego

lmer(value~status+(1|experiment))) 

gdzie wartość jest ciągła, stan (N/D/C), a doświadczenia są czynniki i uzyskać

Linear mixed model fit by REML 
Formula: value ~ status + (1 | experiment) 
    AIC BIC logLik deviance REMLdev 
29.1 46.98 -9.548 5.911 19.1 
Random effects: 
Groups  Name  Variance Std.Dev. 
experiment (Intercept) 0.065526 0.25598 
Residual    0.053029 0.23028 
Number of obs: 264, groups: experiment, 10 

Fixed effects: 
      Estimate Std. Error t value 
(Intercept) 2.78004 0.08448 32.91 
statusD  0.20493 0.03389 6.05 
statusR  0.88690 0.03583 24.76 

Correlation of Fixed Effects: 
     (Intr) statsD 
statusD -0.204  
statusR -0.193 0.476 

Chciałbym graficznie reprezentować stałą ocenę efektów. Jednak wydaje się, że nie jest to funkcja wydruku dla tych obiektów. Czy istnieje sposób, w jaki mogę graficznie przedstawić stałe efekty?

+0

Zobacz 'coefplot' lub' coefplot2 'pakiety na CRAN. I użyj argumentu 'data =' do struktury procesu dopasowania modelu ... –

+1

Nie myśl, że coefplot działa z modelami mieszanymi. – ECII

+0

Przepraszam, miałem na myśli funkcję 'coefplot' w pakiecie' arm' (która ma) –

Odpowiedz

9

Oto kilka sugestii.

library(ggplot2) 
library(lme4) 
library(multcomp) 
# Creating datasets to get same results as question 
dataset <- expand.grid(experiment = factor(seq_len(10)), 
         status = factor(c("N", "D", "R"), 
         levels = c("N", "D", "R")), 
         reps = seq_len(10)) 
dataset$value <- rnorm(nrow(dataset), sd = 0.23) + 
        with(dataset, rnorm(length(levels(experiment)), 
         sd = 0.256)[experiment] + 
        ifelse(status == "D", 0.205, 
          ifelse(status == "R", 0.887, 0))) + 
        2.78 

# Fitting model 
model <- lmer(value~status+(1|experiment), data = dataset) 

# First possibility 
tmp <- as.data.frame(confint(glht(model, mcp(status = "Tukey")))$confint) 
tmp$Comparison <- rownames(tmp) 
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) + 
    geom_errorbar() + geom_point() 

# Second possibility 
tmp <- as.data.frame(confint(glht(model))$confint) 
tmp$Comparison <- rownames(tmp) 
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) + 
    geom_errorbar() + geom_point() 

# Third possibility 
model <- lmer(value ~ 0 + status + (1|experiment), data = dataset) 
tmp <- as.data.frame(confint(glht(model))$confint) 
tmp$Comparison <- rownames(tmp) 
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) + 
    geom_errorbar() + geom_point() 
+0

Czy możesz wyjaśnić użycie 'glht' w swoim kodzie? Czytałem, że jest to funkcja do testowania [ogólnych hipotez liniowych] (https://www.rdocumentation.org/packages/multcomp/versions/1.4-6/topics/glht), co jest tu trochę niepotrzebne ... Po prostu przetestowałem to z bardziej złożoną kombinacją zestawów danych/modeli z więcej niż jednym stałym efektem, to nie daje mi już nazw "Porównanie" ... Czy istnieje sposób, aby uczynić twój kod bardziej ogólnym? –

19

Stosując coefplot2 (w r-Forge)

kradzież kod symulacji z @Thierry:

set.seed(101) 
dataset <- expand.grid(experiment = factor(seq_len(10)), 
    status = factor(c("N", "D", "R"), levels = c("N", "D", "R")), 
    reps = seq_len(10)) 
X <- model.matrix(~status,dataset) 
dataset <- transform(dataset, 
    value=rnorm(nrow(dataset), sd = 0.23) + ## residual 
    rnorm(length(levels(experiment)), sd = 0.256)[experiment] + ## block effects 
    X %*% c(2.78,0.205,0.887)) ## fixed effects 

Fit modelu

library(lme4) 
model <- lmer(value~status+(1|experiment), data = dataset) 

Opis:

install.packages("coefplot2",repos="http://r-forge.r-project.org") 
library(coefplot2) 
coefplot2(model) 

edit:

I często były problemy z kompilacji R-Forge. Ta awaryjna powinna działać, jeśli build R-Forge nie działa:

install.packages("coefplot2", 
    repos="http://www.math.mcmaster.ca/bolker/R", 
    type="source") 

Należy zauważyć, że zależność coda musi być już zainstalowany.

+0

Dzięki za twój wkład Ben. Widzę, że symulujesz zbiór danych, budujesz model i używasz coefplot2. Jednak nie mogę znaleźć coefplot2 w CRAN. Czy istnieje inne repozytorium dla tych pakietów? – ECII

+0

yes - zobacz mój komentarz powyżej i (edytowane) polecenie 'install.packages()' w powyższym kodzie, które odwołuje się do r-kuge (jestem dzisiaj kościany). Jest na r-kuge ... –

+0

Widzę, że obecny status pakietu coefplot 2 to: "Nie można zbudować" i nie można go zainstalować w wersji 2.15.2. Czy dalszy rozwój został porzucony? I dla których R vers. czy można go używać? –

12

Lubię zaufanie współczynnik interwału działek, ale może być przydatny do rozważenia kilka dodatkowych działek zrozumieć trwałych efektów ..

Kradzież kodu symulacji z @Thierry:

library(ggplot2) 
library(lme4) 
library(multcomp) 
dataset <- expand.grid(experiment = factor(seq_len(10)), status = factor(c("N", "D", "R"), levels = c("N", "D", "R")), reps = seq_len(10)) 
dataset$value <- rnorm(nrow(dataset), sd = 0.23) + with(dataset, rnorm(length(levels(experiment)), sd = 0.256)[experiment] + ifelse(status == "D", 0.205, ifelse(status == "R", 0.887, 0))) + 2.78 
model <- lmer(value~status+(1|experiment), data = dataset) 

Get spojrzeć na strukturę danych ... wygląda zrównoważony ..

library(plotrix); sizetree(dataset[,c(1,2)]) 

enter image description here

Może być interesujące śledzenie korelacji między stałymi efektami, szczególnie jeśli dopasujesz różne struktury korelacji. Jest trochę chłodno kod umieszczony na poniższym linkiem ...

http://hlplab.wordpress.com/2012/03/20/correlation-plot-matrices-using-the-ellipse-library/

my.plotcorr(
matrix(c(1,  .891, .891, 
     .891, 1,  .891, 
     .891, .891, 1), nrow=3) 
) 

very basic implementation of function

Wreszcie wydaje się istotne, aby spojrzeć na zmienność w całej 10 eksperymentów, jak również zmienność w całej „statusu "w ramach eksperymentów. Nadal pracuję nad kodem, ponieważ łamie go na niezrównoważonych danych, ale pomysł jest ...

My2Boxes(m=4,f1=dataset$experiment,f2=dataset$status,x=dataset$value,color=c("red","yellow","green")) 

enter image description here

Wreszcie wspomniana już Piniero i Bates (2000) książka mocno faworyzowany siatkę z czego niewiele mam odtłuszczone .. Więc można podać, że strzał. Może coś wykreślenie dane surowe ...

lattice::xyplot(value~status | experiment, groups=experiment, data=dataset, type=c('p','r'), auto.key=F) 

enter image description here

A potem wykreślenie wartości dopasowanych ...

lattice::xyplot(fitted(model)~status | experiment, groups=experiment, data=dataset, type=c('p','r'), auto.key=F) 

enter image description here

Powiązane problemy