I just updated a couple of minor issues with phyl.resid().
First, I realized that with a very minor change to the code I could allow the function to accept multiple variables for x. This would be useful for multivariable regression and size correction. Basically, in the method="lambda" portion of the code, I simply changed:
beta<-matrix(NA,2,ncol(Y),dimnames=list(colnames(X),colnames(Y)))
to:
beta<-matrix(NA,ncol(X),ncol(Y),dimnames=list(colnames(X),colnames(Y)))
(method="BM", the default, already worked for multiple x or size variables without modification).
Second, in making this change I realized that there was a small error when the number of y variables was only one. Again, this affected method="lambda". It turns out that although for matrix Y, when:
> Y
[,1] [,2]
5 2.5386828 -0.3796148
3 0.8730943 -1.7258868
4 0.6358844 0.4417738
1 -0.9690405 -0.6481676
2 -0.4468455 -0.8031442
> Y<-Y[as.character(1:5),]
> Y
[,1] [,2]
1 -0.9690405 -0.6481676
2 -0.4468455 -0.8031442
3 0.8730943 -1.7258868
4 0.6358844 0.4417738
5 2.5386828 -0.3796148
(i.e., in reordering a matrix stays as a matrix). However, for:
> Y
[,1]
5 2.5386828
3 0.8730943
4 0.6358844
1 -0.9690405
2 -0.4468455
> Y<-Y[as.character(1:5),]
> Y
1 2 3 4 5
-0.9690405 -0.4468455 0.8730943 0.6358844 2.5386828
Thus, for the same operation, R effectively changes a matrix into a vector. This makes the expression ncol(Y)=NULL, which is obviously no good.
To fix this I just added a call to as.matrix(...) around my reordering of Y, i.e.:
Y<-as.matrix(Y[tree$tip.label,])
The updated function (v0.2) is on my R-phylogenetics page. Direct link to code here.
Note that we never fit a model with multiple Y variables; rather the number of columns of Y determines the number of separate models that we fit. This just allows us to, say, correct for size using phylogenetic regression for a set of different morphological traits simultaneously.
ReplyDelete