R功率与信号强度代码

时间:2011-01-11 21:20:54

标签: 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

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

3 个答案:

答案 0 :(得分:1)

您指出的错误可在get.p.value(-0.5)中找到。查看函数内部显示您将此-0.5)值赋予rpois,该值不能将负数作为参数。

我真的不知道你想做什么,但你可能会用get.p.value(0.5)来运行你的代码。

祝你好运!

答案 1 :(得分:0)

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

因此,当您收到错误或警告(我认为该消息是我的)时,您可以检查任何变量以获取其当前值。 warn的默认值为1,完成后应将其设置为。

(我怀疑,和你一起,你会发现9 - ( - some_slope)* some_height给rpois调用一个负值。(rpois 的预期值需要是好的,对吧?)

答案 2 :(得分: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的第-5个元素时,这没有意义。

最后一行

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

给了我一个3.16 * 10 ^ -107的结果,这是真正接近0的结果。这对我来说很有意义,因为我认为你的代码是在问“如果我从模型中删除所有信息,有什么价值有任何信息吗?“

我可能会离开这里...但希望这能帮到你!