2016-09-28 2 views
1

긍정적 인 영역으로 제한된 일부 계수를 사용하여 회귀 분석을 실행할 수 있었지만 문제가있는 부분을 압연하는 회귀 분석을 많이하고 있습니다.penlized 회귀 모델의 모든 계수를`penalized` 패키지에서 내보내는 방법은 무엇입니까? 롤링 회귀 추정치를보고하기 위해 필요합니다.

library(penalized) 
set.seed(1) 
x1=rnorm(100)*10 
x2=rnorm(100)*10 
x3=rnorm(100)*10 
y=sin(x1)+cos(x2)-x3+rnorm(100) 

data <- data.frame(y, x1, x2, x3) 

win <- 10 

coefs <- matrix(NA, ncol=4, nrow=length(y)) 

for(i in 1:(length(y)-win)) { 
    d <- data[(1+i):(win+i),] 
    p <- win+i 
    # Linear Regression 
    coefs[p,] <- as.vector(coef(penalized(y, ~ x1 + x2 + x3, ~1, 
             lambda1=0, lambda2=0, positive = c(F, F, T), data=data)))} 

이 내가 일반적으로 회귀 롤링에서 coefs와 행렬을 채우는 방법이며, 지금은 오류가 나타납니다 : 항상이 없기 때문에 나는이 오류가 발생되어 있다고 가정

Error in coefs[p, ] <- as.vector(coef(penalized(y, ~x1 + x2 + x3, ~1, : 
    number of items to replace is not a multiple of replacement length 

을 여기 내 샘플 코드 그 불이행 회귀 함수에서 나오는 인터셉트 + 3 개의 계수. penalized은 coefs를 0으로 표시하는 기능이 있습니까? 또는 다른 방법으로 채워진 matrix/data.frame에?

+0

는 사실 내가 지금은 단서를 가지고 있지 않는 한 coefs 어떤 변수에 속한 그 0 coefs을보고 싶습니다. 나는 몇몇 timeseries 분석을 할 것이므로, 이것들을 다시 빌드하는 것은 꽤 어려울 것이다. – Viitama

+0

일반 선형 모델을 재현하려고하는 예제가 사용되고 모방하려고합니다. 의도적으로 말하면 안되지만 예제를 흉내 내면됩니다. 차이점은 근본적인 이유로 인해 일부 coefs가 양수인으로 제한된다는 것입니다. – Viitama

답변

3

아마도 "penfit"개체에 대해 coefwhich 인수를 알지 못했을 것입니다. 보십시오 :

getMethod(coef, "penfit") 

#function (object, ...) 
#{ 
# .local <- function (object, which = c("nonzero", "all", "penalized", 
#  "unpenalized"), standardize = FALSE) 
# { 
#  coefficients(object, which, standardize) 
# } 
# .local(object, ...) 
#} 
#<environment: namespace:penalized> 

우리는 which = "all"을 모든 계수를보고하도록 설정할 수 있습니다. 기본값은 which = "nonzero"이며 "대체 길이가 다릅니다"문제가 발생합니다.

다음 작품 :

library(penalized) 
set.seed(1) 
x1 = rnorm(100)*10 
x2 = rnorm(100)*10 
x3 = rnorm(100)*10 
y = sin(x1) + cos(x2) - x3 + rnorm(100) 

data <- data.frame(y, x1, x2, x3) 

win <- 10 

coefs <- matrix(NA, ncol=4, nrow=length(y)) 

for(i in 1:(length(y)-win)) { 
    d <- data[(1+i):(win+i),] 
    p <- win + i 
    pen <- penalized(y, ~ x1 + x2 + x3, ~1, lambda1 = 0, lambda2 = 0, 
        positive = c(F, F, T), data = data) 
    beta <- coef(pen, which = "all") 
    coefs[p,] <- unname(beta) 
    } 
+0

좋아요, 이것은 내가 찾고있는 것입니다. 감사! – Viitama

+0

행렬 차원이 실제 데이터에서 그대로 유지되어 이제 수정되었습니다. – Viitama