Ancova模拟:功率分析

时间:2014-12-09 06:23:49

标签: r statistics simulation

我是一名大学生参加生态设计的统计课程,需要帮助找出如何在R中进行功率分析。我使用的是ANCOVA设计,没有互动;在这个假设的实验中,有两个花卉品种种植在独立的地块上,每个地块收集的解释变量是土壤水分,响应是花卉产量。

我模拟了一个名为sim.flowers的数据集,其中包含花朵之间的差异的α效果,斜率,我的x值的n,以及我将在y矢量中使用的正态分布的sigma(以下一个y = alpha + beta0 + beta1X的ancova模型;为简单起见,我做了截距0)见下文:

sim.flowers <- function(alpha,slope,n,sigma) {
x <-runif(2*n, min = -1, max = 1) 
flower.effects <- rep(c(0,alpha),each=n) #there are two different flower varieties and I gave them a true difference of 1. 
y <- flower.effects + slope * x  + rnorm(2*n, 0, sigma)
data.frame(x=x,y=y,flower.effects = flower.effects)
}

我测试了它并且它有效,它给了我一个带有X a Y和花效果列的数据集

> test1 <- sim.oats(1,0.5,3,0.3)
> test1
        x           y        flower.effects
1 -0.99913780 -0.31373866           0
2 -0.38610391  0.41070965           0
3 -0.58308522  0.07426254           0
4 -0.35900237  0.36395132           1
5 -0.07296464  1.29149447           1
6  0.18575996  0.85001847           1

目标是创建一个显示检测花朵品种效果的力量的图形,每种花朵的不同重复次数的不同线条为此我被告知应该只选择土壤水分效应的1个值。 / p>

图中显示了检测土壤水分效应的能力,每种花卉品种处理的不同重复次数的不同品系,选择花卉品种的1个值

为了开始到达这里,我在for循环中运行了一个线性回归,这样我就可以提取p值并能够绘制一个功率图,设置在0.5时拒绝空值的概率,我的代码低于

> sim.flowers.many <- function(alpha,slope,n,sigma,numsimulations){
+   pvals <-numeric(numsimulations)
+   for(i in 1:numsimulations){
+       thisdat <-sim.flowers(alpha,slope,n,sigma)
+       thisfit <-lm(y~x,thisdat)
+     pvals[i]<-coefficients(summary(thisfit))['x','Pr(>|t|)']
+   }
+   return(pvals)
+ }
> sim.flowers.many( alpha = 1,slope = 0.5, n = 3, sigma = 6, numsimulations =3)
[1] 0.7662218 0.4454654 0.2414637

我似乎正在获得p值。我做了以下操作,期望我得到一个带有列的数据框,该列表明拒绝null的概率,以便我可以将其绘制出来。

> determine.power <- function(true.slopes){
+     true.slopes <-0:3
+     out<- data.frame(true.slopes,prob.reject.null=NA)
+       for(i in 1:length(true.slopes)){
+       thesepvals <- sim.flowers.many(alpha = 1,slope = 0.5, n = 3, sigma = 6, numsimulations =3)
+       out[i,2] <- mean(thesepvals < 0.05)
+         }
+     return(out)
+     }

我把它作为输出:

> determine.power(true.slopes=0.5)
    true.slopes prob.reject.null
1           0        0.0000000
2           1        0.0000000
3           2        0.3333333
4           3        0.3333333

我想我可以这样画出来:

 power.results <- determine.power(seq(0, 2, by = 0.2))
 plot(prob.reject.null ~ true.slopes, data = power.results, main = "Power analysis", xlab     = "true slope", 
ylab = "Prob. reject null", ylim = c(0,1), type = "b", col = "slateblue4") 
 grid(col = "hotpink")

虽然我似乎理解了功率分析所需代码的编写,但我无法理解如何创建我应该创建的两个数字。我不知道如何更改此代码,以便我生成的功率数据反映了土壤湿度和花卉种类的影响。我很感激为解决这个问题提供任何帮助,我为这个问题道歉,但我觉得这是我要问的问题的必要背景。

1 个答案:

答案 0 :(得分:-1)

您可以将结果与pwr.f2.test{pwr}

进行比较