【发布时间】:2015-08-10 13:53:05
【问题描述】:
我在调用 boxcox 函数时遇到了使用 apply 函数的问题。
该数据集包含 35 个样本,2 天内 3 次治疗(有些人在几天内重复,但总是在治疗组内),有大约 1000 个测量值/因变量,我在这里只包括了 5 个(#1,2,4, 7,9)。
NUM day trt 1 2 4 7 9
8145 7 L 0.986 0.423 0.86 0.648 2.031
8169 7 L 1.013 0.512 1.157 0.633 0.55
8201 7 L 0.236 6.144 0.604 1.759 1.181
8212 7 L 0.455 0.707 0.693 0.972 0.615
8168 7 L 1.261 0.618 1.138 0.943 0.868
8193 7 L 1.754 0.273 1.224 0.719 0.895
8145 13 L 1.257 0.36 1.505 0.729 0.735
8169 13 L 1.549 0.577 1.53 0.771 1.116
8201 13 L 0.489 0.378 0.842 1.538 1.676
8212 13 L 0.991 0.34 1.03 1.157 1.076
8168 13 L 1.355 0.391 1.416 0.953 1.479
8193 13 L 1.029 0.308 1.027 0.902 1.934
8214 7 C 1.224 0.298 1.113 1.445 0.218
8139 7 C 1.277 0.554 1.443 0.895 0.74
8151 7 C 1.312 2.025 1.197 0.675 0.791
8160 7 C 1.555 0.405 1.432 0.826 0.501
8196 7 C 0.938 0.717 0.917 0.801 1.462
8213 7 C 0.835 1.863 0.942 1.967 0.739
8139 13 C 0.958 0.275 1.273 1.351 0.842
8151 13 C 0.864 0.517 0.98 1.368 1.865
8160 13 C 1.516 0.895 1.318 0.551 0.779
8239 13 C 1.071 0.194 0.955 1.87 0.68
8196 13 C 1.299 0.594 1.14 0.877 1.873
8213 13 C 1.601 0.733 1.375 0.738 1.273
8231 7 H 1.401 0.483 1.001 1.052 0.548
8232 7 H 1.292 0.574 1.634 0.641 0.464
8219 7 H 0.785 0.396 0.886 0.903 1.734
8177 7 H 0.525 0.252 0.563 0.914 1.174
8143 7 H 1.398 0.266 0.947 0.94 0.781
8219 13 H 0.903 6.225 1.109 1.218 1.073
8143 13 H 1.086 0.435 1.4 0.922 0.925
8167 13 H 0.83 0.574 1.09 1.338 1.563
8231 13 H 1.498 0.482 1.375 0.855 0.719
8232 13 H 1.055 0.811 0.887 0.606 0.634
8177 13 H 0.857 1.324 0.954 1.635 0.675
我正在尝试在 R 的 MASS 包中运行 boxcox 函数,以评估是否需要转换数据,如果需要,则根据具有最大对数似然(或其舍入)的 lamda 值进行转换。
linear.f=function(x){lm(x~day+trt+day*trt, data=data)}
linear.multiple=apply(data[,4:ncol(data)],2,linear.f)
工作正常
单独运行 boxcox 函数也可以正常工作
boxcox(lm(x~day+trt+day*trt,data=data))$x[which.max(boxcox(lm(x~day+trt+day*trt, data=data))$y)]
将函数放入apply:
lamda.f=function(x){boxcox(lm(x~day+trt+day*trt, data=data))$x[which.max(boxcox(lm(x~day+trt+day*trt, data=data))$y)]}
但是,当尝试使用 apply 跨所有列/因变量运行 boxcox 时会出现问题:
lamda.multiple=apply(data[,4:ncol(data)],2,lamda.f)
错误:
Error in model.frame.default(formula = x ~ day + trt + day * trt, data = data, :
invalid type (list) for variable 'x'
我在做一些明显不正确的事情吗?因为 boxcox 将在每列数据上一个一个地工作..
我也尝试过使用 for 循环而不是 apply,但没有成功
任何建议或帮助将不胜感激。
【问题讨论】: