如何解决为什么returnpval给std错误而不是p值?
我是r的新手,是为执行Cochran的Q测试同质性而编写的函数。我试图找到p值,但函数返回一个std。错误,而不是p值,如下所示。我担心我可能写错了代码。如果可以的话,请帮忙。
dput(g1):
c(Estimate = 0.89502349171762,`Std. Error` = 0.198551047700126,`z value` = 4.50777521491291,`Pr(>|z|)` = 6.55109263453831e-06
dput(g2):
c(Estimate = 0.798619626770536,`Std. Error` = 0.0963490218317536,`z value` = 8.28881924888765,`Pr(>|z|)` = 1.14378204173144e-16
dput(g3):
c(Estimate = 0.493965082375263,`Std. Error` = 0.27251885149614,`z value` = 1.81259050397201,`Pr(>|z|)` = 0.0698950035163995
Qtest <- function(g1,g2,g3){
w1 <- 1/(g1["Std. Error"])^2
w2 <- 1/(g2["Std. Error"])^2
w3 <- 1/(g3["Std. Error"])^2
avg <- (w1*g1["Estimate"] + w2*g2["Estimate"]+ w3*g3["Estimate"])/(w1+w2+w3)
test <- w1*(g1["Estimate"]-avg)^2 + w2*(g2["Estimate"] - avg)^2+ w3*(g3["Estimate"] - avg)^2
pval <- 1-pchisq(test,df=1)
return(pval)
}
Qtest(g1,g3)
# Std. Error
# 0.225857
解决方法
此函数返回的值是长度为1的命名向量。该向量纯粹是偶然命名的:您自己的计算本身就是使用命名向量(g1
,{{1} }和g2
),并对这些向量进行子集设置不会删除名称。
因此,当您写g3
时,该值也 命名为:
g1["Std. Error"]
该名称不会在随后的计算中自动消失。
但是该名称没有其他含义:您可以忽略它;该函数返回的值 是您计算出的值,换句话说,它是拒绝Cochran Q检验所检验的假设的p值。
您可以通过 〉g1["Std. Error"]
Std. Error
0.198551
删除函数内的麻烦名称:
unname
我还添加了一些空格以使该函数更具可读性;并删除了多余的Qtest <- function (g1,g2,g3) {
w1 <- 1 / g1["Std. Error"] ^ 2
w2 <- 1 / g2["Std. Error"] ^ 2
w3 <- 1 / g3["Std. Error"] ^ 2
avg <- (w1 * g1["Estimate"] + w2 * g2["Estimate"]+ w3 * g3["Estimate"]) / (w1 + w2 + w3)
test <- w1 * (g1["Estimate"] - avg) ^ 2 + w2 * (g2["Estimate"] - avg) ^ 2 + w3 * (g3["Estimate"] - avg) ^ 2
unname(1 - pchisq(test,df = 1))
}
函数调用-否则该函数不变。还有其他方法可以利用R的矢量化操作来重写功能。例如,我很想重写它,如下所示:
return
此函数需要一个结果矩阵:
Qtest = function (g) {
w = 1 / g[,'Std. Error'] ^ 2
avg = sum(w * g[,'Estimate']) / sum(w)
test = sum(w * (g[,'Estimate'] - avg) ^ 2)
1 - pchisq(test,df = 1)
}
(也就是说,我不相信这种实现是正确的-至少因为它的自由度固定为1,所以至少不是通用的。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。