일반적인 답변
"저는 10 학년이며 기계 학습 과학 박람회 프로젝트를위한 데이터를 시뮬레이션하려고합니다." 대박. 저는 10 학년 수학에 전혀 신경 쓰지 않았습니다. 나는 그 해에 대수 2와 같은 것을 가지고 있다고 생각합니다 ...? 몇 년 안에 당신이 나를 직장에서 나갈 때까지 기다릴 수 없습니다! 아래에 몇 가지 조언을 드리겠습니다.이 시뮬레이션에서 무엇을 배우려고합니까? 통계 및 머신 러닝에서 이미 무엇을 알고 있습니까? 이 사실을 알면 저와 다른 사람들이 좀 더 구체적인 도움을 줄 수 있습니다.
파이썬은 매우 유용한 언어이지만 R이 데이터 시뮬레이션에 더 좋다는 의견입니다. 내가 데이터를 시뮬레이션하는 것에 관해 접한 대부분의 책 / 블로그 / 연구 / 강좌는 사람들이 "몬테 카를로 (Monte Carlo) 방법"을 공상이라고 부른다) R에있다. "대부분의 학자 - 멋진 기능의 자신의 방법 일 사용 R.을 많이 보여 시뮬레이션 연구에 의존는 기본 R 언어에있는 등, (필요한 추가 패키지 없다는 것을) rnorm
정규 분포에 대한, runif
유니폼에 대한 rbeta
베타 배포를위한 배포 등 입니다. R에서 입력 ?Distributions
하면 도움말 페이지가 표시됩니다. 그러나 mvtnorm
또는 다른 멋진 패키지가 많이 있습니다.simstudy
유용합니다. 파이썬 만 알고 있다면 R을 배우기 위해 DataCamp.com을 추천합니다. 나는 그들이 사물을 부드럽게 소개하는 데 좋다고 생각합니다.
시간이 지남에 따라 (세로), 개체 내 (다중 수준 모델을 사용하는 경우도 있음) 데이터에 계절적 구성 요소가있는 데이터 (아마도 시계열 모델)가 필요합니다. 이분법적인 결과 (로지스틱 회귀와 같은 것). 시뮬레이션 연구로 시작한 많은 사람들이 (나 자신을 포함하여) 한 번에 많은 것들을 던지기를 원하지만 이것은 정말 어렵고 복잡 할 수 있습니다. 따라서 제가 추천하는 것은 데이터 생성을 위해 하나 또는 두 개의 함수를 만드는 간단한 것부터 시작하여 거기서 시작하는 것입니다.
특정 의견
기본 가설은 다음과 같습니다. "시간은 누군가가 약물 복용을 고수할지 여부를 예측합니다." 그리고 당신은 두 개의 시뮬레이션 데이터 세트를 만들고 싶습니다이 하나 인 관계와 하나가있는 곳에 없습니다 .
또한 동일한 사람의 여러 관측치를 나타내는 데이터 시뮬레이션에 대해서도 언급합니다. 이것은 각 사람이 시간과 접착 확률 사이의 관계에 대한 자신의 기울기뿐만 아니라 자신의 준수 확률을 가질 것임을 의미합니다. 이 유형의 관계에 대해 "다단계"또는 "계층"회귀 모델을 살펴 보는 것이 좋습니다. 그러나 이보다 더 간단하게 시작할 수 있다고 생각합니다.
또한, 시간과 약물 요법을 고수 할 확률 사이의 지속적인 관계를 언급하면 시계열 모델링 (특히 계절 추세를 살펴 보는 것)이 도움이 될 것입니다. 이것은 또한 시뮬레이트 가능하지만, 우리는 더 간단하게 시작할 수 있다고 생각합니다.
1000 명이 있고 약을 한 번만 복용했는지 여부를 측정한다고 가정 해 봅시다. 또한 아침, 오후 또는 저녁에 복용하도록 지명되었는지도 알고 있습니다. 약을 복용하는 것이 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
오후를 나타내며, 우리는 저녁과 아침 모두 준수의 상당히 높은 확률 것을 볼 수 있습니다. 이 게시물에서 설명 할 수없는 로지스틱 회귀에 대한 많은 세부 사항이 있지만 t -tests는 조건부 정규 분포 종속 변수가 있다고 가정합니다. 로지스틱 회귀 모형은 이분법 (0 대 1) 결과가있을 때 더 적합합니다. 대부분의 입문 통계 서적은 t- 검정 에 대해 이야기 하고 많은 입문 기계 학습 서적은 로지스틱 회귀에 대해 이야기합니다. 내 생각 R은에서 응용 프로그램과 : 통계 학습에 소개 큰이며, 저자는 온라인 전체를 게시 :https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
나는 시뮬레이션 연구를위한 좋은 책에 대해 확신하지 못한다. 나는 엉망으로, 다른 사람들이 한 일을 읽고, 통계 계산에 관한 대학원 과정에서 배웠습니다 (교수의 자료는 여기에 있습니다 : 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
시간에 따른 확률이 같을 것으로 예상되므로 시간간에 큰 차이는 없습니다.