Saya di kelas 10 dan saya sedang mencari untuk mensimulasikan data untuk proyek pembelajaran sains mesin adil. Model akhir akan digunakan pada data pasien dan akan memprediksi korelasi antara waktu-waktu tertentu dalam seminggu dan efeknya terhadap kepatuhan pengobatan dalam data satu pasien. Nilai kepatuhan adalah biner (0 berarti mereka tidak minum obat, 1 berarti mereka meminum obat). Saya mencari untuk membuat model pembelajaran mesin yang dapat belajar dari hubungan antara waktu seminggu, dan telah memisahkan minggu menjadi 21 slot waktu, tiga untuk setiap waktu dalam sehari (1 adalah Senin pagi, 2 adalah Senin sore, dll.) Saya mencari untuk mensimulasikan data senilai 1.000 pasien. Setiap pasien akan memiliki data senilai 30 minggu. Saya ingin memasukkan tren tertentu yang terkait dengan waktu seminggu dan kepatuhan. Sebagai contoh, dalam satu set data saya dapat mengatakan bahwa slot waktu 7 minggu memiliki hubungan yang signifikan secara statistik dengan kepatuhan. Agar saya dapat menentukan apakah hubungan tersebut signifikan secara statistik atau tidak, akan mengharuskan saya melakukan uji-t dua sampel membandingkan satu slot waktu dengan yang lainnya dan memastikan nilai signifikansi kurang dari 0,05.
Namun, daripada mensimulasikan data saya sendiri dan memeriksa apakah tren yang saya masukkan signifikan atau tidak, saya lebih suka bekerja mundur dan mungkin menggunakan program yang saya bisa minta untuk memberi slot waktu tertentu tren yang signifikan dengan kepatuhan, dan itu akan kembali data biner yang berisi di dalamnya tren yang saya minta, dan juga data biner untuk slot waktu lainnya yang mengandung beberapa noise tetapi tidak menghasilkan tren yang signifikan secara statistik.
Apakah ada program yang dapat membantu saya mencapai sesuatu seperti ini? Atau mungkin modul python?
Bantuan apa pun (bahkan komentar umum tentang proyek saya) akan sangat dihargai !!
sumber
Jawaban:
Komentar umum
"Saya di kelas 10 dan saya sedang mencari untuk mensimulasikan data untuk proyek adil pembelajaran mesin." Luar biasa. Saya tidak peduli sama sekali tentang matematika di kelas 10; Saya pikir saya mengambil sesuatu seperti Aljabar 2 tahun itu ...? Saya tidak bisa menunggu sampai Anda membuat saya keluar dari pekerjaan dalam beberapa tahun! Saya memberikan beberapa saran di bawah ini, tetapi: Apa yang Anda coba pelajari dari simulasi ini? Apa yang sudah Anda ketahui dalam statistik dan pembelajaran mesin? Mengetahui hal ini akan membantu saya (dan lainnya) mengumpulkan beberapa bantuan yang lebih spesifik.
Python adalah bahasa yang sangat berguna, tapi saya berpendapat bahwa R lebih baik untuk mensimulasikan data. Sebagian besar buku / blog / studi / kelas yang saya temui pada simulasi data (juga apa yang orang-orang sebut "metode Monte Carlo" untuk menjadi mewah) berada di R. Bahasa R dikenal sebagai "oleh ahli statistik, untuk ahli statistik, "dan sebagian besar akademisi — yang bergantung pada studi simulasi untuk menunjukkan metode mereka bekerja — gunakan R. Banyak fungsi keren dalam bahasa dasar R (yaitu, tidak perlu paket tambahan), seperti
rnorm
untuk distribusi normal,runif
untuk seragam distribusi,rbeta
untuk distribusi beta, dan sebagainya. Di R, mengetik?Distributions
akan menampilkan halaman bantuan untuk Anda. Namun, ada banyak paket keren lainnya sepertimvtnorm
atausimstudy
itu berguna. Saya akan merekomendasikan DataCamp.com untuk mempelajari R, jika Anda hanya tahu Python; Saya pikir mereka bagus untuk diperkenalkan dengan lembut pada berbagai halSepertinya Anda memiliki banyak hal yang terjadi di sini: Anda menginginkan data yang melebihi waktu (longitudinal), dalam-subjek (mungkin menggunakan model bertingkat), dan memiliki komponen musiman pada mereka (mungkin model seri waktu), semuanya memprediksi hasil dikotomis (seperti regresi logistik). Saya pikir banyak orang yang memulai dengan studi simulasi (termasuk saya) ingin melempar banyak barang sekaligus, tetapi ini bisa sangat menakutkan dan rumit. Jadi yang saya sarankan lakukan adalah mulai dengan sesuatu yang sederhana - mungkin membuat satu atau dua fungsi untuk menghasilkan data - dan kemudian membangun dari sana.
Komentar Khusus
Sepertinya hipotesis dasar Anda adalah: "Waktu dalam sehari memprediksi apakah seseorang mematuhi atau tidak minum obat mereka." Dan Anda ingin dua membuat dua set data simulasi: Satu di mana ada adalah hubungan dan satu di mana ada tidak .
Anda juga menyebutkan data simulasi untuk mewakili beberapa pengamatan dari orang yang sama. Ini berarti bahwa setiap orang akan memiliki probabilitas kepatuhan mereka sendiri serta, mungkin, kemiringan mereka sendiri untuk hubungan antara waktu hari dan probabilitas kepatuhan. Saya akan menyarankan melihat model regresi "bertingkat" atau "hierarkis" untuk jenis hubungan ini, tetapi saya pikir Anda bisa mulai lebih sederhana dari ini.
Juga, Anda menyebutkan hubungan terus-menerus antara waktu dan probabilitas untuk mengikuti rejimen pengobatan, yang juga membuat saya berpikir pemodelan rangkaian waktu — khususnya melihat tren musiman — akan membantu Anda. Ini juga bisa disimulasikan, tapi sekali lagi, saya pikir kita bisa mulai lebih sederhana.
Katakanlah kita memiliki 1000 orang, dan kita mengukur apakah mereka minum obat satu kali saja atau tidak. Kita juga tahu jika mereka ditugaskan untuk mengambilnya di pagi, siang, atau malam hari. Katakanlah mengambil obatnya adalah 1, bukan meminumnya adalah 0. Kita dapat mensimulasikan data dikotomi menggunakan
rbinom
untuk menarik dari distribusi binomial. Kita dapat mengatur setiap orang untuk memiliki 1 observasi dengan probabilitas yang diberikan. Katakanlah orang-orang 80% akan meminumnya di pagi hari, 50% di sore hari, dan 65% di malam hari. Saya tempel kode di bawah ini, dengan beberapa komentar setelah#
:Ringkasan ini menunjukkan, sebagian:
Yang
Intercept
mewakili sore, dan kita dapat melihat bahwa baik malam dan pagi kemungkinan secara signifikan lebih tinggi untuk patuh. Ada banyak detail tentang regresi logistik yang tidak dapat saya jelaskan dalam posting ini, tetapi uji- t mengasumsikan bahwa Anda memiliki variabel dependen yang terdistribusi secara normal dan bersyarat. Model regresi logistik lebih tepat ketika Anda memiliki hasil dikotomis (0 vs 1) seperti ini. Kebanyakan buku statistik pengantar akan berbicara tentang uji- t , dan banyak buku pembelajaran mesin pengantar akan berbicara tentang regresi logistik. Saya pikir https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf Pengantar Pembelajaran Statistik: Dengan Aplikasi dalam R bagus, dan penulis memposting semuanya secara online:Saya tidak yakin tentang buku-buku bagus untuk studi simulasi; Saya belajar dari bermain-main, membaca apa yang dilakukan orang lain, dan dari program pascasarjana saya mengambil komputasi statistik (materi profesor ada di sini: http://pj.freefaculty.org/guides/ ).
Terakhir, Anda juga dapat mensimulasikan tidak berpengaruh dengan mengatur semua waktu untuk memiliki probabilitas yang sama:
Yang mengembalikan:
Ini tidak menunjukkan perbedaan yang signifikan antara waktu, seperti yang kita harapkan dari probabilitas yang sama di semua waktu.
sumber
Jika Anda sudah tahu beberapa Python, maka Anda pasti akan dapat mencapai apa yang Anda butuhkan menggunakan basis Python bersama
numpy
dan / ataupandas
. Seperti yang Mark White sarankan, banyak simulasi dan hal-hal yang berhubungan dengan statistik dimasukkan ke dalam R, jadi pasti patut dilihat.Di bawah ini adalah kerangka dasar untuk bagaimana Anda mungkin mendekati ini menggunakan kelas Python. Anda dapat menggunakan
np.random.normal
untuk mengaturbaseline_adherence
setiap subjek untuk memasukkan beberapa noise. Ini memberi Anda kepatuhan pseudo-acak, di mana Anda dapat menambahkan kepatuhan yang ditargetkan berkurang pada hari-hari tertentu.sumber
Ini adalah proyek yang hebat. Ada tantangan untuk proyek-proyek seperti ini, dan metode Anda menggunakan data simulasi adalah cara yang bagus untuk menilai itu.
Apakah Anda memiliki hipotesis a priori, misalnya "orang lebih pelupa di malam hari"? Dalam hal itu, uji statistik yang membandingkan frekuensi lupa di malam hari dibandingkan pagi hari akan mengujinya. Ini adalah distribusi Bernoulli, seperti yang dikatakan responden sebelumnya.
Pendekatan lain adalah menjaring data Anda untuk mengetahui slot waktu mana yang memiliki tingkat kegagalan tertinggi. Pasti ada satu, jadi pertanyaannya adalah "apakah ini hanya hasil kebetulan?". Ambang untuk signifikansi lebih tinggi dalam kasus ini. Jika Anda ingin membaca tentang ini, cari "tingkat penemuan palsu".
Dalam kasus Anda, sistemnya cukup sederhana sehingga Anda dapat menghitung ambang dengan sedikit pemikiran. Tetapi metode umum juga dapat digunakan: similate 1000 dataset tanpa variasi laju, kemudian cari tahu distribusi frekuensi angka rendah yang kebetulan. Bandingkan dataset asli Anda dengan itu. Jika 1pm adalah slot jarang dalam data nyata, tetapi 50/1000 dataset simulasi memiliki slot sama-sama jarang, maka hasilnya tidak kuat.
sumber