初步资料:
正如G * Power手册中所讨论的,根据您要解决的问题,有几种不同类型的功率分析。(也就是说,,效果大小,和功效彼此相关;指定其中任意三个即可解决第四个问题。) Ë 小号αNESα
- 在您的描述中,您想知道适当的来捕获您用指定的响应率,功率= 80%。这是先验的力量。 α = 0.05Nα=.05
- 我们可以从事后功率(确定功率给定,响应率和alpha)开始,因为这在概念上更简单,然后再向上移动N
除了@GregSnow的出色文章之外,还可以在此处找到关于基于仿真的CV功率分析的另一个非常好的指南:计算统计功率。总结基本思想:
- 找出您想要能够检测到的效果
- 从可能的世界中生成N个数据
- 运行您打算对这些人造数据进行的分析
- 根据您选择的alpha存储结果是否“显着”
- 重复多次()次并使用%的“显着性”作为该(事后)功效的估计值ñBN
- 要确定先验幂,请搜索可能的来找到产生所需幂的值 N
您是否会发现特定迭代的重要性可以理解为伯努利试验的结果,概率为(其中是幂)。在次迭代中找到的比例使我们能够近似真实的。为了获得更好的近似值,我们可以增加,尽管这也会使仿真花费更长的时间。 p 乙p 乙ppBpB
在R中,以给定的“成功”概率生成二进制数据的主要方式是?
- 例如,要从10个概率为p的伯努利试验中获得成功的次数,代码将为
rbinom(n=10, size=1, prob=p)
,(您可能希望将结果分配给变量以进行存储)
- 您还可以使用?runif来不太优雅地生成此类数据,例如,
ifelse(runif(1)<=p, 1, 0)
- 如果您认为结果是由潜在的高斯变量介导的,则可以将潜在变量生成为带有?rnorm的协变量的函数,然后将其转换为概率,
pnorm()
并在rbinom()
代码中使用它们。
您声明将“包括多项式项Var1 * Var1)以解决任何曲率”。这里有些混乱;多项式项可以帮助我们解释曲率,但这是一个交互项,它不会以这种方式帮助我们。但是,您的回复率要求我们在模型中同时包括平方项和交互项。具体来说,您的模型将需要包括:,和,而不是基本术语。 v a r 1 * v a r 2 v a r 1 2 * v a r 2var12var1∗var2var12∗var2
- 尽管是在另一个问题的上下文中编写的,但我在这里的回答是:logit模型和概率模型之间的差异具有许多关于这些类型的模型的基本信息。
就像在存在多个假设时(例如,每个对比错误率,家庭错误率和每个家庭错误率)有不同类型的I型错误率一样,也存在不同类型的功效 *(例如,对于一个单个预先指定的效果,任何效果和所有效果)。您还可以寻求检测特定效果组合的能力,或者寻求对整个模型进行同时测试的能力。根据您对SAS代码的描述,我的猜测是它正在寻找后者。但是,根据您对情况的描述,我假设您希望至少检测到交互作用。
以另一种方式思考与电源相关的问题,请在此处查看我的答案:如何在证明样本量合理的情况下报告估计关联性的一般精度。
R中逻辑回归的简单事后功效:
假设您的假设答复率代表了世界的真实情况,并且您已发出10,000封信。检测这些影响的力量是什么?(请注意,我以编写“通常效率不高”的代码而闻名,以下内容旨在易于遵循,而不是针对效率进行优化;实际上,它相当慢。)
set.seed(1)
repetitions = 1000
N = 10000
n = N/8
var1 = c( .03, .03, .03, .03, .06, .06, .09, .09)
var2 = c( 0, 0, 0, 1, 0, 1, 0, 1)
rates = c(0.0025, 0.0025, 0.0025, 0.00395, 0.003, 0.0042, 0.0035, 0.002)
var1 = rep(var1, times=n)
var2 = rep(var2, times=n)
var12 = var1**2
var1x2 = var1 *var2
var12x2 = var12*var2
significant = matrix(nrow=repetitions, ncol=7)
startT = proc.time()[3]
for(i in 1:repetitions){
responses = rbinom(n=N, size=1, prob=rates)
model = glm(responses~var1+var2+var12+var1x2+var12x2,
family=binomial(link="logit"))
significant[i,1:5] = (summary(model)$coefficients[2:6,4]<.05)
significant[i,6] = sum(significant[i,1:5])
modelDev = model$null.deviance-model$deviance
significant[i,7] = (1-pchisq(modelDev, 5))<.05
}
endT = proc.time()[3]
endT-startT
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.042
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.017
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.035
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.019
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.022
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 0.168
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.001
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.065
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.017
因此,我们发现10,000个字母并不能真正实现80%的检测任何响应率的能力。(我对SAS代码的工作方式还不确定,无法解释这些方法之间的明显差异,但是从概念上讲,这段代码很简单-如果很慢,我花了一些时间对其进行检查,我认为这些结果是合理的。)
基于逻辑的逻辑回归的先验能力:
从这里开始,想法是简单地搜索可能的,直到找到一个可以产生您感兴趣的功率类型的期望水平的值。您可以对此进行编码的任何搜索策略都可以(在理论)。鉴于要捕获如此小的效果需要,因此值得思考如何更有效地做到这一点。我的典型方法只是蛮力,即评估我可能合理考虑的每个(但是请注意,我通常只会考虑一个很小的范围,并且我通常使用非常小的来工作-至少与此相比。) N N NNNNN
相反,我在这里的策略是将可能的括起来以了解幂的范围。因此,我选择了500,000 的,然后重新运行代码(启动相同的种子,运行一个半小时才完成)。结果如下: NNN
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.115
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.091
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.059
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.606
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.913
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 1
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.005
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.96
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.606
从中我们可以看到,效果的大小差异很大,因此您检测效果的能力也有所不同。例如,的影响特别难以检测,即使有100万个字母,也仅占6%的时间。另一方面,作为一个整体,该模型始终比空模型好得多。其他可能性介于两者之间。尽管大多数“数据”在每次迭代时都被丢弃,但仍有可能进行大量探索。例如,我们可以使用矩阵来评估不同变量的概率之间的相关性。 var12significant
最后,我要指出的是,由于您所处情况的复杂性和大,这并不像我最初评论中所怀疑/声称的那样简单。但是,您肯定可以从我在这里获得的信息中大致了解如何完成此操作以及功耗分析中涉及的问题。HTH。 N