Có một phương pháp chung để mô phỏng dữ liệu từ một công thức hoặc phân tích có sẵn không?


16

Mô phỏng dữ liệu từ khung dữ liệu thiết kế thử nghiệm.
Tập trung vào R (mặc dù giải pháp ngôn ngữ khác sẽ rất tuyệt).

Khi thiết kế một thí nghiệm hoặc khảo sát, mô phỏng dữ liệu và tiến hành phân tích dữ liệu mô phỏng này có thể cung cấp cái nhìn sâu sắc tuyệt vời về ưu điểm và điểm yếu của thiết kế.

Cách tiếp cận như vậy cũng có thể cần thiết cho sự hiểu biết và sử dụng đúng các bài kiểm tra thống kê.

Tuy nhiên, quá trình này có xu hướng hơi tẻ nhạt và nhiều người được dẫn đến bỏ qua bước quan trọng này trong một thử nghiệm hoặc khảo sát.

Các mô hình thống kê và kiểm tra chứa hầu hết các thông tin cần thiết để mô phỏng dữ liệu (bao gồm cả giả định hoặc tuyên bố rõ ràng về phân phối).

Đưa ra một mô hình phân tích (và các giả định liên quan của nó, ví dụ: tính quy tắc và cân bằng), các mức của một yếu tố và thước đo tầm quan trọng (như giá trị p), tôi muốn có được dữ liệu mô phỏng (lý tưởng với chức năng tổng quát gần giống với in (), dự đoán (), mô phỏng ()).

Là một khung mô phỏng tổng quát như vậy có thể?

Nếu vậy, một khung như vậy hiện đang có sẵn?

Ví dụ, tôi muốn một hàm, chẳng hạn như:

 sim(aov(response~factor1+factor2*factor3),
          p.values=list(factor1=0.05,
                        factor2=0.05,
                        factor3=0.50,
                        factor2:factor3=0.05),
          levels=list(factor1=1:10,
                      factor2=c("A", "B", "C"),
                      factor3=c("A", "B", "C")))

tức là, một phiên bản tổng quát của:

sim.lm<-function(){
library(DoE.base)
design<-fac.design(nlevels=c(10,3,3),
                   factor.names=c("factor1", "factor2", "factor3"),
                   replications=3,
                   randomize=F)

response<-with(design, as.numeric(factor1)+
                      as.numeric(factor2)+
                      as.numeric(factor3)+
                      as.numeric(factor2)*as.numeric(factor3)+
                      rnorm(length(factor1)))

simulation<-data.frame(design, response)}

HOẶC LÀ

sim(glm(response~factor1+factor2*factor3, family=poisson),
         p.values=list(factor1=0.05,
                       factor2=0.05,
                       factor3=0.50,
                       factor2:factor3=0.05),
         levels=list(factor1=1:10,
                     factor2=c("A", "B", "C"),
                     factor3=c("A", "B", "C")))

HOẶC LÀ

  library(lme4)
  sim(lmer(response~factor1+factor2 + (factor2|factor3)),
           F_value=list(factor1=50,
                        factor2=50),
           levels=list(factor1=1:10,
                       factor2=c("A", "B", "C"),
                       factor3=c("A", "B", "C")))

điều đó sẽ tạo ra một data.frame tương ứng hoàn chỉnh

ví dụ tiềm năng của các chức năng cụ thể (vui lòng chỉnh sửa theo ý muốn)
- arima.sim

Hàm tồn tại để tạo một data.frame của các cấp yếu tố, mà không có phản hồi được mô hình hóa:
vd. conf.design
http://cran.r-project.org/web/view/ExperimentalDesign.html


Một điều cần lưu ý là bạn cần chỉ định phân phối lỗi. Ngoài ra, tôi hoàn toàn không tuân theo danh sách "p.values" hoặc "F_value" của bạn; ý tưởng rằng các bản phân phối lấy mẫu của F & p có được tập trung vào các số được liệt kê không?
gung - Phục hồi Monica

@gung, phân phối được giả định trong thử nghiệm (cả ở đây đều giả định tính quy phạm hoặc tôi sẽ phải sử dụng một cái gì đó như glm).
Etienne Low-Décarie

Các bài kiểm tra chắc chắn không thừa nhận sự phân bố cụ thể, nhưng điều đó không có nghĩa là các dữ liệu đã thực sự được tạo ra theo cách đó. Bạn có thể tạo dữ liệu từ bất kỳ số lượng phân phối nào cho các mục đích khác nhau (ví dụ: nghiên cứu mô phỏng, độ mạnh, v.v.).
gung - Phục hồi Monica

@gung, tôi đã cố gắng chỉnh sửa câu hỏi của mình để làm rõ rằng tôi muốn tạo một tập dữ liệu tương ứng với mong đợi của bài kiểm tra / mô hình. Tôi không tìm kiếm một cái gì đó cho một nghiên cứu mô phỏng hoặc cho một nghiên cứu mạnh mẽ, nhưng để cung cấp một thiết kế thử nghiệm khô khan.
Etienne Low-Décarie

Câu trả lời:


10

Thực sự có một cái chung S3 simulatethậm chí trả về khung dữ liệu (hoặc danh sách khác) mà bạn muốn. Kiểu

?simulate  

Nó có các phương thức cho các lớp lm (cũng hoạt động cho glm hoặc cho ví dụ aov của bạn) và glm.nb (trong MASS) rồi. Bây giờ bạn có thể viết simulatecác phương thức S3 cho các lớp đối tượng khác, ví dụ cho các đối tượng từ lme4. Bạn có thể kiểm tra xem các lớp có phương thức nào bằng cách gõ

getAnywhere("simulate.class"), getAnywhere("simulate")  

hoặc là

getS3method("simulate","class"), methods(simulate) 

mô phỏng sẽ là tuyệt vời nếu nó không yêu cầu "một đối tượng đại diện cho một mô hình được trang bị" mà bản thân nó đã yêu cầu dữ liệu hoặc dữ liệu mô phỏng.
Etienne Low-Décarie

>getAnywhere("simulate.class") no object named ‘simulate.class’ was found >getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Etienne Low-Décarie

2
Người ta luôn có thể xây dựng một đối tượng được trang bị ban đầu với tất cả các giá trị phản hồi là 0, và thay thế các hệ số phù hợp với các giá trị tham số mong muốn. Sau đó, các câu trả lời mô phỏng có thể thu được bằng cách sử dụng 'mô phỏng'.
NRH

Điều đó đúng. Các gói trong chế độ [nhiệm vụ thiết kế thử nghiệm] ( cran.r-project.org/web/view/ExperimentalDesign.html ) có nhiều gói để tạo thiết lập biến giả. Tích hợp các chức năng thiết kế mô phỏng và thử nghiệm sẽ rất tuyệt!
Etienne Low-Décarie

Một số chức năng mô phỏng không tạo ra dữ liệu chỉ phù hợp: stats.stackexchange.com/questions/11233/NH
Etienne Low-Décarie

6

Có một chức năng mới được gọi simfuntrong TeachingDemosgói cho R (hiện tại nó chỉ có trong phiên bản phát triển trên R-forge , sẽ mất một thời gian trước khi nó có trên CRAN). Nó được dự định để giúp tạo các chức năng để làm mô phỏng.

Một trong những mục đích sử dụng là giáo viên sẽ sử dụng simfunchức năng tạo một chức năng và phân phối nó cho sinh viên (có thể có giao diện web tại một số điểm thay thế). Sau đó, học sinh sẽ tạo khung dữ liệu gồm các yếu tố đại diện cho thiết kế thử nghiệm, chuyển khung dữ liệu này cho hàm đã tạo và được trả về khung dữ liệu với một cột bổ sung của phản hồi được mô phỏng theo các tham số và phân phối lỗi do giáo viên thiết lập , sau đó sinh viên có thể phân tích dữ liệu. Điều này cho phép giáo viên thiết lập mối quan hệ "Đúng", nhưng cho phép học sinh thử nhiều thiết kế thử nghiệm khác nhau để khám phá các cách để đạt được "Sự thật" trong thời gian ngắn hơn nhiều so với thực hiện một thí nghiệm thực tế và đòi hỏi ít công việc hơn cho giáo viên tạo hoặc tìm một loạt các bộ dữ liệu mẫu khác nhau đại diện cho các thiết kế khác nhau có thể.

Các simfunchức năng được thiết kế để được linh hoạt vì vậy giáo viên / người sáng tạo có thể căn cứ các mô phỏng trên một mô hình hồi quy được trang bị, các thông số được cung cấp bởi giáo viên / tác giả, hoặc các thông số suplied bởi các sinh viên / người dùng.

Hàm được tạo cũng có thể dễ dàng được sử dụng trong các mô phỏng (với replicatelệnh) để khám phá sức mạnh, cỡ mẫu, kích thước hiệu ứng, v.v. Mặc dù mô phỏng kết quả có thể chậm hơn so với chế tạo mô phỏng quá trình.

Điều này trông giống như những gì bạn mô tả với ngoại lệ rằng nó không lấy giá trị p để tạo dữ liệu, nhưng việc sử dụng các power.hàm hoặc pwr.từ pwrgói có thể được kết hợp để tạo mô phỏng dựa trên chỉ định sức mạnh và alpha thay vì phương tiện và sự khác biệt.

Dưới đây là một ví dụ từ trang trợ giúp (có một số ví dụ khác) giả định rằng bạn đang đo chiều cao của các đối tượng (nam và nữ) được lồng trong các thành phố được lồng trong các tiểu bang, có một hiệu ứng ngẫu nhiên cho trạng thái có SD 1 và hiệu ứng ngẫu nhiên cho thành phố (trong trạng thái) với SD là 0,5 thì SD "lỗi" là 3, nữ có trung bình mô phỏng là 64 inch và nam có trung bình là 69 inch (SD lỗi và có nghĩa là thực tế , các hiệu ứng ngẫu nhiên là một chút giả định). Các simfunchức năng được sử dụng để tạo một hàm mới có tên gọi simheight, sau đó một khung dữ liệu được tạo ra với ID bang, thành phố ID và một cột trong quan hệ tình dục của đối tượng (thiết kế thực nghiệm hoặc thiết kế lấy mẫu), điều này được thông qua vớisimheight và kết quả trong một khung dữ liệu mới với độ cao mô phỏng (ngoài các biến khác) mà sau đó có thể được phân tích bằng các công cụ thích hợp.

# simulate a nested mixed effects model
simheight <- simfun({
  n.city <- length(unique(city))
  n.state <- length(unique(state))
  n <- length(city)
  height <- h[sex] + rnorm(n.state,0,sig.state)[state] + 
    rnorm(n.city,0,sig.city)[city] + rnorm(n,0,sig.e)
}, sig.state=1, sig.city=0.5, sig.e=3, h=c(64,69),
  drop=c('sig.state','sig.city','sig.e','h','n.city','n.state','n'))

tmpdat <- data.frame(state=gl(5,20), city=gl(10,10), 
  sex=gl(2,5,length=100, labels=c('F','M')))
heightdat <- simheight(tmpdat)

Tôi dường như không thể tìm thấy Dạy học mới trên R-Forge?
Etienne Low-Décarie

1
install.packages (" DạyDemos ", repos = " R-Forge.R-project.org" )
Etienne Low-Décarie

Hãy thử install.packages("TeachingDemos", repos="http://R-Forge.R-project.org"). Bạn cần "http: //" ở đầu và không ";".
Greg Snow

3

methods(simulate)hoặc getAnywhere("simulate")nên làm việc. Cái trước cung cấp cho bạn một vài phương thức, nếu gói lme4 được tải:

[1] mô phỏng.lm * simulation.merMod * simulation.negbin * simulation.polr *

Đối tượng Lm được sử dụng cho cả mô hình lm và glm.


2
Cảm ơn, nhưng đây có vẻ như câu trả lời của @ Momo.
Etienne Low-Décarie
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.