Nothing
#' @export
FullCIs.XY <-
function(data=NULL,xcol=1,ycol=2,conf.level=0.95,npoints=1000,nlambdas=13)
{
if(length(conf.level) > 1) stop("Only one confidence level is allowed.")
if(conf.level <= 0 | conf.level >= 1) stop("The confidence level must be between 0 and 1 (excluded)")
if(length(npoints) > 1) stop("npoints must be an integer (at least 10)")
if(floor(npoints) != ceiling(npoints) | npoints < 10 | !is.numeric(npoints)) stop("npoints must be an integer (at least 10)")
if(length(nlambdas) > 1) stop("nlambdas must be an integer")
if(floor(nlambdas) != ceiling(nlambdas) | nlambdas < 2 | !is.numeric(nlambdas)) stop("nlambdas must be an integer (at least 2)")
res=desc.stat(data=data,xcol=xcol,ycol=ycol)
x=res$Xi
y=res$Yi
xmean=res$statistics$Xmean
ymean=res$statistics$Ymean
Sxx=res$statistics$Sxx
Syy=res$statistics$Syy
Sxy=res$statistics$Sxy
n=res$statistics$N
nx=res$statistics$nx
ny=res$statistics$ny
alpha=1-conf.level
Hotelling_correction=(2*(n-1))/(n-2)
if(nlambdas == 13) epsilons=c(0.000001,0.1,0.175,0.25,0.375,0.5,0.625,0.75,0.875,1,1.25,1.5,1.75,2,200000) else epsilons=c(0.000001,10^seq(log10(0.1),log10(2),length.out=nlambdas),200000)
deltas=rev(epsilons)
lambdas=epsilons/deltas
ell_BLS_CB_all=array(dim=c(npoints,2,length(epsilons)),dimnames=list(1:npoints,c("Slopes","Intercepts"),paste("Lambda",1:length(epsilons),sep="")))
slopes_all=matrix(nrow=length(epsilons),ncol=6) # 7: Estimate, CI exact lower, CI exact upper, CI approx lower, CI approx upper, PVal
intercepts_all=matrix(nrow=length(epsilons),ncol=4) # 4: Estimate, CI lower, CI upper, PVal
joints_all=matrix(nrow=length(epsilons),ncol=1) # 1: PVal
xx=c(seq(min(x),max(x),length.out=npoints)) # To smooth the hyperbolic intervals
CI1=paste(conf.level*100,"% CI Lower",sep="")
CI2=paste(conf.level*100,"% CI Upper",sep="")
CB1=paste(conf.level*100,"% CB Lower",sep="")
CB2=paste(conf.level*100,"% CB Upper",sep="")
colnames=c("X0","Ypred",CI1,CI2,CB1,CB2)
hyperbola_BLS_all=array(dim=c(npoints,length(colnames),length(epsilons)),dimnames=list(1:npoints,colnames,paste("Lambda",1:length(epsilons),sep="")))
hyperbola_BLS_all[,"X0",]=xx
w=0
for (j in 1:length(deltas))
{
epsilon_diagram=epsilons[j]
delta_diagram=deltas[j]
lambda_diagram=lambdas[j]
varX=rep(delta_diagram,n)
varY=rep(epsilon_diagram,n)
slopes_all[j,1]=(Syy-lambda_diagram*Sxx+sqrt((Syy-lambda_diagram*Sxx)^2+4*lambda_diagram*Sxy^2))/(2*Sxy)
intercepts_all[j,1]=ymean-xmean*slopes_all[j,1]
tetas=atan(slopes_all[j,1]/sqrt(lambda_diagram))
asinarg=2*qt(1-alpha/2,n-2)/sqrt(n-2)*sqrt((lambda_diagram*(Syy*Sxx-Sxy^2))/((Syy-lambda_diagram*Sxx)^2+4*lambda_diagram*Sxy^2))
if(abs(asinarg) > 1)
{
w=w+1
if(w==1) warning("The exact confidence interval for the slope is not calculable")
} else {
phi=asin(asinarg)/2
slopes_all[j,2]=sqrt(lambda_diagram)*tan(tetas-phi)
slopes_all[j,3]=sqrt(lambda_diagram)*tan(tetas+phi)
}
R=matrix(nrow=2,ncol=2)
g=matrix(nrow=2,ncol=1)
#diff=matrix(nrow=2,ncol=1)
#repeat {
ei=y-(x*slopes_all[j,1]+intercepts_all[j,1])
# ei2=ei^2
Sei2=varY+slopes_all[j,1]^2*varX
R1i=1/Sei2
R2i=x*R1i
R4i=x^2*R1i
R[1,1]=sum(R1i)
R[1,2]=sum(R2i)
R[2,1]=sum(R2i)
R[2,2]=sum(R4i)
g1i=y*R1i
g2i=x*y*R1i+slopes_all[j,1]*(ei*R1i)^2*varX
g[1,1]=sum(g1i)
g[2,1]=sum(g2i)
b=solve(R)%*%g
# diff=b0-b
# b0=b0-diff/2
# if ((abs(diff[1,1])<0.000001) & (abs(diff[2,1])<0.000001))
# break()
# }
#slopes_all[j,4]=b[2,1]
intercepts_all[j,1]=b[1,1]
s2i=sum(((y-(x*slopes_all[j,1]+intercepts_all[j,1]))^2)/Sei2)/(n-2)
varcovari=solve(R)*s2i
S_slope_BLS_diagram=sqrt(varcovari[2,2])
S_intercept_BLS_diagram=sqrt(varcovari[1,1])
covar_slope_intercept_BLS_diagram=varcovari[1,2]
cov_matrix_BLS_diagram=matrix(nrow=2,ncol=2,c(S_slope_BLS_diagram^2,covar_slope_intercept_BLS_diagram,covar_slope_intercept_BLS_diagram,S_intercept_BLS_diagram^2))
slopes_all[j,4]=slopes_all[j,1]-qt(1-alpha/2,n-2)*S_slope_BLS_diagram
slopes_all[j,5]=slopes_all[j,1]+qt(1-alpha/2,n-2)*S_slope_BLS_diagram
slopes_all[j,6]=(1-pt(abs(slopes_all[j,1]-1)/S_slope_BLS_diagram,n-2))*2
intercepts_all[j,2]=intercepts_all[j,1]-qt(1-alpha/2,n-2)*S_intercept_BLS_diagram
intercepts_all[j,3]=intercepts_all[j,1]+qt(1-alpha/2,n-2)*S_intercept_BLS_diagram
intercepts_all[j,4]=(1-pt(abs(intercepts_all[j,1])/S_intercept_BLS_diagram,n-2))*2
ell_BLS_CB_all[,,j]=ellipse(cov_matrix_BLS_diagram,centre=c(slopes_all[j,1],intercepts_all[j,1]),npoints=npoints, t = sqrt(qf(conf.level,2,n-2)*Hotelling_correction))
F1=matrix(nrow=1,ncol=2,c(slopes_all[j,1]-1,intercepts_all[j,1]))
F2=solve(cov_matrix_BLS_diagram)
F3=t(F1)
Fell=F1%*%F2%*%F3
pval_ell_BLS=1-pf(F1%*%F2%*%F3/Hotelling_correction,2,n-2)
joints_all[j,1]=pval_ell_BLS
hyperbola_BLS_all[,"Ypred",j]=xx*slopes_all[j,1]+intercepts_all[j,1]
var.line=S_intercept_BLS_diagram^2+S_slope_BLS_diagram^2*xx^2+2*xx*covar_slope_intercept_BLS_diagram
W.BLS=varY[1]+varX[1]*slopes_all[j,1]^2
hyperbola_BLS_all[,CI1,j]=hyperbola_BLS_all[,"Ypred",j]-qt(1-alpha/2,n-2)*sqrt(var.line)
hyperbola_BLS_all[,CI2,j]=hyperbola_BLS_all[,"Ypred",j]+qt(1-alpha/2,n-2)*sqrt(var.line)
hyperbola_BLS_all[,CB1,j]=hyperbola_BLS_all[,"Ypred",j]-sqrt(qf(conf.level,2,n-2)*Hotelling_correction)*sqrt((W.BLS/(n*sum(x^2)-sum(x)^2)*(sum(x^2)-2*xx*sum(x)+n*xx^2))*s2i)
hyperbola_BLS_all[,CB2,j]=hyperbola_BLS_all[,"Ypred",j]+sqrt(qf(conf.level,2,n-2)*Hotelling_correction)*sqrt((W.BLS/(n*sum(x^2)-sum(x)^2)*(sum(x^2)-2*xx*sum(x)+n*xx^2))*s2i)
}
lambdas[1]=0
lambdas[length(lambdas)]=Inf
slopes=cbind(lambdas,slopes_all)
colnames(slopes)=c("Ratio variances","Estimate",paste("Lower ",conf.level*100,"%CI exact",sep=""),paste("Upper ",conf.level*100,"%CI exact",sep=""),paste("Lower ",conf.level*100,"%CI",sep=""),paste("Upper ",conf.level*100,"%CI",sep=""),"pvalue")
intercepts=cbind(lambdas,intercepts_all)
colnames(intercepts)=c("Ratio variances","Estimate",paste("Lower ",conf.level*100,"%CI",sep=""),paste("Upper ",conf.level*100,"%CI",sep=""),"pvalue")
joints=cbind(lambdas,joints_all)
colnames(joints)=c("Ratio variances","pvalue")
data.means=as.data.frame(cbind(x,y))
colnames(data.means)=c("X","Y")
results=list(data.means,ell_BLS_CB_all,as.data.frame(slopes),as.data.frame(intercepts),as.data.frame(joints),hyperbola_BLS_all)
names(results)=c("Data.means","Ellipses.CB","Slopes","Intercepts","Joints","Hyperbolic.intervals")
class(results)="CIs.XY"
return(results)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.