>

나는 스플라인 항을 포함하여 일반화 된 첨가 모델에 맞추기 위해 gam을 사용했다. 첨부 된 플롯이 나타납니다. 현재 그래프를 표시하는 것보다 Y 축에 홀수 비율 (OR)을 갖고 싶습니다. 도와 주셔서 감사합니다.

  • 답변 # 1

    이를 위해 링크 스케일에서 스플라인의 값을 (절편없이) 반환 한 다음 값을 확장하여 승산 스케일에서 물건을 얻을 수 있습니다

    mgcv::gam() 를 사용하는 경우  다음과 같이하면됩니다 :

    library('mgcv')
    set.seed(1)
    dat <- gamSim(1, dist = "binary")
    m1 <- gam(y ~ s(x2), data = dat, method = "REML", family = binomial())
    pdat <- with(dat, data.frame(x2 = seq(min(x2), max(x2), length = 500)))
    pred <- predict(m1, newdata = pdat, se.fit = TRUE, type = "iterms")
    pred <- data.frame(x2 = pdat$x2, fit = pred$fit[,1], se.fit = pred$se.fit[,1])
    ## compute CI on the logit (log-odds) scale
    pred <- transform(pred,
                      upper = fit + (2 * se.fit),
                      lower = fit - (2 * se.fit))
    ## transform fitted values + CI to odds scale
    pred <- transform(pred,
                      odds = exp(fit),
                      oupper = exp(upper),
                      olower = exp(lower))
    ## plot
    library("ggplot2")
    library("cowplot")
    theme_set(theme_bw())
    ## plot on the logit-scale
    p1 <- ggplot(pred, aes(x = x2, y = fit)) +
      geom_ribbon(aes(x= x2, ymin = lower, ymax = upper),
                  inherit.aes = FALSE, alpha = 0.1) +
      geom_line()
    ## plot on the odds scale
    p2 <- ggplot(pred, aes(x = x2, y = odds)) +
      geom_ribbon(aes(x= x2, ymin = olower, ymax = oupper),
                  inherit.aes = FALSE, alpha = 0.1) +
      geom_line()
    plot_grid(p1, p2, ncol = 1)
    
    

    이것은 다음을 생성합니다 :

    위 패널은 당신이 보여준 플롯의 ggplot 표현입니다. 하단 패널은 승산 스케일로 변환됩니다.

    모델에 여러 스무딩이있는 경우이를 약간 수정해야합니다. 라인

    pred <- data.frame(....)
    
    

    $fit 에서 다른 열을 선택해야합니다  그리고 $se.fit  구성 요소.

    당신 스스로 그것을 좋아하지 않는다면 이것을 수행하는 빠른 방법 중 하나는 plot(model) 의 출력을 캡처하는 것입니다

    m2 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat,
              method = "REML", family = binomial())
    plt_data <- plot(m2, pages = 1, seWithMean = TRUE)
    
    

    이제 plt_data  각 스무딩에 대한 구성 요소가있는 목록입니다. plot(m2) 를 수행 할 때 생성 된 플롯을 다시 만들려면 다음을 사용해야합니다.

    x  — 부드러운 x 좌표 데이터입니다.

    fit  그리고 se  구성 요소에는 y 좌표 데이터 (적합한 값)와 표준 오류가 포함됩니다

    신뢰 구간을 추가하고 변환을 적용 할 수있는 함수를 작성합니다.

    add_ci <- function(df, trans = function(eta) { eta }) {
      df <- transform(df, yhat = trans(fit),
                      upper = trans(fit + (2 * se)),
                      lower = trans(fit - (2 * se)))
      df
    }
    
    

    그리고 plt_data 의 각 데이터 객체에 적용  목록 :

    p1dat <- add_ci(as.data.frame(plt_data[[1]][c('x','se','fit')]))
    p2dat <- add_ci(as.data.frame(plt_data[[2]][c('x','se','fit')]))
    p3dat <- add_ci(as.data.frame(plt_data[[3]][c('x','se','fit')]))
    p4dat <- add_ci(as.data.frame(plt_data[[4]][c('x','se','fit')]))
    
    

    이제 플롯 할 수 있습니다

    p1 <- ggplot(data = p1dat,
                 aes(x = x, y = yhat)) +
      geom_ribbon(aes(x = x, ymin = lower, ymax = upper),
                  inherit.aes = FALSE, alpha = 0.2) +
      geom_line() + labs(y = 's(x0)', x = 'x0')
    p2 <- p1 %+% p2dat + labs(y = 's(x1)', x = 'x1')
    p3 <- p1 %+% p3dat + labs(y = 's(x2)', x = 'x2')
    p4 <- p1 %+% p4dat + labs(y = 's(x3)', x = 'x3')
    plot_grid(p1, p2, p3, p4, ncol = 2)
    
    

    주는 중

    다음으로 변환을 적용 할 수 있습니다

    p1dat <- add_ci(as.data.frame(plt_data[[1]][c('x','se','fit')]), trans = exp)
    p2dat <- add_ci(as.data.frame(plt_data[[2]][c('x','se','fit')]), trans = exp)
    p3dat <- add_ci(as.data.frame(plt_data[[3]][c('x','se','fit')]), trans = exp)
    p4dat <- add_ci(as.data.frame(plt_data[[4]][c('x','se','fit')]), trans = exp)
    pt1 <- p1 %+% p1dat + labs(y = 's(x0)', x = 'x0') + coord_cartesian(ylim = c(0, 100))
    pt2 <- p1 %+% p2dat + labs(y = 's(x1)', x = 'x1') + coord_cartesian(ylim = c(0, 4000))
    pt3 <- p1 %+% p3dat + labs(y = 's(x2)', x = 'x2') + coord_cartesian(ylim = c(0, 250))
    pt4 <- p1 %+% p4dat + labs(y = 's(x3)', x = 'x3') + coord_cartesian(ylim = c(0, 5))
    plot_grid(pt1, pt2, pt3, pt4, ncol = 2)
    
    

    생성하는

    알다시피, CI가 폭발함에 따라 축 제한을 많이 조정해야합니다.

  • 이전 Trying to add SonarQube - sonarqube를 추가하려고 - 빌드 작업으로서 vsts 용 yaml 빌드 템플릿의 sonaranalysis 작업
  • 다음 message queue - masstransit - 계약 클래스의 패턴 및 사례