2014-05-13 12 views
5

Tôi đã lắp một mô hình trong R với lmer() chức năng từ gói lme4. Tôi trèo lên biến phụ thuộc:Cách loại bỏ các hệ số từ một mô hình lmer() - được trang bị với một đáp ứng được thu nhỏ

mod <- lmer(scale(Y) 
       ~ X 
       + (X | Z), 
       data = df, 
       REML = FALSE) 

tôi nhìn vào các hệ số cố định có hiệu lực với fixef(mod):

> fixef(mod) 
    (Intercept)  X1   X2   X3   X4 
    0.08577525 -0.16450047 -0.15040043 -0.25380073 0.02350007 

Nó là khá dễ dàng để tính toán các phương tiện bằng tay từ các hệ số cố định hiệu ứng. Tuy nhiên, tôi muốn chúng được unscaled và tôi không chắc chắn làm thế nào để làm điều này một cách chính xác. Tôi biết rằng việc chia tỷ lệ có nghĩa là trừ đi giá trị trung bình từ mỗi Y và lệch theo độ lệch chuẩn. Nhưng cả hai, trung bình và độ lệch chuẩn, được tính toán từ dữ liệu gốc. Tôi có thể chỉ đơn giản là đảo ngược quá trình này sau khi tôi trang bị một mô hình lmer() bằng cách sử dụng độ lệch trung bình và chuẩn của dữ liệu gốc không?

Cảm ơn bạn đã trợ giúp!


Cập nhật: Cách tôi đưa ra mô hình ở trên có nghĩa là biến phụ thuộc được chia tỷ lệ theo độ lệch chuẩn của tất cả các phản hồi. Thông thường, nó được thực hiện khác nhau. Thay vì lấy trung bình tổng thể và độ lệch chuẩn, các câu trả lời được chuẩn hóa theo từng chủ đề bằng cách sử dụng độ lệch trung bình và chuẩn của các câu trả lời của chủ đề đó. (Điều này là lẻ trong một lmer() Tôi nghĩ như là đánh chặn ngẫu nhiên nên chăm sóc đó ... Chưa kể thực tế là chúng ta đang nói về phương tiện tính toán trên một quy mô thứ tự ...) Tuy nhiên vấn đề vẫn như cũ: Một khi tôi được trang bị một mô hình như vậy, có cách nào sạch sẽ để rescale các hệ số của mô hình được trang bị?

+0

tôi không chắc chắn có một cách đơn giản để "un quy mô" các procedu sau lại (tức là mở rộng từng đối tượng riêng biệt) - điều này thực sự giống như một mô hình khác với tôi ... Tôi cũng không hoàn toàn chắc chắn tại sao bạn muốn ... –

+1

Tôi nghi ngờ điều này. Cho dù tôi đã viết mô hình như thế nào đi nữa, tôi đã không nghĩ ra cách hợp lý để giải cứu. Tôi hoàn toàn đồng ý với thủ tục này là lẻ. Nhưng nó có thể được tìm thấy trong một số giấy tờ. Tôi không hiểu tại sao bạn sẽ combinde tiêu chuẩn hóa các phản ứng cho mỗi chủ đề và cho phép chặn ngẫu nhiên. Điều đó có vẻ như hai điều giải quyết cùng một vấn đề; thậm chí có thể đánh giá thấp sự khác biệt cá nhân thích hợp. Nhưng cảm ơn rất nhiều vì đã cố gắng đưa ra câu trả lời! –

Trả lời

6

Đã cập nhật: được khái quát hóa để cho phép thu nhỏ phản hồi cũng như các yếu tố dự báo.

Dưới đây là triển khai khá thô lỗ.

Nếu ban đầu (chưa định tỷ lệ) hồi quy của chúng tôi là

Y = b0 + b1*x1 + b2*x2 ... 

Sau đó, hồi quy quy mô của chúng tôi là

(Y0-mu0)/s0 = b0' + (b1'*(1/s1*(x1-mu1))) + b2'*(1/s2*(x2-mu2))+ ... 

này tương đương với

Y0 = mu0 + s0((b0'-b1'/s1*mu1-b2'/s2*mu2 + ...) + b1'/s1*x1 + b2'/s2*x2 + ...) 

Vì vậy bi = s0*bi'/si cho i>0

b0 = s0*b0'+mu0-sum(bi*mui) 

Thực hiện điều này:

rescale.coefs <- function(beta,mu,sigma) { 
    beta2 <- beta ## inherit names etc. 
    beta2[-1] <- sigma[1]*beta[-1]/sigma[-1] 
    beta2[1] <- sigma[1]*beta[1]+mu[1]-sum(beta2[-1]*mu[-1]) 
    beta2 
} 

Hãy thử nó ra cho một mô hình tuyến tính:

m1 <- lm(Illiteracy~.,as.data.frame(state.x77)) 
b1 <- coef(m1) 

Thực hiện một phiên bản thu nhỏ của dữ liệu:

ss <- scale(state.x77) 

hệ số theo tỷ lệ:

m1S <- update(m1,data=as.data.frame(ss)) 
b1S <- coef(m1S) 

Bây giờ thử rescaling:

icol <- which(colnames(state.x77)=="Illiteracy") 
p.order <- c(icol,(1:ncol(state.x77))[-icol]) 
m <- colMeans(state.x77)[p.order] 
s <- apply(state.x77,2,sd)[p.order] 
all.equal(b1,rescale.coefs(b1S,m,s)) ## TRUE 

này giả định rằng cả hai phản ứng và dự đoán được thu nhỏ.

  • Nếu bạn mở rộng chỉ phản ứng và không phải là yếu tố dự báo, sau đó bạn phải nộp (c(mean(response),rep(0,...)) cho mc(sd(response),rep(1,...)) cho s (
  • tức, ms là những giá trị mà các biến đã được chuyển và quy mô).
  • Nếu bạn mở rộng chỉ dự đoán và không phải là câu trả lời, sau đó nộp c(0,mean(predictors)) cho mc(1,sd(predictors)) cho s.
+1

Bạn dường như đã thu nhỏ các biến độc lập 'icol <- mà (colnames (state.x77) ==" Illiteracy ")', 'ss <- state.x77',' ss [, - icol] <- scale (ss [, -icol]) '. Nhưng tôi đã thu nhỏ biến phụ thuộc trong thiết kế. Vì vậy, những gì tôi đã làm bằng cách sử dụng dữ liệu 'state.x77' là:' m1Sy <- lm (scale (Illiteracy) ~., As.data.frame (state.x77)) '. Bây giờ tôi nhận được hệ số chuyển đổi z trong đầu ra mô hình và tôi muốn đảo ngược điều này để vẽ các phương tiện trên thang đo gốc. Nhưng có lẽ tôi hiểu sai giải pháp của bạn. –

+0

Và trong trường hợp một số nền hữu ích: Có vẻ là một xu hướng mạnh mẽ để mở rộng các đáp ứng thứ tự và phù hợp với một 'lmer()' trên nó trong một số ngành nhất định. Không chỉ là tôi nghi ngờ rằng điều này là hợp lý (biến thứ tự) nhưng tôi thấy mình hỏi làm thế nào họ lấy lại quy mô ban đầu, ví dụ: khi vẽ vạch trung bình (đánh giá) và các thanh lỗi.Liên quan chặt chẽ: ['lmer()' vs 'clmm()' với đáp ứng thứ tự] (http://stats.stackexchange.com/questions/97582/linear-mixed-effect-model-vs-ordered-probit-vs- đặt hàng-logit-với-ordinal-resp) –

+0

oops, trả lời câu hỏi sai - sẽ trở lại điều này. –

Các vấn đề liên quan