1achisq.stat<-function(data, lambda=NULL)
2{
3
4	df<-length(data$Observed)
5
6
7	#If internal standardization was  used then lambda=1 and df=n-1
8	if(sum(data$Observed)==sum(data$Expected))
9	{
10		lambda<-1
11		df<-df-1
12	}
13	else
14	{
15		#If lambda is unknown then we must slightly modify E_i
16		if(is.null(lambda))
17		{
18			lambda<-sum(data$Observed)/sum(data$Expected)
19			df<-df-1
20		}
21	}
22
23	Elambda<-data$Expected*lambda
24
25	T<-sum((data$Observed-Elambda)^2/Elambda)
26	pvalue<-pchisq(T, df, lower.tail=FALSE)
27
28	return( list(T=T, df=df, pvalue=pvalue) )
29}
30