Cách mô phỏng phân tích công suất tùy chỉnh của mô hình lm (sử dụng R)


13

Sau những câu hỏi gần đây chúng tôi đã có ở đây .

Tôi đã hy vọng biết liệu có ai đã đi qua hoặc có thể chia sẻ mã R để thực hiện phân tích công suất tùy chỉnh dựa trên mô phỏng cho mô hình tuyến tính không?

Sau này tôi rõ ràng muốn mở rộng nó sang các mô hình phức tạp hơn, nhưng lm dường như là nơi thích hợp để bắt đầu. Cảm ơn.

Câu trả lời:


4

Tôi không chắc bạn cần mô phỏng cho mô hình hồi quy đơn giản. Ví dụ, xem giấy Portable Power . Đối với các mô hình phức tạp hơn, cụ thể là các hiệu ứng hỗn hợp, gói pamm trong R thực hiện phân tích công suất thông qua các mô phỏng. Cũng xem bài đăng của Todd Jobe có mã R để mô phỏng.


1
Liên kết Portable Power bị hỏng. Nếu ai đó có thể cập nhật liên kết, đó sẽ là tuyệt vời. Cám ơn.
Brian P

3

Dưới đây là một vài nguồn mã mô phỏng trong R. Tôi không chắc có bất kỳ mô hình tuyến tính cụ thể nào không, nhưng có lẽ chúng cung cấp đủ ví dụ để lấy ý chính:

  • Benjamin Bolker đã viết một cuốn sách tuyệt vời liệu sinh thái và mô hình với R . Một bản nháp đầu tiên của toàn bộ cuốn sách cùng với mã Sweave có sẵn trực tuyến. Chương 5 đề cập đến phân tích và mô phỏng công suất.

Có một vài ví dụ khác về mô phỏng tại các trang web sau:


0

Chuyển thể từ mô hình sinh thái và dữ liệu của Bolker 2009 trong R. Bạn cần khai báo sức mạnh của xu hướng (tức là độ dốc) mà bạn muốn kiểm tra. Theo trực giác một xu hướng mạnh mẽ và biến thiên thấp sẽ yêu cầu kích thước mẫu nhỏ, xu hướng yếu và biến động lớn sẽ yêu cầu kích thước mẫu lớn.

a = 2  #desired slope
b = 1  #estimated intercept
sd = 20  #estimated variability defined by standard deviation
nsim = 400  #400 simulations
pval = numeric(nsim)  #placeholder for the second for loop output
Nvec = seq(25, 100, by = 1)  #vector for the range of sample sizes to be tested
power.N = numeric(length(Nvec))   #create placeholder for first for loop output
for (j in 1:length(Nvec)) {
  N = Nvec[j]  
  x = seq(1, 20, length = Nvec[j])  #x value length needs to match sample size (Nvec) length
  for (i in 1:nsim) {   #for this value of N, create random error 400 times
    y_det = a + b * x
    y = rnorm(N, mean = y_det, sd = sd)
    m = lm(y ~ x)
    pval[i] = coef(summary(m))["x", "Pr(>|t|)"]  #all the p values for 400 sims
  }  #cycle through all N values
  power.N[j] = sum(pval < 0.05)/nsim  #the proportion of correct p-values (i.e the power)
}
power.N
plot(Nvec, power.N)  #need about 90 - 100 samples for 80% power

Bạn cũng có thể mô phỏng xu hướng tối thiểu bạn có thể kiểm tra cho một cỡ mẫu nhất định, như được hiển thị trong sách

bvec = seq(-2, 2, by = 0.1)
power.b = numeric(length(bvec))
for (j in 1:length(bvec)) {
  b = bvec[j]
   for (i in 1:nsim) {
     y_det = a + b * x
     y = rnorm(N, mean = y_det, sd = sd)
     m = lm(y ~ x)
     pval[i] = coef(summary(m))["x", "Pr(>|t|)"]
     }
   power.b[j] = sum(pval < 0.05)/nsim
  }
 power.b
 plot(bvec, power.b)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.