rm(list=ls()) library(fda) attach(growth) #a gr<-cbind(growth$hgtm,growth$hgtf) length(apply(gr,1,mean)->mif) wach<-gr for (i in 1:93) wach[,i]<-gr[,i]-mif #b base<-create.bspline.basis(nbasis=12,rangeval=c(1,18)) plot(base, col=rainbow(12)) #c Data2fd(age,mif,base)->meanf plot(meanf) Data2fd(age,wach,base)->wachfd plot(wachfd) v<-(meanf+wachfd[1]) plot(v) #d gfda<-pca.fd(wachfd,nharm=10) plot(gfda) #e str(gfda) koef<-gfda$scores antvar<-gfda$varprop cumsum(antvar) harmfd<-gfda$harmonics #f par(mfrow=c(2,1),ask=TRUE) for (i in 1:4){ plot(harmfd[i]) plot(meanf,ylim=c(70,190),lty=3,col="gray") lines(meanf+20*harmfd[i]) lines(meanf-20*harmfd[i]) } # besser a<-rep(0,4) for (i in 1:4) a[i]<-sd(koef[,i]) a par(mfrow=c(2,1),ask=TRUE) for (i in 1:4){ plot(harmfd[i]) plot(meanf,ylim=c(70,190),lty=3,col="gray") lines(meanf+a[i]*harmfd[i]) lines(meanf-a[i]*harmfd[i]) } # g dim(koef) n=93 par(mfrow=c(1,2)) plot(c(1,18),c(70,200),type="n") matlines(age,gr,lty=1) plot(c(1,18),c(70,200),type="n") for (i in 1:n) lines(meanf+koef[i,1]*harmfd[1],col=i) par(mfrow=c(1,2)) plot(c(1,18),c(70,200),type="n") matlines(age,gr,lty=1) plot(c(1,18),c(70,200),type="n") for (i in 1:n) lines(meanf+koef[i,1]*harmfd[1]+koef[i,2]*harmfd[2],col=i) par(mfrow=c(1,2)) plot(c(1,18),c(70,200),type="n") matlines(age,gr,lty=1,col=rainbow(93)) plot(c(1,18),c(70,200),type="n") for (i in 1:n) lines(meanf+koef[i,1]*harmfd[1]+koef[i,2]*harmfd[2]+koef[i,3]*harmfd[3],col=rainbow(93)[i]) #h plot(koef[,1:2]) kmeans(koef[,1:2],centers=2,nstart=3)->km plot(koef[,1:2],col=km$cluster,pch=c(rep(16,39),rep(17,54))) # weil "Euklidischer Norm" plot(koef[,1:2],col=km$cluster,pch=16,asp=1) # entweder muss man bezüglich einen anderen Abstand "gruppieren", # oder die werte erst normieren u<-koef[,1]/sd(koef[,1]) v<-koef[,2]/sd(koef[,2]) cbind(u,v)->uv kmeans(uv,centers=2,nstart=3)->km plot(uv,col=km$cluster,pch=c(rep(16,39),rep(17,54)),cex=1.5) km$cluster