Як моделювати власний аналіз потужності lm-моделі (за допомогою R)


13

Слідуючи останнім питанням, які у нас виникли тут .

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

Пізніше я, очевидно, хотів би поширити це на більш складні моделі, але, здається, lm - це правильне місце для початку. Спасибі.

Відповіді:


4

Я не впевнений, що вам потрібне моделювання для простої регресійної моделі. Наприклад, див. Портативний блок живлення паперу . Для більш складних моделей, конкретно змішаних ефектів, пакет pamm в R виконує аналіз потужності за допомогою моделювання. Також дивіться пост Тодда Джоба, який має код R для моделювання.


1
Посилання портативного живлення перервано. Якщо хтось може оновити посилання, це було б чудово. Дякую.
Брайан П

3

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

  • Бенджамін Bolker написав велику книгу Екологічні дані та моделі з R . Ранній проект всієї книги разом із кодом Sweave доступний в Інтернеті. Розділ 5 стосується аналізу та моделювання живлення.

На наступних сайтах є ще пара прикладів моделювання:


0

Адаптовано з екологічних моделей та даних Bolker 2009 в Р. Вам потрібно оголосити силу тенденції (тобто нахилу), яку ви хочете протестувати. Інтуїтивно сильна тенденція та низька мінливість вимагають невеликого розміру вибірки, слабкий тренд та велика мінливість вимагають великого розміру вибірки.

a = 2  #desired slope
b = 1  #estimated intercept
sd = 20  #estimated variability defined by standard deviation
nsim = 400  #400 simulations
pval = numeric(nsim)  #placeholder for the second for loop output
Nvec = seq(25, 100, by = 1)  #vector for the range of sample sizes to be tested
power.N = numeric(length(Nvec))   #create placeholder for first for loop output
for (j in 1:length(Nvec)) {
  N = Nvec[j]  
  x = seq(1, 20, length = Nvec[j])  #x value length needs to match sample size (Nvec) length
  for (i in 1:nsim) {   #for this value of N, create random error 400 times
    y_det = a + b * x
    y = rnorm(N, mean = y_det, sd = sd)
    m = lm(y ~ x)
    pval[i] = coef(summary(m))["x", "Pr(>|t|)"]  #all the p values for 400 sims
  }  #cycle through all N values
  power.N[j] = sum(pval < 0.05)/nsim  #the proportion of correct p-values (i.e the power)
}
power.N
plot(Nvec, power.N)  #need about 90 - 100 samples for 80% power

Ви також можете змоделювати мінімальну тенденцію, яку ви можете перевірити для заданого розміру вибірки, як показано в книзі

bvec = seq(-2, 2, by = 0.1)
power.b = numeric(length(bvec))
for (j in 1:length(bvec)) {
  b = bvec[j]
   for (i in 1:nsim) {
     y_det = a + b * x
     y = rnorm(N, mean = y_det, sd = sd)
     m = lm(y ~ x)
     pval[i] = coef(summary(m))["x", "Pr(>|t|)"]
     }
   power.b[j] = sum(pval < 0.05)/nsim
  }
 power.b
 plot(bvec, power.b)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.