Этот вопрос является ответом на ответ @Greg Snow на вопрос, который я задал относительно анализа мощности с помощью логистической регрессии и SAS Proc GLMPOWER
.
Если я планирую эксперимент и проанализирую результаты в факторной логистической регрессии, как я могу использовать симуляцию (и здесь ) для анализа мощности?
Вот простой пример, где есть две переменные, первая принимает три возможных значения {0,03, 0,06, 0,09}, а вторая - фиктивный индикатор {0,1}. Для каждого мы оцениваем уровень ответов для каждой комбинации (количество респондентов / количество людей, продаваемых на рынок). Кроме того, мы хотим иметь в 3 раза больше первой комбинации факторов, чем другие (которые можно считать равными), потому что эта первая комбинация является нашей проверенной верной версией. Это установка, подобная приведенной в курсе SAS, упомянутом в связанном вопросе.
Модель, которая будет использоваться для анализа результатов, будет логистической регрессией с основными эффектами и взаимодействием (ответ 0 или 1).
mod <- glm(response ~ Var1 + Var2 + I(Var1*Var2))
Как я могу имитировать набор данных для использования с этой моделью для анализа мощности?
Когда я запускаю это через SAS Proc GLMPOWER
(использование STDDEV =0.05486016
которого соответствует sqrt(p(1-p))
где p - средневзвешенное значение показанных ответов):
data exemplar;
input Var1 $ Var2 $ response weight;
datalines;
3 0 0.0025 3
3 1 0.00395 1
6 0 0.003 1
6 1 0.0042 1
9 0 0.0035 1
9 1 0.002 1;
run;
proc glmpower data=exemplar;
weight weight;
class Var1 Var2;
model response = Var1 | Var2;
power
power=0.8
ntotal=.
stddev=0.05486016;
run;
Примечание: GLMPOWER
будут использоваться только переменные класса (именные), поэтому 3, 6, 9, приведенные выше, обрабатываются как символы и могут иметь значения low, mid и high или любые другие три строки. Когда будет проведен реальный анализ, для расчета любой кривизны будет использоваться Var1 с числовым значением (и мы будем включать полиномиальный термин Var1 * Var1).
Выход из SAS
Таким образом, мы видим, что нам нужно 762,112 как размер нашей выборки (основной эффект Var2 труднее всего оценить) с мощностью, равной 0,80, и альфа, равной 0,05. Мы бы распределили их так, чтобы базовая комбинация была в 3 раза больше (т. Е. 0,375 * 762112), а остальные просто в равной степени попадали в другие 5 комбинаций.
Ответы:
Отборочные:
В дополнение к превосходному посту @ GregSnow, здесь можно найти еще одно действительно замечательное руководство по анализу мощности на основе моделирования на основе CV: расчет статистической мощности . Подводя итог основным идеям:
В R основным способом генерирования двоичных данных с заданной вероятностью «успеха» является ? Rbinom
rbinom(n=10, size=1, prob=p)
(вы, вероятно, захотите присвоить результат переменной для хранения)ifelse(runif(1)<=p, 1, 0)
pnorm()
и использовать их в своемrbinom()
коде.Так же , как существуют различные виды коэффициентов ошибок типа I , когда есть несколько гипотез (например, за отличие частоты ошибок , коэффициент ошибок familywise , и за семью частоты ошибок ), поэтому существуют различные виды питания * (например, для а один предварительно заданный эффект , для любого эффекта и для всех эффектов ). Вы также можете искать возможности для обнаружения определенной комбинации эффектов или возможности одновременной проверки модели в целом. Из вашего описания вашего кода SAS я думаю, что он ищет последний. Однако, исходя из вашего описания вашей ситуации, я предполагаю, что вы хотите обнаружить эффекты взаимодействия как минимум.
Чтобы по-другому взглянуть на проблемы, связанные с властью, см. Мой ответ здесь: Как сообщить общую точность оценки корреляций в контексте обоснования размера выборки.
Простая последующая мощность для логистической регрессии в R:
Допустим, ваши положительные ответы отражают реальную ситуацию в мире и что вы разослали 10 000 писем. Какова сила, чтобы обнаружить эти эффекты? (Обратите внимание, что я известен тем, что написал «комично неэффективный» код, ниже предполагается, что за ним проще следить, а не оптимизировать для эффективности; на самом деле он довольно медленный.)
Таким образом, мы видим, что 10000 писем на самом деле не достигают 80% мощности (любого рода) для обнаружения этих ответов. (Я не совсем уверен в том, что делает код SAS, чтобы объяснить резкое несоответствие между этими подходами, но этот код концептуально прост - если медленен - и я потратил некоторое время на его проверку, и я думаю, что они результаты разумны.)
Основанная на моделировании априорная мощность для логистической регрессии:
significant
источник
pwr
пакет). Этот подход дает вам возможность гораздо яснее подумать (и / или улучшить свое мышление) о том, что вы ожидаете, что вы будете делать с этим и т. Д. Однако, однако, что вам действительно нужны квадратные термины или что-то в этом роде. Аналогично, если ваши положительные показатели верны, b / c они не являются линейными, и одно только взаимодействие не позволяет вам фиксировать криволинейные отношения.poly
а не показывать новым пользователям R более подверженную ошибкам стратегию возведения в исходное значение. Я думаю, что полная модель должна была быть представлена какglm(responses~ poly(var1, 2) * var2, family=binomial(link="logit")
. Он будет менее подвержен статистической ошибке при интерпретации и гораздо более компактен. Может быть не важно в этом конкретном случае, когда вы смотрите только на общее соответствие, но может легко ввести в заблуждение менее искушенных пользователей, у которых может возникнуть соблазн взглянуть на отдельные термины.=
и т. Д. Люди будут лучше знакомы с возведением в квадрат переменных из базовой регрессии. класс и менее осведомлен о том, чтоpoly()
, есть, если они не R пользователи.Ответ @ Gung отлично подходит для понимания. Вот подход, который я бы использовал:
Эта функция проверяет общий эффект v2, модели могут быть изменены, чтобы посмотреть на другие типы тестов. Мне нравится писать это как функцию, так что, когда я хочу протестировать что-то другое, я могу просто изменить аргументы функции. Вы также можете добавить индикатор выполнения или использовать параллельный пакет для ускорения процесса.
Здесь я только что сделал 100 повторений, я обычно начинаю с этого уровня, чтобы найти приблизительный размер выборки, затем увеличиваю количество итераций, когда нахожусь в правильном парке мячей (нет необходимости тратить время на 10000 итераций, когда у вас есть 20% мощности).
источник
n
строками. Может быть более эффективно делать весовые коэффициенты и в функции.