Although I find this reading regarding the interpretation of the Coefficent of Variation (CoV) very interesting, I did not found hints regarding the Variability Independent of the Mean (VIM) which is beeing largely employed in cardiovascular research.
In particular, VIM is calculated by: $$VIM=(SD/mean^x)$$
fitting a curve through a plot of SD systolic BP (SBP; y axis)
against mean SBP (x axis) with the parameter x estimated from the
curve
Moreover, I found other different definitions/approaches:
Computation 2:
VIM is calculated as the SD divided by the mean to the power
x
and
multiplied by the population mean to the powerx
. The powerx
is
obtained by fitting a curve through a plot of SD against mean using
the modelSD= a × mean x
, wherex
was derived by nonlinear
regression analysis as implemented in thePROC NLIN
procedure of
the SAS package.
Computation 3:
VIM is calculated as
100 * SD/mean^β
, whereβ
is the regression
coefficient based on natural logarithm of SD on natural logarithm of
mean
Computation 4:
VIM is a transformation of the standard deviation that is uncorrelated
with mean BP and is calculated as follows:Where x is calculated from fitting a power model:
(i.e. the mean of all SBP readings across all patients to the power of
x).
Herein I propose a reproducible R example of computing SD and CoV. I would like to add the VIM too:
set.seed(101) df <- data.frame( "ID" = paste("ID", seq(1,100,1), sep = ""), "x1" = sample(90:220, size = 100, replace = T), "x2" = sample(90:220, size = 100, replace = T), "x3" = sample(90:220, size = 100, replace = T), "x4" = sample(90:220, size = 100, replace = T), "x5" = sample(90:220, size = 100, replace = T)) # Compute row average df$avg <- round(rowMeans(df[2:6]), 1) # Compute row standard deviation df$sntd <- round(matrixStats::rowSds(as.matrix(df[2:6])), 1) # Compute coefficient of variation (CoV) as SD/mean * 100 df$CoV <- round(df$sntd/df$avg*100, 1)
To the best of my understanding, probably nsl
R function can be used for non-linear regression. How?
Can anyone help with VIM computing using R and suggest/explain the above mentioned VIM definitions?
Best Answer
Utilizing your reproducible example, I have worked up what appears to be the idea behind VIM using nls
.
library(matrixStats) set.seed(101) df <- data.frame( "ID" = paste("ID", seq(1,100,1), sep = ""), "x1" = sample(90:220, size = 100, replace = T), "x2" = sample(90:220, size = 100, replace = T), "x3" = sample(90:220, size = 100, replace = T), "x4" = sample(90:220, size = 100, replace = T), "x5" = sample(90:220, size = 100, replace = T)) #compute row average df$avg <- rowMeans(df[2:6]) #compute row standard deviation df$sntd <- rowSds(as.matrix(df[2:6])) #tune parameters for VIM nls.vim = nls(sntd ~ k*avg^p, data=df, start=c(k=1,p=1)) summary(nls.vim) #create scatterplot with overlay plot(sntd ~ avg, data=df) r = range(df$avg) x.new = seq(r[1], r[2],length.out = 1000) lines(x.new, predict(nls.vim,list(avg = x.new)), col='red', lty=2)
The output with parameters are:
Formula: sntd ~ k * avg^p Parameters: Estimate Std. Error t value Pr(>|t|) k 46.00223 59.06925 0.779 0.438 p -0.04593 0.25462 -0.180 0.857 Residual standard error: 10.2 on 98 degrees of freedom Number of iterations to convergence: 9 Achieved convergence tolerance: 1.367e-06
You can see this is almost flat, which makes sense given that the toy data is pretty uniform. This should be more interesting in data in which there is a positive correlation between mean and standard deviation.
Note: It may be necessary to change the initial parameters of the nls
function to start=c(k=1, p=0)
if the data scenario creates a singular gradient.
p
in the summary(nls.vim)
is the x
in the above mentioned formula. For VIM you find the parameters by fitting across all row means and then can calculate specific VIMs by utilizing individual SDs and means. So if the VIM has parameters k
and p
, then the model is $$y=kx^p$$ and specific VIMs are $$VIM_i=k cdot (s_i/bar x_i)^p$$
Let's compute VIM for each row based of nls fit:
# VIM = k*(sntd/avg)^p df$vim <- 46*(df$sntd/df$avg)^-0.04593
Similar Posts:
- Solved – How much should the sample size be increased to reject the null hypothesis with a t-test
- Solved – How much should the sample size be increased to reject the null hypothesis with a t-test
- Solved – Calculate Standard Deviation of hour
- Solved – what is the sample correlation between the mean and the standard deviation under normality assumption
- Solved – Calculating Sample Size from Power Calculator