2011-01-11 86 views
0

我希望有新鲜眼睛的人能够帮助我在这里!我试图发现一个实验的力量,所以也做了以下内容:R电源与信号强度代码

height <- seq(0, 151) 
social <- rpois(length(height), 9 + 0.2 * (height)) 
m2 <- glm(score ~ height, family = poisson) 
summary(m2) 
m3 <- update(m2, ~. - height) 
anova(m2, m3, test = "Chi") 
test.results <- anova(m2, m3, test = "Chi") 
names(test.results) 
test.results$"P(>|Chi|)" 
test.results$"P(>|Chi|)"[2] 
get.p.value <- function(slope) { 
    social <- rpois(length(height), 9 + slope * (height)) 
    m2 <- glm(score ~ height, family = poisson) 
    m3 <- update(m2, ~. - r.hand) 
    anova(m2, m3, test = "Chi")$"P(>|Chi|)"[2] 
} 
p.vals <- numeric(1000) 
for (i in 1000) { 
    p.vals[-0.5] <- get.p.value(-0.5) 
} 
p.vals 
power.of.test <- length(p.vals[p.vals < 0.05])/length(p.vals) 
power.of.test 
slope.line <- seq(-0.2, -1.1, -0.1) 
p.vals <- numeric(100) 
power.of.test <- numeric(10) 
for (j in 1:10) { 
    for (i in 1:100) p.vals[i] <- get.p.value(slope.line[j]) 
    power.of.test[j] <- length(p.vals[p.vals < 0.05])/length(p.vals) 
} 
plot(slope.line, power.of.test) 

然而,这将产生:

In rpois(length(height), 9 + slope * (height)) : NAs produced 

我显然犯了愚蠢的错误的地方,并花了一整天重新输入它以确保我不会错过括号等,但一切似乎都是按顺序的。我有一种感觉,这与我从glm获得的9和斜率值有关,但这可能是错误的?提前致谢。

+0

你愿意缩进和注释你的代码吗? – 2011-01-11 21:26:22

+1

您的泊松率(lambda)不能小于0. – 2011-01-11 22:06:03

回答

0

试试这个:之后for (j in 1:10) {放于browser() ...然后在命令行中输入提交代码之前:options(warn=2)

所以,当你得到一个错误或警告(我什么,我认为消息是),您可以检查任何变量以获取其当前值。警告的默认值为1,完成后应将其设置回去。

(我怀疑,与你一起,你会发现,9 - ( - some_slope)* some_height给出了rpois呼叫负值(预期值rpois 必须是积极的,对吗? )

1

你指出了错误get.p.value(-0.5)被发现。看里面的功能显示你正对这个(-0.5)值rpois,不能采取负数作为参数。

我真的不知道是什么你想这样做,但是你可以用get.p.value(0.5)代替你的代码。

祝你好运!

0

几个意见:

在你有“分数”的glm功能,但没有定义。你的意思是“社交”吗? 在for循环中你有for(i in 1000),我想你的意思是for(i in 1:1000)。此外

p.vals[-0.5] <- get.p.value(-0.5) 

不超过ip.vals[]迭代表示索引...当你在谈论的p.vals的-.5th元件,它没有任何意义。

最后行

test.results$"P(>|Chi|)"[2] 

给我的3.16 * 10^-107的结果,这是真正的现实接近0。这对我来说很有意义,因为我觉得你的代码问:“如果我删除模型中的所有信息,获取任何信息的价值是什么?“

我可以在这里打基础......但希望这可以帮助你!