Nhận xét chung
"Tôi đang học lớp 10 và tôi đang tìm cách mô phỏng dữ liệu cho một dự án hội chợ khoa học máy học." Tuyệt vời. Tôi hoàn toàn không quan tâm đến môn toán ở lớp 10; Tôi nghĩ rằng tôi đã lấy một cái gì đó như Đại số 2 năm đó ...? Tôi không thể đợi cho đến khi bạn đưa tôi ra khỏi một công việc trong một vài năm! Tôi đưa ra một số lời khuyên dưới đây, nhưng: Bạn đang cố gắng học được gì từ mô phỏng này? Bạn đã quen thuộc với những gì trong thống kê và học máy? Biết điều này sẽ giúp tôi (và những người khác) tập hợp một số trợ giúp cụ thể hơn.
Python là một ngôn ngữ rất hữu ích, nhưng tôi cho rằng R tốt hơn cho việc mô phỏng dữ liệu. Hầu hết các cuốn sách / blog / nghiên cứu / lớp học mà tôi đã bắt gặp về việc mô phỏng dữ liệu (cũng là thứ mà mọi người gọi là "phương pháp Monte Carlo" là lạ mắt) ở R. Ngôn ngữ R được các nhà thống kê gọi là "bởi các nhà thống kê, đối với các nhà thống kê, "và hầu hết các học giả giáo dục, dựa vào các nghiên cứu mô phỏng để chỉ ra các phương pháp của họ, sử dụng R. Rất nhiều chức năng tuyệt vời có trong ngôn ngữ R cơ bản (nghĩa là không có gói bổ sung nào cần thiết), như rnorm
cho phân phối bình thường, runif
cho đồng phục phân phối, rbeta
cho bản phân phối beta, v.v. Trong R, nhập vào ?Distributions
sẽ hiển thị cho bạn một trang trợ giúp về họ. Tuy nhiên, có nhiều gói thú vị khác như mvtnorm
hoặcsimstudy
đó là hữu ích. Tôi muốn giới thiệu DataCamp.com cho việc học R, nếu bạn chỉ biết Python; Tôi nghĩ rằng chúng là tốt để được giới thiệu nhẹ nhàng cho mọi thứ
Có vẻ như bạn có nhiều thứ đang diễn ra ở đây: Bạn muốn dữ liệu theo thời gian (theo chiều dọc), bên trong chủ đề (có thể sử dụng mô hình đa cấp) và có một thành phần theo mùa cho chúng (có thể là mô hình chuỗi thời gian), tất cả đều dự đoán một kết quả phân đôi (một cái gì đó giống như hồi quy logistic). Tôi nghĩ rằng rất nhiều người bắt đầu với các nghiên cứu mô phỏng (bao gồm cả bản thân tôi) muốn ném một loạt các thứ vào cùng một lúc, nhưng điều này có thể thực sự nan giải và phức tạp. Vì vậy, những gì tôi khuyên bạn nên làm là bắt đầu với một cái gì đó đơn giản có thể tạo ra một hoặc hai chức năng để tạo dữ liệu và sau đó xây dựng từ đó.
Nhận xét cụ thể
Có vẻ như giả thuyết cơ bản của bạn là: "Thời gian trong ngày dự đoán liệu có ai đó tuân thủ việc dùng thuốc của họ hay không". Và bạn muốn hai tạo ra hai mô phỏng bộ dữ liệu: Một nơi có là một mối quan hệ và một trong những nơi có không .
Bạn cũng đề cập đến dữ liệu mô phỏng để thể hiện nhiều quan sát từ cùng một người. Điều này có nghĩa là mỗi người sẽ có xác suất tuân thủ riêng cũng như, có lẽ, độ dốc của chính họ cho mối quan hệ giữa thời gian trong ngày và xác suất tuân thủ. Tôi sẽ đề nghị xem xét các mô hình hồi quy "đa cấp" hoặc "phân cấp" cho loại mối quan hệ này, nhưng tôi nghĩ bạn có thể bắt đầu đơn giản hơn thế này.
Ngoài ra, bạn đề cập đến một mối quan hệ liên tục giữa thời gian và xác suất tuân thủ chế độ dùng thuốc, điều này cũng khiến tôi nghĩ rằng mô hình chuỗi thời gian đặc biệt nhìn vào xu hướng theo mùa có thể hữu ích cho bạn. Điều này cũng có thể mô phỏng, nhưng một lần nữa, tôi nghĩ chúng ta có thể bắt đầu đơn giản hơn.
Giả sử chúng ta có 1000 người, và chúng ta đo xem họ có uống thuốc chỉ một lần hay không. Chúng tôi cũng biết nếu họ được chỉ định dùng nó vào buổi sáng, buổi chiều hoặc buổi tối. Giả sử dùng thuốc là 1, không dùng là 0. Chúng ta có thể mô phỏng dữ liệu nhị phân bằng cách sử dụng rbinom
để rút ra từ phân phối nhị thức. Chúng ta có thể đặt mỗi người có 1 quan sát với xác suất nhất định. Giả sử mọi người có khả năng dùng 80% vào buổi sáng, 50% vào buổi chiều và 65% vào ban đêm. Tôi dán mã bên dưới, với một số ý kiến sau #
:
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)
Tóm tắt này cho thấy, một phần:
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
Đại Intercept
diện cho buổi chiều, và chúng ta có thể thấy rằng cả buổi tối và buổi sáng có xác suất tuân thủ cao hơn đáng kể. Có rất nhiều chi tiết về hồi quy logistic mà tôi không thể giải thích trong bài viết này, nhưng t- tests cho rằng bạn có một biến phụ thuộc phân phối bình thường có điều kiện. Các mô hình hồi quy logistic thích hợp hơn khi bạn có kết quả phân đôi (0 so với 1) như thế này. Hầu hết các sách thống kê giới thiệu sẽ nói về t- test, và rất nhiều sách học máy giới thiệu sẽ nói về hồi quy logistic. Tôi nghĩ Giới thiệu về Học thống kê: Với các ứng dụng trong R là tuyệt vời và các tác giả đã đăng toàn bộ nội dung trực tuyến:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Tôi không chắc chắn về những cuốn sách hay cho nghiên cứu mô phỏng; Tôi vừa học được từ việc loay hoay, đọc những gì người khác đã làm, và từ một khóa học sau đại học tôi đã học về máy tính thống kê (tài liệu của giáo sư ở đây: http : //pj.freefacemony.org/guides/ ).
Cuối cùng, bạn cũng có thể mô phỏng không có hiệu lực bằng cách đặt tất cả các lần có cùng xác suất:
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))
Trả về:
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
Điều này cho thấy không có sự khác biệt đáng kể giữa các thời điểm, như chúng ta mong đợi từ xác suất giống nhau qua các thời điểm.