# LIBRARIES library(openxlsx) # INPUT THE PATH AND FILE NAME OF TARGET XLSX FilePath <- '/Users/SQIANG/Desktop/' FileName <- "RawData S. Qiang 180424" InputFileType<-".xlsx" FileID<-paste(FileName, InputFileType, sep = "") # INPUT SHEET NUMBER (e.g. 1, 2 and 3) SheetNum = 3 # READ DATA RawData <- read.xlsx(paste(FilePath, FileID, sep = ""), sheet = SheetNum, colNames = F) # DETERMINE THE NUMBER OF Columns OF RawData SampleSize <- ncol(RawData) DataSize <- nrow(RawData)-1 GroupEnd <- matrix(0,nrow=SampleSize,ncol=1) # DEFINE GROUP # for(i in 1:SampleSize){ temp1 = RawData[1:DataSize+1,i] temp2 = which(is.na(temp1)) GroupEnd[i] = temp2[1] if (is.na(temp2[1])) GroupEnd[i] = DataSize+1 } # CALCULATION AND OUTPUT for (i in 2:SampleSize){ A_raw = RawData[2:GroupEnd[i],i] A_raw = as.numeric(as.character(A_raw)) A=sort(A_raw, decreasing = T) S = GroupEnd[i]-1 temp = c(1:S) x = c(1:S) y = c(1:S) At = sum(A) tempp1 = 0 tempp2 = 0 for (j in 1:S){ qr_ = A[j]/A[1] x[j] = log(temp[j]) y[j] = log(qr_) tempp1 = tempp1 + x[j]*y[j] tempp2 = tempp2 + x[j]*x[j] } p = -1*tempp1/tempp2 sstotal = 0 ssresid = 0 my = mean(y) for (j in 1:S){ sy = -1*p*x[j] sstotal = sstotal + (y[j]-my)**2 ssresid = ssresid + (sy-y[j])**2 } ssreg = sstotal - ssresid R2 = ssreg/sstotal if (i == 2) { output = list (RawData[1,i], p, R2) } else { tempp = list(RawData[1,i], p, R2) output = rbind(output,tempp) } } # OUTPUT THE FILE NAME OF TARGET XLSX OutputFileName = "OutFile - " OutputFileName = paste(OutputFileName, FileName, sep="") OutputFileType = ".csv" OutputFileID = paste(OutputFileName, OutputFileType, sep="") # OUTPUT THE FILE INCLUDING "Sample Name", "p" AND "R2" colnames(output)<-c("Sample Name", "p", "R2") # WRITE INTO THE FILE write.csv(output, paste(FilePath, OutputFileID, sep=""), row.names=F)