guesslow<-function(A1,A2,Y) { invA1<-solve(A1) first<-rep(0,ncol(A2)) trythis<-simula.x1(A1, Y, A2,first) if(all(trythis>=0))return(first) else { temp<-invA1%*%A2 tochange<-which(trythis<0) for(i in 1:length(tochange)) { touse<-which(temp[tochange[i],]==-1) j<-1 first[touse[j]]<-abs(trythis[tochange[i]]) if(any(simula.x1(A1, Y, A2,first)[tochange]< trythis[tochange])|| simula.x1(A1, Y, A2,first)[tochange[i]]<0){ first[touse[j]]<-0 j<-j+1 } } } names(first)<-dimnames(A2)[[2]] return(first) } simula.x1<-function(A1, Y, A2,X2)return(solve(A1)%*%(Y-A2%*%X2)) guessup<-function(A1,A2,Y) { invA1<-solve(A1) first<-numeric(ncol(A2)) for(i in 1:length(first)) { first[i]<-min(Y[A2[,i]==1]) } trythis <- simula.x1(A1, Y, A2, first) if(all(trythis >= 0)) { names(first)<-dimnames(A2)[[2]] return(first) } else { temp<-invA1%*%A2 tochange<-which(trythis<0) for(i in 1:length(tochange)) { touse<-which(temp[tochange[i],]==1) j<-1 old<-first[touse[j]] first[touse[j]]<-first[touse[j]]-abs(trythis[tochange[i]]) if(any(simula.x1(A1, Y, A2,first)[tochange]< trythis[tochange])|| simula.x1(A1, Y, A2,first)[tochange[i]]<0) { first[touse[j]]<-old j<-j+1 } } names(first)<-dimnames(A2)[[2]] return(first) } } get12<-function(A){ if(ncol(A)<=nrow(A))stop("expecting rectangular matrix with less rows than columns") qrA<-qr(A) rank<-qrA$rank pivot<-qrA$pivot A1<-A[,pivot[1:rank]] A2<-A[,pivot[(rank+1):ncol(A)]] return(list(A=A,A1=A1,A2=A2,pivot=pivot))}