我试图确定两个Gamm分布之间是否存在显着差异。一个分布具有(形状,比例)=(shapeRef,scaleRef)而另一个具有(形状,比例)=(shapeTarget,scaleTarget)。我尝试使用以下代码进行方差分析
n=10000
x=rgamma(n, shape=shapeRef, scale=scaleRef)
y=rgamma(n, shape=shapeTarget, scale=scaleTarget)
glmm1 <- gam(y~x,family=Gamma(link=log))
anova(glmm1)
得到的p值不断变化,可以是<0.1到> 0.9。
我是以错误的方式解决这个问题吗?
编辑:我使用以下代码
f <- gl(2, n)
x=rgamma(n, shape=shapeRef, scale=scaleRef)
y=rgamma(n, shape=shapeTarget, scale=scaleTarget)
xy <- c(x, y)
anova(glm(xy ~ f, family = Gamma(link = log)),test="F")
但是,每次运行它都会得到不同的p值。
答案 0 :(得分:2)
每次运行时,您确实会获得不同的p值,如果每次都选择不同的实现。就像您的数据值是随机变量一样,您每次运行实验时都会发生变化,p值也是如此。如果零假设为真(在初始尝试中就是这种情况),则p值将均匀分布在0和1之间。
生成模拟数据的功能:
simfun <- function(n=100,shapeRef=2,shapeTarget=2,
scaleRef=1,scaleTarget=2) {
f <- gl(2, n)
x=rgamma(n, shape=shapeRef, scale=scaleRef)
y=rgamma(n, shape=shapeTarget, scale=scaleTarget)
xy <- c(x, y)
data.frame(xy,f)
}
运行anova()
并提取p值的函数:
sumfun <- function(d) {
aa <- anova(glm(xy ~ f, family = Gamma(link = log),data=d),test="F")
aa["f","Pr(>F)"]
}
尝试一下,500次:
set.seed(101)
r <- replicate(500,sumfun(simfun()))
p值总是非常小(比例参数的差异很容易区分),但它们确实有所不同:
par(las=1,bty="l") ## cosmetic
hist(log10(r),col="gray",breaks=50)