当前位置: 首页 > 知识库问答 >
问题:

在R中创建Z分数矩阵

晏德佑
2023-03-14

我有一个data.frame包含三个二进制变量的调查数据。数据已经在列联表中,前3列是答案(1=是,0=否),第四列显示答案的总数。行是三个不同的组。

我的目的是计算Z分数,以检查比例与总的相比是否有显著差异

这是我的数据:

library(dplyr) #loading libraries
df <- structure(list(var1 = c(416, 1300, 479, 417), 
                     var2 = c(265, 925,473, 279),
                     var3 = c(340, 1013, 344, 284),
                     totalN = c(1366, 4311,1904, 1233)),
                class = "data.frame",
                row.names = c(NA, -4L),
                .Names = c("var1","var2", "var3", "totalN"))

这些是我的总价值

dfTotal <-  df %>% summarise_all(funs(sum(., na.rm=TRUE)))
dfTotal
dfTotal <- data.frame(dfTotal)
rownames(dfTotal) <- "Total"
zScore <- function (cntA, totA, cntB, totB) {
  #calculate
  avgProportion <- (cntA + cntB) / (totA + totB)
  probA <- cntA/totA
  probB <- cntB/totB
  SE <- sqrt(avgProportion * (1-avgProportion)*(1/totA + 1/totB))
  zScore <- (probA-probB) / SE
  return (zScore)
}
df %>% mutate_all(funs(zScore(., totalN,dftotal$var1,dfTotal$totalN)))

所以这里当前使用的参数dftotal$var1和dftotal$totaln不起作用,但我不知道如何将它们输入公式。对于第一个参数,它不能总是var1,而应该是var2、var3(和totalN),以匹配第一个参数。

共有1个答案

孟均
2023-03-14

如果您想在DPLYR管道中使用zscore函数,我们需要首先整理您的数据,并添加包含DFTotal中的值的新变量:

library(dplyr)
library(tidyr)

        # add grouping variables we'll need further down
df %>% mutate(group = 1:4) %>% 
        # reshape data to long format
        gather(question,count,-group,-totalN) %>%
        # add totals by question to df
        group_by(question) %>%
        mutate(answers = sum(totalN),
               yes = sum(count)) %>%
        # calculate z-scores by group against total
        group_by(group,question) %>%
        summarise(z_score = zScore(count, totalN, yes, answers)) %>%
        # spread to wide format
        spread(question, z_score)
## A tibble: 4 x 4
#  group       var1       var2      var3
#* <int>      <dbl>      <dbl>     <dbl>
#1     1  0.6162943 -2.1978303  1.979278
#2     2  0.6125615 -0.7505797  1.311001
#3     3 -3.9106430  2.6607258 -4.232391
#4     4  2.9995381  0.4712734  0.438899
 类似资料:
  • 本文向大家介绍如何在R中创建具有随机值的矩阵?,包括了如何在R中创建具有随机值的矩阵?的使用技巧和注意事项,需要的朋友参考一下 通常,使用给定值创建矩阵,但是如果我们要创建具有随机值的矩阵,则将对矩阵函数使用常规方法。R中的随机选择可以根据我们的目标以多种方式完成,例如,如果要从正态分布中随机选择值,则将使用rnorm函数并将其存储在矩阵中,然后将其传递到矩阵函数中。 示例 输出结果 示例 输出结

  • 我想通过使用或任何其他函数在R中创建以下序列。 基本上,。

  • 我有一个42行2列的矩阵[a]。然后,我有一个函数随机选择这些行中的12行,对随机选择的矩阵进行线性回归,并输出线性回归的系数(斜率和截距)。 在R中,我想从原始矩阵中得到其他30行,这些行在随机函数中没有被选中,然后使用这些数据和我新计算的系数,生成一个点(y值)。因此,我将有30个Y值,然后使用新的Y值和新的30行矩阵中的1列计算RMSE(http://upload.wikimedia.org

  • 中的值匹配功能非常有用。但据我理解,它不足以支持二维或高维输入。 例如,假设和是相同列数的矩阵,我想将的行与的行进行匹配。“R”函数调用不这样做。列表的输入也存在同样的不足。 我已经实现了我自己的版本,名为(附在下面),但我想知道您对此任务的解决方案是什么。

  • 我试图研究我的数据中有零值的概率,我开发了一个代码,当一列数据为零时输出另一列数据的值,这正是我所需要的。但是,对于577BY29数据流中的每一列和其他28列都要这样做是很困难的,所以我决定创建一个for循环,在我有以下内容的地方为我这样做: 您可以看到,当输出数据帧有n=29列时,代码循环正确,但对于上面指定的条件,代码循环不正确。 请帮忙,谢谢!

  • 问题内容: 我已经创建了分区函数,但是无法将其应用于表。我不确定我要去哪里错。 这是我的分区函数: 尝试应用于此表: 但是,当我尝试执行表脚本时,出现此错误: 请帮忙。 分步骤重新发布我的代码 皮纳尔的补习非常棒!这是一个简短的摘要 为每个分区添加文件组 创建分区功能 AS RANGE left FOR VALUES (20120301) 创建分区方案 AS PARTITION Partition