[R-es] Paquetes en R de programación lineal con muchas restricciones

Alex J. Zambrano alexjzc en gmail.com
Sab Abr 25 13:22:58 CEST 2015


Hola a tod en s.

Quisiera saber si conocen algún paquete además de boot que permita realizar
programación lineal con muchas restricciones. A continuación escribo el
codigo que estoy utilizando

rm(list = ls())

#Función para generar las variables independientes
gen<-function(n,a=0,b=1){
  X<-matrix(0,ncol=3,nrow=n)
  #Muestras distribuidas entre -1 y 1 cuyo radio sea menor que 1
  for(i in 1:n){
    m<-0
    while(m==0){
      U<-runif(3,min=-1,max=1)
      R<-t(U)%*%U
      if(R<=1){
        X[i,]<-U/sqrt(R)
        m<-1
      }
    }
  }
  #Transformación de muestras según la matriz correlación
  V<-diag(rep(sqrt(1/3),3))
  C=matrix(c(1,0.03,-0.06,0.03,1,-0.28,-0.06,-0.28,1),ncol=3)#Matriz de
correlación
  S<-V%*%C%*%V
  B<-chol(solve(S))
  Z<-X%*%t(solve(B))
  #Transformación de muestras para rango 0 y 1
  Y<-(Z-min(Z))/(max(Z)-min(Z))
  #Transformación de muestras entre a y b
  Y<-(b-a)*Y+a
  return(Y)
}

set.seed(25042015)

#Prueba
X<-gen(10000,a=-10,b=10)
summary(X)
cor(X)

#Caso laplace
library(VGAM)#Se debe cargar está librería independiente del boot (genera
problemas)
X<-gen(20,-10,10)
e<-rlaplace(20,location=0,scale=1)
Yest<-16+4*X[,1]+X[,2]+0.25*X[,3] # Valores a estimar 4, 1, 0.25
Y<-Yest+e

n<-length(Y)
p<-dim(X)[2]
r<-n*(n-1)/2
H<-cbind(rep(1,n-1),-diag(1,n-1))
for(i in 1:(n-2)){
  h<-cbind(matrix(0,n-1-i,i),rep(1,n-1-i),-diag(1,n-1-i))
  H<-rbind(H,h)
}

library(boot) # Librería de programación

#MINSADBED
a<-c(rep(0,p),rep(0,n),rep(1,r),rep(1,r))
A31<-cbind(X,diag(1,n),matrix(0,n,r),matrix(0,n,r))
A32<-cbind(matrix(0,r,p),H,-diag(r),diag(r))
A3<-rbind(A31,A32)
b3<-c(Y,matrix(0,r,1))


simplex(a,A3=A3,b3=b3)


#MINSADBAD
a<-c(rep(0,p),rep(0,n),rep(1,r),rep(1,r))
A31<-cbind(X,diag(1,n),matrix(0,n,r),matrix(0,n,r))
A32<-cbind(-X,diag(1,n),matrix(0,n,r),matrix(0,n,r))
A33<-cbind(matrix(0,r,p),H,diag(r),-diag(r))
A3<-rbind(A31,A32,A33)
b3<-c(Y,-Y,matrix(0,r,1))

simplex(a,A3=A3,b3=b3)


La idea es estimar unos parámetros de un modelo de regresión, utilizando
métodos de programación. La matriz X tiene cierta estructura de
correlación, y los errores en el modelo son no normales.

Al realizar la solución por MINSADBED con la función simplex del paquete
boot, me arroja las estimaciones de Beta_1, Beta_2 y Beta_3 se encuentran
en la solución optima de los primeros tres valores. Pero noten que se tiene
una matriz de restricciones demasiado grande.

Al realizar la solución por MINSADBAD las estimaciones de Beta_1, Beta_2 y
Beta_3 no se logran obtener debido a que es una solución no factible.

Al realizar está misma en paquete de programación winqsb la solución si
logra obtener, pero construir esa matriz de restricciones es demasiado
engorroso y más aún si de desea realizar un proceso de simulación.

Agradezco me puedan ayudar.

Saludos.

-- 
Alex Johann Zambrano Carbonell
http://experienceinstatistics.blogspot.com/

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es