R:由ddply组测试
我正在尝试计算数据框中两个数字列之间的关联,以确定每个因子的级别。 这是一个示例数据框架:
concentration <-(c(3, 8, 4, 7, 3, 1, 3, 3, 8, 6))
area <-c(0.5, 0.9, 0.3, 0.4, 0.5, 0.8, 0.9, 0.2, 0.7, 0.7)
area_type <-c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B")
data_frame <-data.frame(concentration, area, area_type)
在这个例子中,我想要计算每个area_type级别的浓度和面积之间的关系。 我想使用cor.test而不是cor,因为我想要p值和kendall tau值。 我试图用ddply来做到这一点:
ddply(data_frame, "area_type", summarise,
corr=(cor.test(data_frame$area, data_frame$concentration,
alternative="two.sided", method="kendall") ) )
然而,我对输出有一个问题:它与正常的Kendall cor.test输出的组织方式不同,它表示z值,p值,替代假设和tau估计。 而不是那个,我得到下面的输出。 我不知道输出的每一行是什么。 另外,对于每个level_type的输出值都是相同的。
area_type corr
1 A 0.3766218
2 A NULL
3 A 0.7064547
4 A 0.1001252
5 A 0
6 A two.sided
7 A Kendall's rank correlation tau
8 A data_frame$area and data_frame$concentration
9 B 0.3766218
10 B NULL
11 B 0.7064547
12 B 0.1001252
13 B 0
14 B two.sided
15 B Kendall's rank correlation tau
16 B data_frame$area and data_frame$concentration
我在做什么错误与ddply? 或者还有其他的方式吗? 谢谢。
您可以添加更多的名称为corr的列。 另外,你的语法稍微不正确。 这个.
指定变量来自您指定的数据框。 然后删除data_frame $,否则它将使用整个数据帧:
ddply(data_frame, .(area_type), summarise, corr=(cor.test(area, concentration, alternative="two.sided", method="kendall")), name=names(corr) )
这使:
area_type corr name
1 A -0.285133 statistic
2 A NULL parameter
3 A 0.7755423 p.value
4 A -0.1259882 estimate
5 A 0 null.value
6 A two.sided alternative
7 A Kendall's rank correlation tau method
8 A area and concentration data.name
9 B 6 statistic
10 B NULL parameter
11 B 0.8166667 p.value
12 B 0.2 estimate
13 B 0 null.value
14 B two.sided alternative
15 B Kendall's rank correlation tau method
16 B area and concentration data.name
统计量是z值,估计值是tau估计值。
编辑:你也可以这样做,只拉你想要的东西:
corfun<-function(x, y) {
corr=(cor.test(x, y,
alternative="two.sided", method="kendall"))
}
ddply(data_frame, .(area_type), summarise,z=corfun(area,concentration)$statistic,
pval=corfun(area,concentration)$p.value,
tau.est=corfun(area,concentration)$estimate,
alt=corfun(area,concentration)$alternative
)
这使:
area_type z pval tau.est alt 1 A -0.285133 0.7755423 -0.1259882 two.sided 2 B 6.000000 0.8166667 0.2000000 two.sided
部分原因不起作用的是cor.test回报:
Pearson's product-moment correlation
data: data_frame$concentration and data_frame$area
t = 0.5047, df = 8, p-value = 0.6274
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.5104148 0.7250936
sample estimates:
cor
0.1756652
这些信息不能放入data.frame(ddply所做的),而不会使代码复杂化。 如果您能提供您需要的确切信息,那么我可以提供进一步的帮助。 我会看看只是使用
corrTest <- ddply(.data = data_frame,
.variables = .(area_type),
.fun = cor(concentration, area,))
method="kendall")))
我没有测试这个代码,但这是我最初和从这里开始工作的路线。
链接地址: http://www.djcxy.com/p/57749.html