R:计算行和(MERSQI分数),调整为缺失值/不适用类别



我想计算行的总和,包括对丢失数据的调整。

行和是";MERSQI";真实分数(对研究质量进行评分,每行1项研究(。每个col都是一个关于质量的问题,可以实现特定的最大点数。然而,在某些情况下,问题不适用于导致";缺少值";。行和应调整为标准分母18作为最大分数/行和,即:(最大可实现分数=适用问题的最大可实现得分之和/列(

MERSQI总分=行和/可达到的最大分数*18

例如:

questions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) #number of question or col number
max_quest <- c(3, 1.5, 1.5, 3, 1, 1, 1, 1, 3) #maximum of every single question
study1 <- c(1.5, 0.5, 1.5, 3, 0, 0, 0, 1, 3) #points for every single questions for study1
study2 <- c(1, 0.5, 0.5, 3, NA, NA, NA, 1, 1, 3) # for study2
study3 <- c(2, 1.5, NA, 3, NA, 1, NA, 1, 1, 3) #for study3
df <- rbind (questions, max_quest, study1, study2, study3)

对于研究1,我们将得到10.5的行和结果分数,因为没有遗漏的值。对于研究2,我们有一个10的行和。我们有三个NA,研究2的最大可达到分数为15(=18个最大分数-NA问题的3*1分(,调整后的MERSQI分数为12.85(=10*18/15(。对于研究3:行总和=12.5,可达到的最大分数=15.5(=18-(1.5+1+1((,调整后的MERSQI分数=15.53

你知道如何通过调整缺失值来计算行和吗?也许通过遍历每一行,使用for循环和ifis.na

谢谢!

附言:MERSQI评分的链接/解释:https://www.aliem.com/article-review-how-do-you-assess/和https://pubmed.ncbi.nlm.nih.gov/26107881/

向量的长度有问题。我编辑了数据集,使它们的长度都是9,但这应该有效:

apply(mat[, 3:5],
2,
FUN = function (x) {
tot = sum(x, na.rm = TRUE)
nas = which(is.na(x))
total_max = sum(max_quest)
if (!length(nas)) 
return(tot)
else
return(tot * total_max / (total_max - sum(max_quest[nas])))
})

数据

questions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9) #number of question or col number
max_quest <- c(3, 1.5, 1.5, 3, 1, 1, 1, 1, 3) #maximum of every single question
study1 <- c(1.5, 0.5, 1.5, 3, 0, 0, 0, 1, 3) #points for every single questions for study1
study2 <- c(1, 0.5, 0.5, 3, NA, NA, NA, 1, 1) # for study2
study3 <- c(2, 1.5, NA, 3, NA, 1, NA, 1, 1) #for study3
## rename mat because cbind(...) of vectors returns matrix.
mat <- cbind (questions, max_quest, study1, study2, study3)

对于每个study列,计算其sum乘以max_quest的和,再除以max_quest-NA的值。

library(dplyr)
val <- sum(df$max_quest)
df %>%
summarise(across(starts_with('study'), 
~sum(., na.rm = TRUE)* val/(val - sum(max_quest[is.na(.)]))))

数据

由于长度不兼容,共享的数据不完整。此外,如果这些值是按列而不是按行的,这也是有意义的。

questions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
max_quest <- c(3, 1.5, 1.5, 3, 1, 1, 1, 1, 3, 3)
study1 <- c(1.5, 0.5, 1.5, 3, 0, 0, 0, 1, 3, 0) 
study2 <- c(1, 0.5, 0.5, 3, NA, NA, NA, 1, 1, 3)
study3 <- c(2, 1.5, NA, 3, NA, 1, NA, 1, 1, 3)
df <- data.frame(questions, max_quest, study1, study2, study3)

这可以通过矢量化来完成。

首先应用行和并查找NA的数量:

row_sums <- apply(df, 1, function(x) sum(x, na.rm=T))

row_NAs <- apply(df,1, function(x) sum(is.na(x)))

然后拉出研究和最大点:

studies <- row_sums[3:length(row_sums)]

max <- row_sums[2]

根据NA:,根据调整后的最大值计算MERSQI

adjusted_max <- rep(max, length(studies)) - row_NAs[3:length(row_NAs)]

MERSQI <- studies * max / adjusted_max

相关内容

  • 没有找到相关文章

最新更新