# Mean and variance of grouped data, e.g., # VarID Count # 33 2 # 34 5 # .. ... # Callig: # source(sThisFileName) # resOut <- StatsGroupedData(Chest, Number) # for(i in 1:length(resOut)) {print(resOut[i])} StatsGroupedData <- function(VarVecID, Count) { sum = 0 sum2 = 0 sum3 = 0 sum4 = 0 N = 0 NumRow = length(VarVecID) oCumulP <- vector(mode="numeric",length=NumRow) eQ <- vector(mode="numeric",length=NumRow) for (i in 1:NumRow) { tmpVal = as.numeric(VarVecID[i]) * Count[i] sum = sum + tmpVal tmpVal = tmpVal * VarVecID[i] sum2 = sum2 + tmpVal tmpVal = tmpVal * VarVecID[i] sum3 = sum3 + tmpVal tmpVal = tmpVal * VarVecID[i] sum4 = sum4 + tmpVal N = N+Count[i] oCumulP[i] = N } Mean=sum/N tmpVal=Mean*Mean Var = (sum2 - tmpVal*N)/(N-1) SD = sqrt(Var) CV = 100*SD/Mean SE = sqrt(Var/N) CL95 = qt(0.975,N-1)*SE Skewness = sum3 - Mean*(3*sum2 - tmpVal*2*N) Skewness = Skewness/((N-1)*Var*SD) # Kurtosis = sum4 - Mean*(4*sum3 - 6*Mean*sum2 + 4*Mean^2*sum - Mean^3) # Kurtosis = sum4 - Mean*(4*sum3 - Mean*(6*sum2 - 4*sum*Mean + Mean^2)) # Kurtosis = sum4 - Mean*(4*sum3 - Mean*(6*sum2 - Mean*(4*sum - N*Mean))) Kurtosis = sum4 - Mean*(4*sum3 - Mean*(6*sum2-3*N*tmpVal)) Kurtosis = Kurtosis / (N-1)/(Var*Var) - 3 for(i in 1:NumRow) { p = oCumulP[i]/N eQ[i] = qnorm(p,Mean,SD) } plot(eQ,VarVecID,xlab="Observed Quantile",ylab="Expected Quantile") outVec <- c(Mean,Var,SD,CV,CL95,Skewness,Kurtosis) names(outVec) <- c("Mean","Var","SD","CV","CL95","Skewness","Kurtosis") return(outVec) }