--- title: "scanstat" output: pdf_document date: '2022-05-09' --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ```{r} library("localScore") library("latex2exp") library("Rcpp") library("caret") library("ROCR") ``` ```{r} PoissonProcess <- function(lambda,T) { return(sort(runif(rpois(1,lambda*T),0,T))) } ``` ```{r} SimulationH1 <- function(lambda0, lambda1,T,tau){ ppH0=PoissonProcess(lambda0,T) ppH1.segt=PoissonProcess(lambda1,tau) dbt=runif(1,0,T-tau) ppH0bis=PoissonProcess(lambda0,T) ppH1.repo=dbt+ppH1.segt ppH0_avant=ppH0bis[which(ppH0bisppH1.repo[length(ppH1.repo)])] ppH1=c(ppH0_avant,ppH1.repo,ppH0_apres) return (ppH1) } ``` ```{r} TimeBetweenEvent <- function(pp){ n=length(pp) tbe=pp[2:n]-pp[1:n1-1] tbe=c(0,tbe) return (tbe) } DataFrame <- function(pp,tbe){ list=data.frame(ProcessusPoisson=pp, TimeBetweenEvent=tbe) } ``` ```{r} ScanStat <- function(pp, T, tau){ n=length(pp) stop=n-length(which(pp>(T-tau))) ScanStat=0 for (i in (1:stop)) { x=which((pp>=pp[i])&(pp<=(pp[i]+tau))) scan=length(x) if (scan>ScanStat) {ScanStat=scan max=i} } return (c(max,ScanStat)) } ``` ```{r} EmpDistrib <- function(lambda, n_sample,T,tau){ pp=PoissonProcess(lambda,T) scan=c(ScanStat(pp,T, tau)[2]) index=c(ScanStat(pp,T, tau)[1]) for (i in 2:(n_sample)){ pp=PoissonProcess(lambda,T) scan=rbind(scan,ScanStat(pp,T, tau)[2]) index=rbind(index,ScanStat(pp,T, tau)[1]) } min_scan=min(scan)-1 max_scan=max(scan) table1=table(factor(scan, levels = min_scan:max_scan)) EmpDis=data.frame(cdf=cumsum(table1)/sum(table1), proba=table1/sum(table1), index_scan=min_scan:max_scan) EmpDis<-EmpDis[,-2] return(EmpDis) } ``` ```{r} Plot_CDF <- function(lambda,n_sample,T,tau){ Emp=EmpDistrib(lambda,n_sample,T,tau) title=TeX(paste(r'(Cumulative distribution function for $\lambda=$)', lambda)) plot(Emp$index_scan, Emp$cdf,type="s",xlab="Number of occurrences",ylab="Probability", main=title, col="red") return(Emp) } ``` ```{r} n_sample=10**4 lambda0=3 T=10 tau=1 ppH0=PoissonProcess(lambda0,T) #CDF=Plot_CDF(lambda0,n_sample,T,tau) ``` ```{r} PValue <- function(Emp,ppH, T, tau){ scanH1=ScanStat(ppH,T,tau)[2] index_scanH1=ScanStat(ppH,T,tau)[1] index=Emp$index_scan n=length(index) if (scanH1< min(Emp$index_scan)){ return (c(scanH1,1,index_scanH1)) } else{ if(min(Emp$index_scan)