我已经在论坛上搜索了一段时间,但我似乎无法找出我的问题的答案(尽管我已经接近了几次)。如果这已经在其他地方得到回答并且我错过了,我很抱歉。
我正在使用 HSAUR2 库中的埃及头骨数据。我将通过下面的代码解释我的问题。我首先加载头骨数据并在其上运行统计摘要(例如箱线图、平均值、标准开发人员等)。这些摘要(此处未显示)按变量(头骨数据的第 2-5 列)和“纪元”(头骨数据的第 1 列)细分。
library(HSAUR2) # load the skulls data
head(skulls)
# epoch mb bh bl nh
# 1 c4000BC 131 138 89 49
# 2 c4000BC 125 131 92 48
# 3 c4000BC 131 132 99 50
# 4 c4000BC 119 132 96 44
# 5 c4000BC 136 143 100 54
# 6 c4000BC 138 137 89 56
然后我调用 powerTransform(car
包的一部分)来建议适当的转换来转换数据,以便生成的分布“更正常”。我对每个变量/时代组合都有一个转换。
library(car)
tfms_mb <- by(skulls$mb,skulls$epoch, function(x) powerTransform(x))
tfms_bh <- by(skulls$bh,skulls$epoch, function(x) powerTransform(x))
tfms_bl <- by(skulls$bl,skulls$epoch, function(x) powerTransform(x))
tfms_nh <- by(skulls$nh,skulls$epoch, function(x) powerTransform(x))
为了提取系数,我使用sapply
.
mbc <- sapply(tfms_mb,coef)
bhc <- sapply(tfms_bh,coef)
blc <- sapply(tfms_bl,coef)
nhc <- sapply(tfms_nh,coef)
问题:
如何对每个变量/纪元对应用适当的转换?我目前正在使用该bct()
函数(来自TeachingDemos
包)来应用转换,我可以计算出如何使用一个设定值来做到这一点(例如,将所有数据提高到 1.5 的幂):
library(TeachingDemos)
by(skulls[,-1], skulls[,1], function(x) { bct(x,1.5)})
我的问题是,如何替换上一行中的“1.5”,以循环遍历 mbc、bhc 等中的系数并将正确的功率应用于每个变量/时期组合?
我已经阅读了apply
几个小时的功能系列以及plyr
包装,但这个让我很难过!任何帮助,将不胜感激。