Чи є загальний метод моделювання даних із формули чи аналізу?


16

По-новому моделювання даних з експериментальної рамки даних проектування.
З акцентом на R (хоча інше мовне рішення було б чудово).

Розробляючи експеримент або опитування, моделювання даних та проведення аналізу цих модельованих даних може забезпечити надзвичайне уявлення про переваги та недоліки конструкції.

Такий підхід також може бути важливим для розуміння та правильного використання статистичних тестів.

Однак цей процес має тенденцію дещо втомлювати, і багато хто змушений пропустити цей важливий крок в експерименті чи опитуванні.

Статистичні моделі та тест містять більшу частину інформації, необхідної для моделювання даних (включаючи припущення або явне твердження про розподіл).

Враховуючи модель аналізу (та пов'язані з нею припущення, наприклад, нормальність та збалансованість), рівні фактора та міри значущості (наприклад, p-значення), я хотів би отримати модельовані дані (в ідеалі з узагальненою функцією, подібною до друкувати (), передбачати (), імітувати ()).

Чи можливий такий узагальнений фреймворк моделювання?

Якщо так, то чи існує така структура на даний момент?

Наприклад, я хотів би функцію, таку як:

 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

функція існує для створення фрейму даних рівнів факторів без модельованої відповіді:
напр. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html


Слід пам’ятати, що вам потрібно вказати розподіл помилок. Крім того, я не повністю дотримуюся ваших списків "p.values" або "F_value"; ідея, що вибіркові розподіли F & p зосереджуються на перерахованих числах?
gung - Відновіть Моніку

@gung, розподіл передбачається в тесті (обидва тут припускають нормальність, або мені довелося б використовувати щось на зразок glm).
Етьєн Лоу-Декарі

Тест , звичайно ж передбачає розподіл специфічного, але це не означає , що дані були на самому справі генеруються таким чином. Ви можете генерувати дані з будь-якої кількості дистрибутивів для різних цілей (наприклад, імітаційні дослідження, надійність тощо).
gung - Відновіть Моніку

@gung, я спробував відредагувати своє питання, щоб зрозуміти, що я хочу створити набір даних, який відповідає очікуванням тесту / моделі. Я шукаю щось не для симуляційного дослідження, ні для дослідження стійкості, а для того, щоб забезпечити сухе виконання експериментальної конструкції.
Етьєн Лоу-Декарі

Відповіді:


10

Насправді є загальний S3, simulateякий навіть повертає потрібний кадр (або інший список). Тип

?simulate  

У ньому вже є методи для класів lm (працює також для glm або для вашого прикладу aov) та glm.nb (у MASS). Тепер ви можете записати simulateметоди S3 для інших класів об'єктів, наприклад, для об'єктів з lme4. Ви можете перевірити, для яких класів існують методи, набравши текст

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

або

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

імітувати було б чудово, якби для нього не потрібен "об'єкт, що представляє собою пристосовану модель", який сам по собі вже вимагає даних або модельованих даних.
Етьєн Лоу-Декарі

>getAnywhere("simulate.class") no object named ‘simulate.class’ was found >getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Етьєн Лоу-Декарі

2
Завжди можна побудувати початковий пристосований об'єкт зі всіма значеннями відповіді 0, скажімо, і замінити коефіцієнти у відповідності на бажані значення параметрів. Тоді змодельовані відповіді можна отримати за допомогою «імітувати».
NRH

Це правда. Пакети в перегляді [експериментальне завдання проектування] ( cran.r-project.org/web/views/ExperimentalDesign.html ) мають багато пакетів для створення установки фіктивних змінних. Інтеграція функцій моделювання та експериментального проектування була б чудовою!
Етьєн Лоу-Декарі

Деякі функції імітації не створюють дані лише у відповідності: stats.stackexchange.com/questions/11233/…
Etienne Low-Décarie

6

Існує нова функція , яка викликається simfunв TeachingDemosпакеті для R (зараз тільки в версії розробки на R-кузню , це буде якийсь - то час , перш ніж вона на CRAN). Він призначений допомогти у створенні функцій для моделювання.

Одним із запланованих цілей є те, що вчитель використовував би simfunфункція для створення функції та розповсюдження її студентам (можливо, в якийсь момент в якості альтернативи є веб-інтерфейс). Потім студенти створюють кадр даних про фактори, що представляють експериментальну конструкцію, передають цей кадр даних створеній функції та повертають кадр даних із додатковим стовпцем відповіді, змодельованим відповідно до параметрів та розподілу помилок, встановлених учителем , тоді студент може проаналізувати дані. Це дозволяє вчителю встановити відносини "Правда", але дозволяє учням спробувати багато різних експериментальних конструкцій, щоб дослідити способи потрапити на "Істину" за набагато менше часу, ніж робити фактичний експеримент і вимагати менше роботи для вчителя, ніж створити або знайти купу різних наборів наборів даних, що представляють різні можливі конструкції.

simfunФункція призначена бути гнучким, вчитель / творець може засновувати моделювання на підігнаній регресійній моделі, параметри , надані вчителя / творця, або параметри suplied студентським / користувача.

Створена функція також може бути легко використана в моделюванні (за допомогою replicateкоманди) для вивчення потужності, розміру вибірки, розміру ефекту тощо. Хоча в результаті моделювання може бути повільніше, ніж ручне складання процесу моделювання.

Це виглядає як те, що ви описуєте, за винятком того, що для створення даних не потрібні значення p, але використання power.функцій або pwr.з pwrпакету може бути включено для створення моделювання на основі визначення потужності та альфа, а не засобів та відмінностей.

Ось приклад зі сторінки довідки (є ще кілька прикладів), який передбачає, що ви вимірюєте висоту предметів (чоловіків та жінок), які вкладені в містах, які вкладені в штатах, є випадковий ефект для стану із SD 1 і випадковий ефект для міста (в межах штату) з SD 0,5, тоді "помилка" SD дорівнює 3, жінки мають середнє моделювання 64 дюйма, а чоловіки мають середнє значення 69 дюймів (помилка SD та засоби реалістичні , випадкові ефекти трохи надумані). simfunФункція використовується , щоб створити нову функцію під назвою simheight, то кадр даних створюються з державою ID, міста ідентифікаторів і колонками для підлоги суб'єкта (експериментального проектування або дизайну вибірки), це передаютьсяsimheight а результат - новий кадр даних із змодельованими висотами (крім інших змінних), який можна було б потім проаналізувати за допомогою відповідних інструментів.

# 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?
Етьєн Лоу-Декарі

1
install.packages ("TeachingDemos", repos = " R-Forge.R-project.org" )
Етьєнн Низький Декарі

Спробуйте install.packages("TeachingDemos", repos="http://R-Forge.R-project.org"). Вам потрібно "http: //" на початку і ні ";".
Грег Сніг

3

Введення тексту methods(simulate)або getAnywhere("simulate")повинно працювати. Перший дає кілька методів, якщо завантажений пакет lme4:

[1] імітувати.lm * simulate.merMod * simulate.negbin * simulate.polr *

Lm-об'єкти використовуються як для lm, так і для glm-моделей.


2
Дякую, але це схоже на відповідь @ Момо.
Етьєн Лоу-Декарі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.