提取拆分数据的cor测试的p值

时间:2018-06-13 00:35:35

标签: r

我是R学习者,需要帮助使用分割数据提取cor测试的p值。

示例数据框:

Periods     Factor 1    Factor 2
10/31/2007  76      215
10/31/2007  366     384
10/31/2007  194     186
10/31/2007  234     266
10/31/2007  365     236
9/31/2007   400     347
9/31/2007   116     197
9/31/2007   249     275
9/31/2007   132     177
9/31/2007   211     253
8/31/2007   276     67
8/31/2007   224     362
8/31/2007   161     27
8/31/2007   124     263

我创建了这个函数,从每月分割数据中得到两个因子的cor和p值

IC_cor_test <- function(x1,x2){
  corr <- cor.test(x1, x2, use='complete.obs', method = 'spearman',conf.level = 0.95,exact=FALSE)
  pvalue = corr$p.value
  cor_coef = corr$estimate
  return (c(cor_coef,pvalue))
}

拆分数据 - 计算每个月两个因素的相关系数

dates <- as.Date(Periods)
r <- ddply(df, "dates", function(IC_cor_test) {
  cor(IC_cor_test$ranked_factor1,IC_cor_test$ranked_factor2)
})

结果 - 它打印了cor系数,但我需要在下一列上找到相应的p值。

     dates            V1
1   2007-10-31  0.2883066006
2   2007-11-30  0.0216892076
3   2007-12-31 -0.0697973283
4   2008-01-31  0.0343008730
5   2008-02-29  0.0333372672
6   2008-03-31  0.0007681072
7   2008-04-30  0.1196884915
8   2008-05-30  0.2301050604
9   2008-06-30 -0.0248823873

3 个答案:

答案 0 :(得分:0)

您实际上并未在代码中调用自定义函数。相反,在调用常规cor函数时,您将使用函数名作为临时变量。

你想要做的是使用像x这样的变量,它指定数据帧的每个子集,然后在数据上调用你的自定义函数,如下所示:

/openmp

答案 1 :(得分:0)

这是你要找的吗? (注意:导入时更改了变量名称bc错误,我懒得修复;列是Factor,然后是X1,然后是library(magrittr) library(dplyr) > df %>% select(Periods,Factor,X1) %>% group_by(Periods) %>% mutate(correl = cor.test(unlist(Factor), unlist(X1))$estimate, p_value = cor.test(unlist(Factor), unlist(X1))$p.value) %>% select(Periods,correl,p_value) %>% distinct() # A tibble: 3 x 3 # Groups: Periods [3] Periods correl p_value <fct> <dbl> <dbl> 1 10/31/2007 0.624 0.261 2 9/31/2007 0.980 0.00338 3 8/31/2007 -0.142 0.858 ,所以将这些列映射到您的三列):< / p>

"compile-js": "browserify assets/static/js/main.js | uglifyjs > assets/static/js/bundle.js",
"compile-sass": "node-sass assets/scss/app.scss assets/static/css/app.css --output-style compressed"

答案 2 :(得分:0)

将函数输入ddply的方法不正确。您正在将cor()值输入到无效指定的函数中,而不是调用您之前创建的函数。

我在这里修复了这个并略微调整了函数定义。

IC_cor_test <- function(x){
  x1 <- x$Factor1
  x2 <- x$Factor2
  corr <- cor.test(x1, x2, use='complete.obs', method = 'spearman',conf.level = 0.95,exact=FALSE)
  pvalue = corr$p.value
  cor_coef = corr$estimate
  return(data.frame(cor_coef=cor_coef,pvalue=pvalue))
}

r <-  ddply(df, "dates", IC_cor_test)
      dates cor_coef     pvalue
 2007-08-31      0.0 1.00000000
 2007-09-30      0.9 0.03738607
 2007-10-31      0.8 0.10408804

此外,9/31/07不是真正的日期,因此示例数据不能直接使用,但我将其更改为9/30/07并按如下方式加载您的示例:

df <- read.table(text="Periods     Factor1    Factor2
                      '10/31/2007'  76      215
                      '10/31/2007'  366     384
                      '10/31/2007'  194     186
                      '10/31/2007'  234     266
                      '10/31/2007'  365     236
                      '9/30/2007'   400     347
                      '9/30/2007'   116     197
                      '9/30/2007'   249     275
                      '9/30/2007'   132     177
                      '9/30/2007'   211     253
                      '8/31/2007'   276     67
                      '8/31/2007'   224     362
                      '8/31/2007'   161     27
                      '8/31/2007'   124     263
",header=T)