Như @Mike Lawrence đã đề cập đến điều rõ ràng phải làm khi xác định một mô hình không có hiệu ứng cố định là một cái gì đó dưới dạng:
lmer(y ~ -1 + (1|GroupIndicator))
điều này thực sự khá đơn giản; người ta định nghĩa không có đánh chặn hoặc ma trận X. Lý do cơ bản mà điều này không giải quyết được là vì @maxTC đã chỉ ra " gói lme4 chỉ dành riêng cho các mô hình hỗn hợp ".
Cụ thể, những gì phù hợp lmer () thực hiện là tính toán độ lệch được định hình bằng cách giải hồi quy bình phương tối thiểu bị phạt giữa và cũng như các hiệu ứng ngẫu nhiên hình cầu và (Phương trình (11), Tham chiếu. (2)). Tính toán quy trình tối ưu hóa này tính toán phân tách Cholesky của hệ thống tương ứng khai thác cấu trúc khối của hệ thống (Phương trình (5), Tham chiếu (1)). Thiết lập không có hiệu ứng cố định toàn cầu thực tế làm biến dạng cấu trúc khối theo cách mà mã của lmer () không thể đối phó. Trong số những thứ khác, giá trị mong đợi có điều kiện của dựa trên nhưng giải quyết cho yu0u beta beta RXXLXy^yu0uβ^β^hỏi giải pháp của một hệ thống ma trận chưa từng tồn tại (ma trận trong Tham chiếu (1) hoặc trong Tham chiếu (2)). Vì vậy, bạn nhận được một lỗi như:RXXLX
Error in mer_finalize(ans) :
Cholmod error 'invalid xtype' at file:../Cholesky/cholmod_solve.c, line 970
nguyên nhân sau tất cả không có gì để giải quyết ngay từ đầu.
Giả sử bạn không muốn viết lại hàm chi phí sai lệch được mô tả bằng lmer (), giải pháp đơn giản nhất dựa trên tiên đề CS-101: rác vào, rác ra .
N = length(y); Garbage <- rnorm(N);
lmer(y ~ -1 + Garbage + (1|GroupIndicator));
Vì vậy, những gì chúng ta làm là xác định một biến đổi chỉ là tiếng ồn; như trước lmer () được hướng dẫn không sử dụng chặn cố định mà chỉ có ma trận X xác định chúng tôi (trong trường hợp này là Rác ma trận cột đơn). Biến nhiễu Gaussian bổ sung này sẽ được mong đợi không tương thích với các lỗi đo mẫu của chúng tôi cũng như với phương sai hiệu ứng ngẫu nhiên của bạn. Không cần phải nói cấu trúc càng nhiều mô hình của bạn có xác suất nhận được các mối tương quan ngẫu nhiên không mong muốn nhưng có ý nghĩa thống kê càng nhỏ.Garbage
Vì vậy, lmer () có biến giả dược (ma trận) để chơi, bạn dự kiến sẽ có liên kết bằng 0 và bạn không phải bình thường hóa dữ liệu của mình theo bất kỳ cách nào (tập trung vào chúng, làm trắng chúng, v.v.) . Có lẽ việc thử một vài khởi tạo ngẫu nhiên của ma trận giả dược cũng sẽ không gây hại. Một lưu ý cuối cùng cho "Rác": sử dụng tiếng ồn Gaussian không phải là "tình cờ"; nó có entropy lớn nhất trong số tất cả các biến ngẫu nhiên có phương sai bằng nhau nên cơ hội cung cấp thông tin ít nhất.β XXβX
Rõ ràng, đây là một thủ thuật tính toán hơn là một giải pháp, nhưng nó cho phép người dùng chỉ định một cách hiệu quả một mô hình lmer mà không có hiệu ứng cố định toàn cầu. Xin lỗi vì hy vọng xung quanh hai tài liệu tham khảo. Nói chung, tôi nghĩ rằng Ref. (1) là đặt cược tốt nhất cho bất cứ ai để nhận ra những gì lmer () đang làm, nhưng Ref. (2) gần với tinh thần của mã thực tế.
Đây là một chút mã trình bày ý tưởng ở trên:
library(lme4)
N= 500; #Number of Samples
nlevA = 25; #Number of levels in the random effect
set.seed(0) #Set the seed
e = rnorm(N); e = 1*(e - mean(e) )/sd(e); #Some errors
GroupIndicator = sample(nlevA, N, replace=T) #Random Nvel Classes
Q = lmer( rnorm(N) ~ (1| GroupIndicator )); #Dummy regression to get the matrix Zt easily
Z = t(Q@Zt); #Z matrix
RA <- rnorm(nlevA ) #Random Normal Matrix
gammas =c(3*RA/sd(RA)) #Colour this a bit
y = as.vector( Z %*% gammas + e ) #Our measurements are the sum of measurement error (e) and Group specific variance
lmer_native <- lmer(y ~ -1 +(1| GroupIndicator)) #No luck here.
Garbage <- rnorm(N) #Prepare the garbage
lmer_fooled <- lmer(y ~ -1 + Garbage+(1| GroupIndicator)) #OK...
summary(lmer_fooled) #Hey, it sort of works!
Người giới thiệu:
- Các mô hình hỗn hợp tuyến tính và bình phương tối thiểu bị phạt bởi DM Bates và S. DebRoy, Tạp chí Phân tích đa biến, Tập 91 Số 1, tháng 10 năm 2004 ( Liên kết đến bản in trước )
- Phương pháp tính toán cho các mô hình hỗn hợp của Douglas Bates, tháng 6 năm 2012. ( Liên kết với nguồn )
lmer(y~0+(1|group)+(0+x|group))
sẽ hoạt động, nhưng điều này dẫn đến một lỗi.