我是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
答案 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)