มีวิธีการทั่วไปในการจำลองข้อมูลจากสูตรหรือการวิเคราะห์หรือไม่?


16

การจำลองข้อมูลจากกรอบข้อมูลการออกแบบการทดลอง
ด้วยการมุ่งเน้นไปที่ R (แม้ว่าภาษาอื่น ๆ จะดีมาก)

ในการออกแบบการทดสอบหรือการสำรวจการจำลองข้อมูลและการวิเคราะห์ข้อมูลจำลองนี้สามารถให้ข้อมูลเชิงลึกที่ยอดเยี่ยมเกี่ยวกับข้อดีและจุดอ่อนของการออกแบบ

วิธีการดังกล่าวยังเป็นสิ่งจำเป็นต่อความเข้าใจและการใช้การทดสอบทางสถิติที่เหมาะสม

อย่างไรก็ตามกระบวนการนี้มีแนวโน้มที่จะค่อนข้างน่าเบื่อและหลายคนถูกพาข้ามขั้นตอนสำคัญนี้ในการทดสอบหรือสำรวจ

แบบจำลองทางสถิติและการทดสอบมีข้อมูลส่วนใหญ่ที่จำเป็นในการจำลองข้อมูล (รวมถึงข้อสันนิษฐานหรือคำสั่งที่ชัดเจนของการกระจาย)

ด้วยรูปแบบการวิเคราะห์ (และสมมติฐานที่เกี่ยวข้องเช่นความเป็นปกติและความสมดุล) ระดับของปัจจัยและการวัดความสำคัญ (เช่น p-value) ฉันต้องการได้รับข้อมูลจำลอง (ในอุดมคติที่มีฟังก์ชันทั่วไปคล้าย พิมพ์ (), คาดการณ์ (), จำลอง ())

เป็นกรอบการจำลองแบบทั่วไปที่เป็นไปได้หรือไม่?

ถ้าเป็นเช่นนั้นกรอบดังกล่าวสามารถใช้ได้ในปัจจุบัน?

ตัวอย่างฉันต้องการฟังก์ชั่นเช่น:

 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")))

เช่นเวอร์ชันทั่วไปของ:

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)}

หรือ

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")))

หรือ

  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")))

ที่จะสร้าง data.frame ที่สอดคล้องกันอย่างสมบูรณ์

ตัวอย่างที่เป็นไปได้ของฟังก์ชั่นเฉพาะ (โปรดแก้ไข
ตามใจ) - arima.sim

ฟังก์ชันมีอยู่เพื่อสร้าง data.frame ของระดับปัจจัยโดยไม่มีการตอบสนองแบบจำลอง:
เช่น conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html


สิ่งหนึ่งที่ควรคำนึงถึงคือคุณต้องระบุการแจกแจงข้อผิดพลาด นอกจากนี้ฉันไม่ได้ติดตามรายการ "p.values" หรือ "F_value" ของคุณอย่างสมบูรณ์ ความคิดที่ว่าการสุ่มตัวอย่างการกระจายของ F & p มีศูนย์กลางอยู่ที่ตัวเลขที่ระบุไว้หรือไม่
gung - Reinstate Monica

@ gung การแจกแจงนี้ถูกสันนิษฐานไว้ในการทดสอบ (ทั้งที่นี่ถือว่าเป็นเรื่องปกติหรือฉันต้องใช้บางอย่างเช่น glm)
Etienne Low-Décarie

การทดสอบนั้นถือว่าเป็นการกระจายตัวแบบเฉพาะเจาะจง แต่นั่นไม่ได้หมายความว่าข้อมูลนั้นถูกสร้างขึ้นในลักษณะนั้น คุณสามารถสร้างข้อมูลจากการแจกแจงจำนวนเท่าใดก็ได้เพื่อวัตถุประสงค์ต่าง ๆ (เช่นการศึกษาแบบจำลองความทนทาน ฯลฯ )
gung - Reinstate Monica

@ gung ฉันพยายามแก้ไขคำถามของฉันเพื่อให้ชัดเจนว่าฉันต้องการสร้างชุดข้อมูลที่สอดคล้องกับความคาดหวังของการทดสอบ / แบบจำลอง ฉันไม่ได้มองหาบางสิ่งสำหรับการศึกษาแบบจำลองหรือเพื่อการศึกษาความทนทาน แต่เพื่อให้การออกแบบการทดลองแบบแห้ง
Etienne Low-Décarie

คำตอบ:


10

จริงๆแล้วมี S3 แบบทั่วไปsimulateที่แม้แต่คืนค่า data frame (หรือรายการอื่น ๆ ) ที่คุณต้องการ ชนิด

?simulate  

มันมีวิธีการเรียน lm (ใช้ได้กับ glm หรือตัวอย่าง aov ของคุณ) และ glm.nb (เป็น MASS) อยู่แล้ว ตอนนี้คุณสามารถเขียนsimulateวิธีS3 สำหรับคลาสของวัตถุอื่น ๆ เช่นสำหรับวัตถุจาก lme4 คุณสามารถตรวจสอบว่ามีวิธีการเรียนใดโดยการพิมพ์

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

หรือ

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

การจำลองจะดีมากหากไม่ต้องการ "วัตถุที่แสดงแบบจำลองที่ติดตั้งไว้" ซึ่งตัวเองต้องการข้อมูลหรือข้อมูลจำลองแล้ว
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
เราสามารถสร้างวัตถุที่ติดตั้งเริ่มต้นได้เสมอโดยมีค่าการตอบสนองทั้งหมดเป็น 0 พูดและแทนที่ค่าสัมประสิทธิ์ให้พอดีกับค่าพารามิเตอร์ที่ต้องการ จากนั้นจำลองการตอบสนองสามารถทำได้โดยใช้ 'จำลอง'
NRH

นั่นเป็นความจริง. แพ็คเกจในมุมมอง[งานออกแบบเชิงทดลอง] ( cran.r-project.org/web/views/ExperimentalDesign.html ) มีแพ็คเกจมากมายที่จะสร้างการตั้งค่าตัวแปรจำลอง การรวมฟังก์ชั่นการออกแบบจำลองและการทดลองเข้าด้วยกันนั้นยอดเยี่ยม
Etienne Low-Décarie

ฟังก์ชั่นจำลองบางตัวไม่สร้างข้อมูลที่เหมาะสม: stats.stackexchange.com/questions/11233/…
Etienne Low-Décarie

6

มีฟังก์ชั่นใหม่ที่เรียกว่าsimfunในTeachingDemosแพ็คเกจสำหรับ R (ปัจจุบันเป็นเพียงรุ่นพัฒนาบนR-forgeมันจะอยู่พักหนึ่งก่อนที่มันจะอยู่บน CRAN) มีวัตถุประสงค์เพื่อช่วยในการสร้างฟังก์ชั่นในการจำลอง

หนึ่งในการใช้งานที่ตั้งใจคือครูจะใช้ simfunฟังก์ชั่นเพื่อสร้างฟังก์ชั่นและแจกจ่ายให้กับนักเรียน (อาจมีเว็บอินเตอร์เฟสในบางจุดเป็นทางเลือก) จากนั้นนักเรียนจะสร้างกรอบข้อมูลของปัจจัยที่เป็นตัวแทนของการออกแบบการทดลองส่งเฟรมข้อมูลนี้ไปยังฟังก์ชั่นที่สร้างขึ้นและได้รับคืนกรอบข้อมูลพร้อมคอลัมน์เพิ่มเติมของการตอบสนองที่จำลองขึ้นตามพารามิเตอร์และการกระจายข้อผิดพลาด นักเรียนสามารถวิเคราะห์ข้อมูลได้ สิ่งนี้ทำให้ครูสามารถตั้งค่าความสัมพันธ์ "จริง" แต่ให้นักเรียนลองออกแบบการทดลองที่แตกต่างกันมากมายเพื่อค้นหาวิธีที่จะได้รับ "ความจริง" ในเวลาน้อยกว่าการทดลองจริงและต้องการงานน้อยกว่าครู สร้างหรือค้นหากลุ่มของชุดตัวอย่างที่แตกต่างกันซึ่งแสดงถึงการออกแบบที่เป็นไปได้ที่แตกต่างกัน

simfunฟังก์ชั่นได้รับการออกแบบให้มีความยืดหยุ่นเพื่อให้ครู / ผู้สร้างสามารถฐานจำลองในรูปแบบการถดถอยติดตั้งพารามิเตอร์ที่จัดทำโดยครู / ผู้สร้างหรือพารามิเตอร์ suplied โดยนักเรียน / ผู้ใช้

ฟังก์ชั่นที่สร้างขึ้นยังสามารถใช้งานได้อย่างง่ายดายในแบบจำลอง (ด้วยreplicateคำสั่ง) เพื่อสำรวจพลังขนาดตัวอย่างขนาดของเอฟเฟกต์ ฯลฯ แม้ว่าการจำลองที่ได้อาจจะช้ากว่าการประดิษฐ์ด้วยมือ

ดูเหมือนว่าสิ่งที่คุณอธิบายด้วยข้อยกเว้นที่ไม่ได้ใช้ค่า p เพื่อสร้างข้อมูล แต่การใช้power.ฟังก์ชั่นหรือpwr.จากpwrแพคเกจอาจถูกรวมเข้าด้วยกันเพื่อสร้างแบบจำลองตามการระบุพลังงานและอัลฟาแทนที่จะหมายถึงความแตกต่าง

นี่คือตัวอย่างจากหน้าความช่วยเหลือ (มีอีกหลายตัวอย่าง) ที่สมมติว่าคุณกำลังวัดความสูงของอาสาสมัคร (ชายและหญิง) ที่ซ้อนกันในเมืองที่ซ้อนอยู่ในรัฐมีผลแบบสุ่มสำหรับรัฐที่มี SD ของ 1 และเอฟเฟกต์แบบสุ่มสำหรับเมือง (ภายในรัฐ) ด้วย SD เท่ากับ 0.5 จากนั้น SD "ข้อผิดพลาด" คือ 3 หญิงมีค่าเฉลี่ยการจำลอง 64 นิ้วและเพศชายมีค่าเฉลี่ย 69 นิ้ว (ข้อผิดพลาด SD และค่าเฉลี่ยเป็นจริง เอฟเฟกต์แบบสุ่มนั้นมีการประดิษฐ์ขึ้นเล็กน้อย) simfunฟังก์ชั่นที่ใช้ในการสร้างฟังก์ชั่นใหม่ที่เรียกว่าsimheightแล้วกรอบข้อมูลที่ถูกสร้างขึ้นด้วย ID ของรัฐเมือง ID และคอลัมน์สำหรับการมีเซ็กซ์ของเรื่อง (การออกแบบการทดลองหรือการออกแบบการสุ่มตัวอย่าง) นี้จะถูกส่งไปsimheight และผลลัพธ์ใน data frame ใหม่พร้อมความสูงจำลอง (นอกเหนือจากตัวแปรอื่น ๆ ) ที่สามารถวิเคราะห์ได้โดยใช้เครื่องมือที่เหมาะสม

# 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)

ฉันไม่สามารถหา TeachingDemos ใหม่บน R-Forge ได้หรือไม่
Etienne Low-Décarie

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

ลองinstall.packages("TeachingDemos", repos="http://R-Forge.R-project.org")ดู คุณต้องมี "http: //" ที่จุดเริ่มต้นและไม่ต้อง ";"
เกร็กสโนว์

3

การพิมพ์methods(simulate)หรือgetAnywhere("simulate")ควรทำงาน วิธีแรกจะให้วิธีการบางอย่างแก่คุณหากแพ็คเกจ lme4 ถูกโหลด:

[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *

วัตถุ Lm ใช้สำหรับทั้งรุ่น lm และ glm


2
ขอบคุณ แต่นี่ดูเหมือนคำตอบของ @ Momo
Etienne Low-Décarie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.