[R] Aide pour finaliser ce code
Ablaye Ngalaba
@b|@yeng@|@b@ @end|ng |rom gm@||@com
Fri Oct 9 13:31:39 CEST 2020
Hello.
Here is my R code. I used the functional data . Now I need to use the
functional data by applying the kernels instead of the xi, yi functions.
Bonjour.
Voici mon code en R . J'ai utiliser les données fonctionnelles . Maintenant
j'ai besoin d'utiliser les données fonctionnelles en appliquant les noyaux
à la place des fontions xi, yi
library(MASS)
CentrageV<-function(X,Ms,n){
# cette fonction centre les données de X
X1=X*0
for (i in 1:n){
X1[i,]=X[i,]-Ms
}
return(X1)
}
# Fonction N°2
SqrtMatrice0<-function(M) {
# Cette fonction nous permet de calculer la racine carrée d'une matrice
# en utilisant la décomposition M=PDQ où Q est l'inverse de P
# ici les valeurs propres négatives sont remplacées par zero
a=eigen(M,TRUE)
b=a$values
b[b<0]=0
c=a$vectors
d=diag(sqrt(b))
b=solve(c)
a=c%*%d%*%b
return(a)
}
# déclaration des parametres
m1=0.01 # valeur de alpha (risque de 1%)
m2=0.05 # valeur de alpha (risque de 5%)
m3=0.1 # valeur de alpha (risque de 10%)
nbrefoissim=100 # nbrefois que le programme tourne
p=2 #dimension de la variable X
q=3 #dimension de la variable Y
R=c(2,3,2);# Nbre de partition de chaque composante de la variable Y
if(length(R) != q) stop("La taille de R doit être égale à q")
n=25 # Taille echantillon
N=c(25,50,100,200,300,400,500,1000) #differentes tailles de l'échantillion
N=c(25,50) #differentes tailles de l'échantillion
K=0
MV=matrix(0,nr=2,nc=4)
dimnames(MV)[[2]]=c("n","r1%","r5%","r10%")
#Debut du programme
for (n in N){
l1=0 # initialisation de la valeur permettant calculer le niveau de test à
1%
l2=0 # initialisation de la valeur permettant calculer le niveau de test à
5%
l3=0 # initialisation de la valeur permettant calculer le niveau de test à
10%
# Création d'une liste n11 qui contient les tailles des differents groupes
n11=list()
for (i in 1:q){
n11[[i]]=rep(as.integer(n/R[i]),R[i])
n11[[i]][R[i]]=n-((R[i]-1)*n11[[i]][1])
}
# Création des listes P11 et P12 qui contient les probabilités et
# les inverses des probabilites empiriques des differents groupes
respectivement
P11=list()
P12=list()
for (i in 1:q){
P11[[i]]=n11[[i]]/n
P12[[i]]=n/n11[[i]]
}
# création d'une liste contenant les matrices W
W=list()
for (i in 1:q){
w=matrix(0,n,R[i])
w[1:n11[[i]][1],1]=1
for (j in 2:R[i]){
s1=sum(n11[[i]][1:(j-1)])
w[(1+s1):(s1+n11[[i]][j]),j]=1
}
W[[i]]=w
}
for (i1 in 1:nbrefoissim){
# géneration des données
VA1=mvrnorm(n,rep(0,(p+q)),diag((p+q)))
X=VA1[,1:p]
Y=VA1[,(p+1):(p+q)]
# Calcul de Xbar
Xbar=colMeans(X)
# Calcul des Xjh bar
Xjhbar=list()
for (i in 1:q){
w=matrix(0,R[i],p)
for (j in 1:R[i]){
w[j,]=colSums(W[[i]][,j]*X)/n11[[i]][j]
}
Xjhbar[[i]]=w
}
#calcul des TO jh
TO.jh=list()
for (i in 1:q){
w=Xjhbar[[i]]
to=w*0
for (j in 1:R[i]){
to[j,]=w[j,]-Xbar
}
TO.jh[[i]]=to
}
#calcul des Lamda J
Lamda=matrix(0,p,p)
for (i in 1:q){
to=TO.jh[[i]]
w=matrix(0,p,p)
for (j in 1:R[i]){
w=w+(P11[[i]][j]*(to[j,]%*%t(to[j,])))
}
Lamda=Lamda+w
}
tr1=n*sum(diag(Lamda))
# Calcul de Gamma
GGamma=matrix(0,p*sum(R),p*sum(R))
PGamma=kronecker(diag(P11[[1]]),diag(p))
Ifin=p*R[1]
GGamma[1:Ifin,1:Ifin]=PGamma
for (i in 2:q){
PGamma=kronecker(diag(P11[[i]]),diag(p))
Idebut=((p*sum(R[1:(i-1)]))+1)
Ifin=(p*sum(R[1:i]))
GGamma[Idebut:Ifin,Idebut:Ifin]=PGamma
}
#Calcul de Sigma
# Calcul de Vn
X1=CentrageV(X,Xbar,n)
Vn=t(X1)%*%X1/n
## Construction de Sigma
GSigma=matrix(0,p*sum(R),p*sum(R))
for (i in 1:q ){
for (j in 1:R[i] ){
for (k in 1:q ){
for (l in 1:R[k]){
Xij=CentrageV(X,Xjhbar[[i]][j,],n)
Xkl=CentrageV(X,Xjhbar[[k]][l,],n)
Vijkl=t(W[[i]][j]*Xij)%*%(W[[k]][l]*Xkl)/n
Vij=t(W[[i]][j]*Xij)%*%Xij/n11[[i]][j]
Vkl=t(W[[k]][l]*Xkl)%*%Xkl/n11[[k]][l]
if (i==1) Idebut=((j-1)*p)+1 else
Idebut=((sum(R[1:(i-1)])+j-1)*p)+1
if (i==1) Idebut1=(j*p) else Idebut1=((sum(R[1:(i-1)])+j)*p)
if (k==1) Ifin=((l-1)*p)+1 else Ifin=((sum(R[1:(k-1)])+l-1)*p)+1
if (k==1) Ifin1=(l*p) else Ifin1=((sum(R[1:(k-1)])+l)*p)
GSigma[Idebut:Idebut1,Ifin:Ifin1]=Vijkl+(P11[[i]][j]*P11[[k]][l]*(Vn-Vij-Vkl))
}
}
}
}
# Déterminations des valeurs propres de sigma epsilon
pa=SqrtMatrice0(GSigma)
mq= pa %*% GGamma %*% pa
u=Re(eigen(mq)$values)
# détermination de dégré de liberté et valeur c noté va
dl=(sum(u)^2)/(sum(u^2))
va=(sum(u^2))/(sum(u))
pc=1-pchisq(tr1/va, df= dl)
# Test de la valeur obtenue
if (pc>m1) d1=0 else d1=1
if (pc>m2) d2=0 else d2=1
if (pc>m3) d3=0 else d3=1
l1=l1+d1
l2=l2+d2
l3=l3+d3
}
K=K+1
MV[K,1]=n
MV[K,2]=l1/nbrefoissim
MV[K,3]=l2/nbrefoissim
MV[K,4]=l3/nbrefoissim
}
[[alternative HTML version deleted]]
More information about the R-help
mailing list