Question: What is pheatmap's scale row?
0
agicict140 wrote:

Hello.

There is a R package called pheatmap.

one of the pheatmap parameter is scale which normalize numeric values in row-wise or column-wise

I would like to know the formula of normalization process.

Is the Z-score normalization?

R • 4.8k views
modified 2.6 years ago by ddiez1.8k • written 2.6 years ago by agicict140
5
ddiez1.8k wrote:

Not really a bioinformatics question, I think.

I good thing about open source is that you can download the code and check it yourself. I did so and found the following code in pheatmap.r file:

``````scale_rows = function(x){
m = apply(x, 1, mean, na.rm = T)
s = apply(x, 1, sd, na.rm = T)
return((x - m) / s)
}

scale_mat = function(mat, scale){
if(!(scale %in% c("none", "row", "column"))){
stop("scale argument shoud take values: 'none', 'row' or 'column'")
}
mat = switch(scale, none = mat, row = scale_rows(mat), column = t(scale_rows(t(mat))))
return(mat)
}
``````

The second function chooses an action depending on the value of the variable `scale`. The first function performs row-wise scaling (or col-wise on the transposed matrix). So, scale in this package means removing the mean (centering) and dividing by the standard deviation (scaling). Also, take a look at `?scale` for the base function. Why the author didn't use this function is not clear to me.

Don't forget victorization, bro. Shouldn't the return value of scale_rows() be like:

``````return((x - rep(m, ncol(x)) / rep(s, ncol(x))
``````