微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么returnpval给std错误而不是p值?

如何解决为什么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 举报,一经查实,本站将立刻删除。