File: fastflightcube.R

package info (click to toggle)
r-cran-sampling 2.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,336 kB
  • sloc: ansic: 21; makefile: 2
file content (124 lines) | stat: -rw-r--r-- 3,080 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"fastflightcube" <-
function(X,pik,order=1,comment=TRUE) 
{ 
EPS = 1e-11
"algofastflightcube" <-
function(X,pik) 
{ 

"jump" <-
function(X,pik){ 
N = length(pik)
p = round(length(X)/length(pik))
X<-array(X,c(N,p))
X1=cbind(X,rep(0,times=N)) 
kern<-svd(X1)$u[,p+1] 
listek=abs(kern)>EPS
buff1<-(1-pik[listek])/kern[listek]
buff2<- -pik[listek]/kern[listek]
la1<-min( c(buff1[(buff1>0)] , buff2[(buff2>0)]) ) 
pik1<- pik+la1*kern 
buff1<- -(1-pik[listek])/kern[listek] 
buff2<- pik[listek]/kern[listek]
la2<-min(c(buff1[(buff1>0)] , buff2[(buff2>0)])) 
pik2<- pik-la2*kern 
q<-la2/(la1+la2)  
if (runif(1)<q) pikn<-pik1 else pikn<-pik2 
pikn 
}

N = length(pik)
p = round(length(X)/length(pik))
X<-array(X,c(N,p))
A<- X/pik 
B<-A[1:(p+1),]
psik <- pik[1:(p+1)]
ind<-seq(1,p+1,1) 
pp=p+2 
B<-array(B,c(p+1,p))
while(pp<=N) 
{ 
psik <- jump(B,psik)
liste<- (psik>(1-EPS) | psik<EPS)
i<- 0 
while(i <=(p) & pp<=N) 
{ i=i+1
if(liste[i]==TRUE) 
{pik[ind[i]]=psik[i]
psik[i]=pik[pp] 
B[i,]=A[pp,]
B=array(B,c(p+1,p))
ind[i]=pp 
pp=pp+1 } 
} 
} 
if(length(pik[(pik>EPS & pik<(1-EPS))])==(p+1)) psik <- jump(B,psik)
pik[ind]=psik
pik 
}
"reduc" <-
function(X)
{
EPS=1e-11
N=dim(X)[1]
Re=svd(X)
array(Re$u[,(Re$d>EPS)] , c(N,sum(as.integer(Re$d>EPS))))
}

N = length(pik);
p = round(length(X)/length(pik))
X<-array(X,c(N,p))
if (order==1) o<-sample.int(N,N)  else
   {
   if(order==2) o<-seq(1,N,1) 
    else o<-order(pik,decreasing=TRUE)
    }
liste<-o[(pik[o]>EPS & pik[o]<(1-EPS))]
if(comment==TRUE){
cat("\nBEGINNING OF THE FLIGHT PHASE\n")
cat("The matrix of balanced variable has",p," variables and ",N," units\n")
cat("The size of the inclusion probability vector is ",length(pik),"\n")
cat("The sum of the inclusion probability vector is ",sum(pik),"\n")
cat("The inclusion probability vector has ",length(liste)," non-integer elements\n")
} 
pikbon<-pik[liste]; 
Nbon=length(pikbon); 
Xbon<-array(X[liste,] ,c(Nbon,p)) 
pikstar<-pik 
flag=0
if(Nbon>p){if(comment==TRUE) cat("Step 1  ")
           pikstarbon<-algofastflightcube(Xbon,pikbon)
           pikstar[liste]=pikstarbon 
           flag=1
           }
liste<-o[(pikstar[o]>EPS & pikstar[o]<(1-EPS))]
pikbon<-pikstar[liste] 
Nbon=length(pikbon) 
Xbon<-array(X[liste,] ,c(Nbon,p))
pbon=dim(Xbon)[2]
if(Nbon>0){
          Xbon=reduc(Xbon)
          pbon=dim(Xbon)[2]
          }
k=2
while(Nbon>pbon & Nbon>0){
           if(comment==TRUE) cat("Step ",k,",  ")
           k=k+1
           pikstarbon<-algofastflightcube(Xbon/pik[liste]*pikbon,pikbon)
           pikstar[liste]=pikstarbon
           liste<-o[(pikstar[o]>EPS & pikstar[o]<(1-EPS))]
           pikbon<-pikstar[liste] 
           Nbon=length(pikbon) 
           Xbon<-array(X[liste,] ,c(Nbon,p))
           if(Nbon>0)
               {
               Xbon=reduc(Xbon)
               pbon=dim(Xbon)[2]
               }
           flag=1
           }
if(comment==TRUE) if(flag==0) cat("NO FLIGHT PHASE")
if(comment==TRUE) cat("\n")
pikstar 
}