2013-04-26 7 views
5

Khi bạn có mô hình đa cấp với nhiều yếu tố và tương tác kích thước tương quan của ma trận hiệu ứng cố định có thể trở nên khá lớn và không rõ ràng.Làm thế nào để trích xuất tương quan của phần hiệu ứng cố định của đầu ra lmer

tôi có thể sử dụng tham số symbolic.cor=T trong phương pháp in để làm cho một bản in rõ ràng hơn về tóm tắt như dưới đây:

ratbrain <- 
within(read.delim("http://www-personal.umich.edu/~bwest/rat_brain.dat"), 
{ 
treatment <- factor(treatment, 
labels = c("Basal", "Carbachol")) 
region <- factor(region, 
labels = c("BST", "LS", "VDB")) 
}) 

print(mod<-lmer(activate ~ region * treatment + (0 + treatment | animal),ratbrain),symbolic.cor=T) 

này âm mưu một ma trận tương quan phần nào rõ ràng hơn cho các ma trận lớn. Mặc dù ma trận của ví dụ này không quá lớn. Nhưng nó sẽ là tốt đẹp nếu tôi có thể vẽ một bản đồ nhiệt của các mối tương quan.
Làm cách nào để trích xuất tương quan của các hiệu ứng cố định để tôi có thể tạo bản đồ nhiệt này?

EDIT:

Dưới đây là các chức năng tôi đã tạo nhờ vào các câu trả lời.

fixeff.plotcorr<-function(mod,...) 
{ 
    #require(GGally) # contains another correlation plot using ggplot2 
    require(lme4) 

    fixNames<-names(fixef(mod)) 

    # Simon O'Hanlon's answer: 
    # so <- summary(mod) 
    # df<-as.matrix([email protected]@factors$correlation) for version lme4<1.0 
    # df<-as.matrix([email protected]$correlation) # lme4 >= 1.0 

    df<-as.matrix(cov2cor(vcov(mod))) #Ben Bolker's solution 

    rownames(df)<-fixNames 
    colnames(df)<-abbreviate(fixNames, minlength = 11) 

    colsc=c(rgb(241, 54, 23, maxColorValue=255), 'white', rgb(0, 61, 104, maxColorValue=255)) 
    colramp = colorRampPalette(colsc, space='Lab') 
    colors = colramp(100) 
    cols=colors[((df + 1)/2) * 100] 
    # I'm using function my.plotcorr which you can download here: 
    # http://hlplab.wordpress.com/2012/03/20/correlation-plot-matrices-using-the-ellipse-library/ 
    my.plotcorr(df, col=cols, diag='none', upper.panel="number", mar=c(0,0.1,0,0),...) 

    # Another possibility is the corrplot package: 
    # cols <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7", 
    #        "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061")) 
    # require(corrplot,quiet=T) 
    # corrplot(df, type="upper", method="number", tl.pos='tl', tl.col='black', tl.cex=0.8, cl.pos='n', col=cols(50)) 
    # corrplot(df,add=TRUE, method='ellipse', type='lower', tl.pos='n', tl.col='black', cl.pos='n', col=cols(50), diag=FALSE) 
} 

Bạn phải tải xuống hàm my.plotcorr từ here. Cốt truyện kết quả của ví dụ trên sử dụng lệnh fixeff.plotcorr(mod) bây giờ trông như thế này: enter image description here

Trả lời

4

Sử dụng phương pháp S4 chức năng niêm yết, chúng tôi có thể trả lại chức năng đó là phái khi print được gọi vào một đối tượng của lớp "mer":

selectMethod(print , "mer") 

Nhìn vào mã nguồn mà được trả lại chúng ta có thể tìm thấy những dòng áp dụng cho bạn:

if (correlation) { 
      corF <- [email protected]@factors$correlation 

so được định nghĩa là tóm tắt các đối tượng của bạn, vì vậy trong trường hợp của bạn, bạn chỉ nên cần phải giải nén:

so <- summary(mod) 
[email protected]@factors$correlation 
5

Tôi không biết phương pháp trực tiếp. Nhưng đây là cách giải quyết.

diag(diag(1/sqrt(vcov(mod)))) %*% vcov(mod) %*% diag(diag(1/sqrt(vcov(mod)))) 
+1

+1 cho những gì tôi sẽ xem xét không phải là giải pháp thay thế, nhưng dẫn xuất toán học về mối tương quan từ ma trận v-cov !! :-) –

5

Làm thế nào về việc sử dụng được xây dựng trong

cov2cor(vcov(mod)) 

?

+0

Đẹp nhất! Tôi không biết chức năng đó. – Robert