From 40f1d8cba140468975e2d365f5e2c35014bfafe7 Mon Sep 17 00:00:00 2001 From: elisaduz Date: Mon, 9 May 2022 17:15:00 +0200 Subject: [PATCH] Create scanstat.Rmd --- scanstat.Rmd | 478 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 478 insertions(+) create mode 100644 scanstat.Rmd diff --git a/scanstat.Rmd b/scanstat.Rmd new file mode 100644 index 0000000..1278839 --- /dev/null +++ b/scanstat.Rmd @@ -0,0 +1,478 @@ +--- +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)