ข้อคิดเห็นทั่วไป
"ฉันอยู่เกรด 10 และฉันต้องการจำลองข้อมูลสำหรับโครงงานวิทยาศาสตร์การเรียนรู้ของเครื่อง" น่ากลัว ฉันไม่สนใจเลยเรื่องคณิตศาสตร์ในเกรด 10; ฉันคิดว่าฉันชอบพีชคณิต 2 ในปีนั้น ... ฉันไม่สามารถรอจนกว่าคุณจะเลิกงานในอีกไม่กี่ปีข้างหน้า! ฉันให้คำแนะนำด้านล่าง แต่: คุณพยายามเรียนรู้อะไรจากการจำลองนี้? คุณคุ้นเคยกับเรื่องอะไรบ้างเกี่ยวกับสถิติและการเรียนรู้ของเครื่อง? การรู้สิ่งนี้จะช่วยฉัน (และคนอื่น ๆ ) รวบรวมความช่วยเหลือที่เฉพาะเจาะจงมากขึ้น
Python เป็นภาษาที่มีประโยชน์มาก แต่ฉันคิดว่า R นั้นดีกว่าสำหรับการจำลองข้อมูล หนังสือ / บล็อก / การศึกษา / ชั้นเรียนส่วนใหญ่ที่ฉันเคยเจอในการจำลองข้อมูล (รวมถึงสิ่งที่ผู้คนเรียกว่า "วิธีการมอนติคาร์โล" เพื่อความสวยงาม) อยู่ในอาร์อาร์ภาษา R เป็นที่รู้จักกันในชื่อ "และนักวิชาการส่วนใหญ่ - ที่อาศัยการศึกษาแบบจำลองเพื่อแสดงวิธีการทำงาน - ใช้อาร์ฟังก์ชั่นสุดเจ๋งมากมายอยู่ในภาษา R ฐาน (นั่นคือไม่จำเป็นต้องมีแพ็คเกจเพิ่มเติม) เช่นrnorm
การแจกแจงแบบปกติrunif
สำหรับเครื่องแบบ การแจกจ่ายrbeta
สำหรับการเผยแพร่เบต้าและอื่น ๆ ใน R การพิมพ์?Distributions
จะแสดงหน้าช่วยเหลือให้คุณ อย่างไรก็ตามมีแพ็คเกจสุดเจ๋งอื่น ๆ เช่นmvtnorm
หรือsimstudy
ที่มีประโยชน์ ฉันจะแนะนำ DataCamp.com สำหรับการเรียนรู้ R หากคุณรู้จัก Python ฉันคิดว่ามันดีสำหรับการแนะนำสิ่งต่าง ๆ เบา ๆ
ดูเหมือนว่าคุณจะมีอะไรมากมายเกิดขึ้นที่นี่: คุณต้องการข้อมูลที่มีอยู่ตลอดเวลา (ยาว) ภายในหัวเรื่อง (อาจใช้โมเดลหลายระดับ) และมีองค์ประกอบตามฤดูกาล (อาจเป็นแบบอนุกรมเวลา) ทำนายทั้งหมด ผลลัพธ์สองขั้ว (คล้ายการถดถอยโลจิสติก) ฉันคิดว่าผู้คนจำนวนมากเริ่มต้นด้วยการศึกษาแบบจำลอง (รวมถึงตัวเอง) ต้องการที่จะโยนสิ่งต่าง ๆ ลงในคราวเดียว แต่มันอาจเป็นเรื่องที่ยุ่งยากและซับซ้อน ดังนั้นสิ่งที่ฉันขอแนะนำให้ทำคือเริ่มจากสิ่งที่ง่าย - อาจจะสร้างฟังก์ชั่นหนึ่งหรือสองเพื่อสร้างข้อมูล - จากนั้นสร้างขึ้นจากที่นั่น
ความคิดเห็นเฉพาะ
ดูเหมือนว่าสมมติฐานพื้นฐานของคุณคือ: "เวลาของวันทำนายว่ามีใครปฏิบัติตามการใช้ยาของพวกเขาหรือไม่" และคุณต้องการสองสร้างสองจำลองข้อมูลชุดหนึ่งที่มีคือความสัมพันธ์และเป็นหนึ่งที่มีไม่ได้
คุณยังกล่าวถึงการจำลองข้อมูลเพื่อแสดงการสังเกตหลาย ๆ อย่างจากบุคคลเดียวกัน ซึ่งหมายความว่าแต่ละคนจะมีความน่าจะเป็นของการยึดมั่นเช่นเดียวกับความลาดชันของพวกเขาสำหรับความสัมพันธ์ระหว่างเวลาของวันและความน่าจะเป็นของการยึดมั่น ฉันขอแนะนำให้ดูที่โมเดลการถดถอยแบบ "หลายระดับ" หรือ "ลำดับชั้น" สำหรับความสัมพันธ์ประเภทนี้ แต่ฉันคิดว่าคุณสามารถเริ่มง่ายกว่านี้
นอกจากนี้คุณพูดถึงความสัมพันธ์อย่างต่อเนื่องระหว่างเวลาและความน่าจะเป็นที่จะยึดมั่นในระบบการใช้ยาซึ่งทำให้ฉันคิดว่าการสร้างแบบจำลองอนุกรมเวลา - โดยเฉพาะการดูแนวโน้มตามฤดูกาล - จะเป็นประโยชน์สำหรับคุณ นี่เป็นแบบจำลองที่สามารถทำได้ แต่อีกครั้งฉันคิดว่าเราสามารถเริ่มง่ายขึ้น
สมมติว่าเรามี 1,000 คนและเราวัดว่าพวกเขาทานยาเพียงครั้งเดียวหรือไม่ นอกจากนี้เรายังทราบว่าพวกเขาได้รับมอบหมายให้นำมันในตอนเช้าบ่ายหรือเย็น สมมุติว่าการทานยาคือ 1 ไม่ได้ใช้มันคือ 0 เราสามารถจำลองข้อมูลไดโคโตrbinom
เมียที่ใช้สำหรับดึงจากการแจกแจงทวินาม เราสามารถตั้งให้แต่ละคนมี 1 การสังเกตด้วยความน่าจะเป็นที่ระบุ สมมติว่าผู้คนมีโอกาส 80% ที่จะรับมันในตอนเช้า 50% ในตอนบ่ายและ 65% ในตอนกลางคืน ฉันวางรหัสด้านล่างโดยมีความคิดเห็นหลังจาก#
:
set.seed(1839) # this makes sure the results are replicable when you do it
n <- 1000 # sample size is 1000
times <- c("morning", "afternoon", "evening") # create a vector of times
time <- sample(times, n, TRUE) # create our time variable
# make adherence probabilities based on time
adhere_prob <- ifelse(
time == "morning", .80,
ifelse(
time == "afternoon", .50, .65
)
)
# simulate observations from binomial distribution with those probabilities
adhere <- rbinom(n, 1, adhere_prob)
# run a logistic regression, predicting adherence from time
model <- glm(adhere ~ time, family = binomial)
summary(model)
สรุปนี้แสดงให้เห็นในส่วน:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.02882 0.10738 0.268 0.78839
timeevening 0.45350 0.15779 2.874 0.00405 **
timemorning 1.39891 0.17494 7.996 1.28e-15 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Intercept
หมายถึงช่วงบ่ายและเราจะเห็นได้ว่าทั้งเย็นและเวลาเช้ามีความน่าจะเป็นสูงขึ้นอย่างมีนัยสำคัญจากการยึดมั่น มีรายละเอียดมากมายเกี่ยวกับการถดถอยแบบลอจิสติกที่ฉันไม่สามารถอธิบายได้ในโพสต์นี้ แต่การทดสอบทีสันนิษฐานว่าคุณมีตัวแปรตามการกระจายตามปกติ แบบจำลองการถดถอยแบบลอจิสติกมีความเหมาะสมมากกว่าเมื่อคุณมีผลลัพธ์แบบแบ่งขั้ว (0 เทียบกับ 1) เช่นนี้ ส่วนใหญ่หนังสือสถิติเบื้องต้นจะพูดคุยเกี่ยวกับT -test และหนังสือจำนวนมากเรียนรู้เครื่องเบื้องต้นจะพูดคุยเกี่ยวกับการถดถอยโลจิสติก ฉันคิดว่ารู้เบื้องต้นเกี่ยวกับการเรียนรู้ทางสถิติ: ด้วยแอปพลิเคชันใน Rนั้นยอดเยี่ยมมากและผู้เขียนโพสต์ทุกสิ่งออนไลน์:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
ฉันไม่แน่ใจเกี่ยวกับหนังสือที่ดีสำหรับการศึกษาสถานการณ์จำลอง ผมได้เรียนรู้มาจาก messing รอบอ่านสิ่งที่คนอื่นได้และจากบัณฑิตแน่นอนผมเอาในคอมพิวเตอร์สถิติ (วัสดุของอาจารย์อยู่ที่นี่: http://pj.freefaculty.org/guides/ )
สุดท้ายคุณสามารถจำลองแบบไม่มีผลด้วยการตั้งค่าเวลาทั้งหมดให้มีความน่าจะเป็นแบบเดียวกัน:
set.seed(1839)
n <- 1000
times <- c("morning", "afternoon", "evening")
time <- sample(times, n, TRUE)
adhere <- rbinom(n, 1, .6) # same for all times
summary(glm(adhere ~ time, binomial))
ผลตอบแทนใด:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.40306 0.10955 3.679 0.000234 ***
timeevening -0.06551 0.15806 -0.414 0.678535
timemorning 0.18472 0.15800 1.169 0.242360
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
สิ่งนี้แสดงให้เห็นว่าไม่มีความแตกต่างอย่างมีนัยสำคัญระหว่างเวลาดังที่เราคาดหวังจากความน่าจะเป็นที่เท่ากันตลอดเวลา