Bạn có thể kiểm tra mức ý nghĩa của các tham số mô hình, với sự trợ giúp của các khoảng tin cậy ước tính mà gói lme4 có confint.merMod
chức năng.
bootstrapping (xem ví dụ Khoảng tin cậy từ bootstrap )
> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|participant_id 0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id 0.02249989 0.46871800
sigma 0.97933979 1.08314696
(Intercept) -0.29669088 0.06169473
conditionexperimental 0.26539992 0.60940435
hồ sơ khả năng (xem ví dụ Mối quan hệ giữa khả năng hồ sơ và khoảng tin cậy là gì? )
> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|participant_id 0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id 0.0000000 0.49076950
sigma 0.9759407 1.08217870
(Intercept) -0.2999380 0.07194055
conditionexperimental 0.2707319 0.60727448
Cũng có một phương pháp 'Wald'
nhưng điều này chỉ được áp dụng cho các hiệu ứng cố định.
Cũng tồn tại một số loại biểu thức anova (tỷ lệ khả năng) trong gói lmerTest
được đặt tên ranova
. Nhưng tôi dường như không thể hiểu điều này. Sự phân phối của sự khác biệt về logLikabilities, khi giả thuyết null (phương sai không cho hiệu ứng ngẫu nhiên) là không phân phối chi bình phương (có thể khi số lượng người tham gia và thử nghiệm cao, thử nghiệm tỷ lệ có thể có ý nghĩa).
Phương sai trong các nhóm cụ thể
Để có được kết quả cho phương sai trong các nhóm cụ thể, bạn có thể xác định lại thông số
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
Nơi chúng tôi đã thêm hai cột vào khung dữ liệu (điều này chỉ cần thiết nếu bạn muốn đánh giá chức năng 'kiểm soát' và 'thử nghiệm' không tương quan(0 + condition || participant_id)
sẽ không dẫn đến việc đánh giá các yếu tố khác nhau trong điều kiện là không tương quan)
#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")
Hiện nay lmer
sẽ cung cấp phương sai cho các nhóm khác nhau
> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
Data: d
REML criterion at convergence: 2408.186
Random effects:
Groups Name Std.Dev.
participant_id control 0.4963
participant_id.1 experimental 0.4554
Residual 1.0268
Number of obs: 800, groups: participant_id, 40
Fixed Effects:
(Intercept) conditionexperimental
-0.114 0.439
Và bạn có thể áp dụng các phương pháp hồ sơ cho những điều này. Ví dụ, hiện tại confint cung cấp khoảng tin cậy cho sự kiểm soát và phương sai ngoại lệ.
> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
2.5 % 97.5 %
sd_control|participant_id 0.3490873 0.66714568
sd_experimental|participant_id 0.3106425 0.61975534
sigma 0.9759407 1.08217872
(Intercept) -0.2999382 0.07194076
conditionexperimental 0.1865125 0.69149396
Sự đơn giản
Bạn có thể sử dụng hàm khả năng để có được các so sánh nâng cao hơn, nhưng có nhiều cách để thực hiện xấp xỉ dọc đường (ví dụ: bạn có thể thực hiện kiểm tra anova / lrt-bảo thủ, nhưng đó có phải là điều bạn muốn không?).
Tại thời điểm này, nó làm cho tôi tự hỏi đâu là điểm thực sự của sự so sánh này (không phổ biến) giữa các phương sai. Tôi tự hỏi liệu nó bắt đầu trở nên quá tinh vi. Tại sao sự khác biệt giữa phương sai thay vì tỷ lệ giữa phương sai (liên quan đến phân phối F cổ điển)? Tại sao không chỉ báo cáo khoảng tin cậy? Chúng ta cần lùi lại một bước, và làm rõ dữ liệu và câu chuyện đáng lẽ phải kể, trước khi đi vào những con đường tiên tiến có thể là thừa và lỏng lẻo với vấn đề thống kê và những cân nhắc thống kê thực sự là chủ đề chính.
Tôi tự hỏi liệu người ta có nên làm nhiều hơn không chỉ đơn giản là nêu các khoảng tin cậy (mà thực tế có thể nói nhiều hơn một bài kiểm tra giả thuyết. Một bài kiểm tra giả thuyết không đưa ra câu trả lời nào nhưng không có thông tin nào về sự lây lan thực sự của dân số. làm cho bất kỳ sự khác biệt nhỏ được báo cáo là một sự khác biệt đáng kể). Để đi sâu hơn vào vấn đề (cho bất kỳ mục đích nào), tôi tin rằng, một câu hỏi nghiên cứu cụ thể hơn (được xác định hẹp) để hướng dẫn bộ máy toán học thực hiện các đơn giản hóa phù hợp (ngay cả khi một phép tính chính xác có thể khả thi hoặc khi nó có thể được xấp xỉ bằng mô phỏng / bootstrapping, ngay cả trong một số cài đặt, nó vẫn yêu cầu một số giải thích phù hợp). So sánh với bài kiểm tra chính xác của Fisher để giải quyết một câu hỏi (cụ thể) (về các bảng dự phòng) chính xác,
Ví dụ đơn giản
Để đưa ra một ví dụ về sự đơn giản có thể tôi đưa ra dưới đây so sánh (bằng mô phỏng) với một đánh giá đơn giản về sự khác biệt giữa hai phương sai nhóm dựa trên phép thử F được thực hiện bằng cách so sánh phương sai trong các phản ứng trung bình riêng lẻ và được thực hiện bằng cách so sánh mô hình hỗn hợp dẫn xuất phương sai.
j
Y^i,j∼N(μj,σ2j+σ2ϵ10)
σεσjj = { 1 , 2 } ) là bằng nhau thì tỷ lệ cho phương sai cho 40 phương tiện trong tình trạng này 1 và phương sai của 40 có nghĩa là trong điều kiện 2 được phân phối theo phân bố F với bậc tự do 39 và 39 cho tử số và mẫu số.
Bạn có thể thấy điều này trong mô phỏng biểu đồ bên dưới, trong đó dành cho điểm F dựa trên mẫu có nghĩa là điểm F được tính dựa trên phương sai dự đoán (hoặc tổng sai số bình phương) từ mô hình.
σj=1=σj=2=0.5σϵ=1 .
Bạn có thể thấy rằng có một số khác biệt. Sự khác biệt này có thể là do thực tế là mô hình tuyến tính hiệu ứng hỗn hợp đang thu được tổng các lỗi bình phương (cho hiệu ứng ngẫu nhiên) theo một cách khác. Và các thuật ngữ lỗi bình phương này không còn được thể hiện dưới dạng phân phối Chi bình phương đơn giản, nhưng vẫn liên quan chặt chẽ và chúng có thể được xấp xỉ.
σj=1≠σj=2Y^i,jσjσϵ
σj=1=0.5σj=2=0.25σϵ=1
Vì vậy, mô hình dựa trên các phương tiện là rất chính xác. Nhưng nó ít mạnh mẽ hơn. Điều này cho thấy chiến lược chính xác phụ thuộc vào những gì bạn muốn / cần.
Trong ví dụ trên khi bạn đặt ranh giới đuôi bên phải là 2.1 và 3.1, bạn nhận được khoảng 1% dân số trong trường hợp phương sai bằng nhau (tương ứng 103 và 104 trong số 10 000 trường hợp) nhưng trong trường hợp phương sai không bằng nhau, các ranh giới này khác nhau rất nhiều (đưa ra 534 và 6716 trường hợp)
mã:
set.seed(23432)
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"
n <- 10000
theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)
# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
#adding extra columns for control and experimental
ds <- cbind(ds,as.numeric(ds$condition=='control'))
ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
names(ds)[c(4,5)] <- c("control","experimental")
# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)
pb <- txtProgressBar(title = "progress bar", min = 0,
max = n, style=3)
for (i in 1:n) {
indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups
#fill <- suppressMessages(simulate(formula(fml),
# newparams=list(beta=c(0, .5),
# theta=c(.5, 0, 0),
# sigma=1),
# family=gaussian,
# newdata=ds))
d <- cbind(ds, fill)
names(d)[6] <- c("sim_1")
m <- lmer(paste("sim_1 ", fml1), data=d)
m
theta_m[i,] <- m@theta^2
imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
theta_f[i,1] <- var(imeans[c(1:40),3])
theta_f[i,2] <- var(imeans[c(41:80),3])
setTxtProgressBar(pb, i)
}
close(pb)
p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))
plot(-100,-100, xlim=c(0,6), ylim=c(0,800),
xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T) # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T) # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"),
fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"),
lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))