การใส่หลายครั้งสำหรับค่าที่หายไป


13

ฉันต้องการใช้การใส่ข้อมูลเพื่อแทนที่ค่าที่หายไปในชุดข้อมูลของฉันภายใต้ข้อ จำกัด บางประการ

ตัวอย่างเช่นผมต้องการตัวแปรที่ประเมินx1จะมีค่ามากกว่าหรือเท่ากับผลรวมของสองตัวแปรอื่น ๆ ของฉันพูดและx2 x3ฉันยังต้องการที่x3จะได้รับการกล่าวหาโดยทั้ง0หรือ>= 14และฉันต้องการที่x2จะได้รับการกล่าวหาโดยทั้งหรือ0>= 16

ฉันพยายามกำหนดข้อ จำกัด เหล่านี้ใน SPSS สำหรับการใส่หลายครั้ง แต่ใน SPSS ฉันสามารถกำหนดค่าสูงสุดและต่ำสุดได้เท่านั้น มีวิธีใดที่จะกำหนดข้อ จำกัด เพิ่มเติมใน SPSS หรือคุณรู้แพ็คเกจ R ที่จะให้ฉันกำหนดข้อ จำกัด ดังกล่าวสำหรับการใส่ค่าที่หายไป?

ข้อมูลของฉันเป็นดังนี้:

   x1 =c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24)
   x2 = c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0)
   x3 = c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0)
   dat=data.frame(x1=x1, x2=x2, x3=x3)
   > dat
       x1 x2 x3
   1   21  0  0
   2   50 NA  0
   3   31 18  0
   4   15  0  0
   5   36 19  0
   6   82  0 54
   7   14 NA  0
   8   14  0  0
   9   19  0  0
   10  18  0  0
   11  16  0  0
   12  36  0  0
   13 583  0  0
   14  NA NA NA
   15  NA NA NA
   16  NA NA NA
   17  50 22 NA
   18  52 NA  0
   19  26  0  0
   20  24  0  0

ผมเปลี่ยน0 or 16 or >= 16ไป0 or >= 16ตั้งแต่มีค่า>=16 16หวังว่าจะไม่เลอะความหมายของคุณ กันสำหรับ0 or 14 or >= 14
อเล็กซิส

คำตอบ:


16

ทางออกหนึ่งคือการเขียนฟังก์ชั่นการกำหนดเองของคุณเองสำหรับmiceแพคเกจ แพคเกจเตรียมไว้สำหรับสิ่งนี้และการตั้งค่าที่ปราศจากความเจ็บปวดอย่างน่าประหลาดใจ

ก่อนอื่นเราตั้งค่าข้อมูลตามที่แนะนำ:

dat=data.frame(x1=c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24), 
               x2=c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0), 
               x3=c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0))

ต่อไปเราจะโหลดmiceแพ็คเกจและดูว่าวิธีการใดที่มันเลือกตามค่าเริ่มต้น:

library(mice)
# Do a non-imputation
imp_base <- mice(dat, m=0, maxit = 0)

# Find the methods that mice chooses
imp_base$method
# Returns: "pmm" "pmm" "pmm"

# Look at the imputation matrix
imp_base$predictorMatrix
# Returns:
#   x1 x2 x3
#x1  0  1  1
#x2  1  0  1
#x3  1  1  0

pmmย่อมาจากการจับคู่หมายถึงการคาดการณ์ - น่าจะเป็นขั้นตอนวิธีการใส่ร้ายนิยมมากที่สุดสำหรับ imputing ตัวแปรอย่างต่อเนื่อง มันคำนวณค่าที่คาดการณ์ไว้โดยใช้แบบจำลองการถดถอยและเลือก 5 องค์ประกอบที่ใกล้เคียงที่สุดกับค่าที่คาดการณ์ (ตามระยะทางแบบยุคลิด ) องค์ประกอบที่เลือกเหล่านี้เรียกว่ากลุ่มผู้บริจาคและค่าสุดท้ายจะถูกสุ่มเลือกจากกลุ่มผู้บริจาคนี้

จากเมทริกซ์การทำนายเราพบว่าวิธีการได้รับตัวแปรที่ส่งผ่านซึ่งเป็นที่สนใจสำหรับข้อ จำกัด โปรดทราบว่าแถวนั้นเป็นตัวแปรเป้าหมายและคอลัมน์เป็นตัวทำนาย หาก x1 ไม่มี 1 ในคอลัมน์ x3 เราจะต้องเพิ่มสิ่งนี้ในเมทริกซ์:imp_base$predictorMatrix["x1","x3"] <- 1

ตอนนี้ถึงส่วนที่สนุกสร้างวิธีการใส่ความ ฉันเลือกวิธีที่ค่อนข้างหยาบที่นี่ซึ่งฉันจะทิ้งค่าทั้งหมดหากไม่ตรงตามเกณฑ์ สิ่งนี้อาจส่งผลให้เกิดการวนซ้ำเป็นเวลานานและอาจมีประสิทธิภาพมากขึ้นในการรักษา imputations ที่ถูกต้องและทำซ้ำสิ่งที่เหลืออยู่เท่านั้นซึ่งจะต้องใช้การปรับแต่งเพิ่มเติมเล็กน้อย

# Generate our custom methods
mice.impute.pmm_x1 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    max_sum <- sum(max(x[,"x2"], na.rm=TRUE),
                   max(x[,"x3"], na.rm=TRUE))
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals < max_sum)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x2 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 14)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x3 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 16)){
        break
      }
    }
    return(vals)
  }

เมื่อเราเสร็จสิ้นการกำหนดวิธีการที่เราง่ายเปลี่ยนวิธีการก่อนหน้านี้ หากคุณต้องการเปลี่ยนตัวแปรเพียงตัวเดียวคุณก็สามารถใช้imp_base$method["x2"] <- "pmm_x2"แต่ตัวอย่างนี้เราจะเปลี่ยนทั้งหมด (ไม่จำเป็นต้องตั้งชื่อ):

imp_base$method <- c(x1 = "pmm_x1", x2 = "pmm_x2", x3 = "pmm_x3")

# The predictor matrix is not really necessary for this example
# but I use it just to illustrate in case you would like to 
# modify it
imp_ds <- 
  mice(dat, 
       method = imp_base$method, 
       predictorMatrix = imp_base$predictorMatrix)

ตอนนี้เรามาดูชุดข้อมูลชุดที่สาม

> complete(imp_ds, action = 3)
    x1 x2 x3
1   21  0  0
2   50 19  0
3   31 18  0
4   15  0  0
5   36 19  0
6   82  0 54
7   14  0  0
8   14  0  0
9   19  0  0
10  18  0  0
11  16  0  0
12  36  0  0
13 583  0  0
14  50 22  0
15  52 19  0
16  14  0  0
17  50 22  0
18  52  0  0
19  26  0  0
20  24  0  0

ตกลงนั่นทำงานได้ ฉันชอบวิธีนี้เนื่องจากคุณสามารถใช้ฟังก์ชั่นหลักและเพิ่มข้อ จำกัด ที่คุณพบว่ามีความหมาย

ปรับปรุง

เพื่อที่จะบังคับใช้ restraints ที่เข้มงวด @ t0x1n ที่กล่าวถึงในความคิดเห็นเราอาจต้องการเพิ่มความสามารถต่อไปนี้ลงในฟังก์ชัน wrapper:

  1. บันทึกค่าที่ถูกต้องในระหว่างลูปเพื่อให้ข้อมูลจากการรันที่สำเร็จก่อนหน้านี้บางส่วนไม่ถูกทิ้ง
  2. กลไกการหลบหนีเพื่อหลีกเลี่ยงการวนซ้ำไม่ จำกัด
  3. ขยายพูลผู้บริจาคหลังจากลองxครั้งโดยไม่พบการจับคู่ที่เหมาะสม (ส่วนใหญ่จะใช้กับ pmm)

ส่งผลให้ฟังก์ชั่น wrapper ซับซ้อนกว่าเล็กน้อย:

mice.impute.pmm_x1_adv <-   function (y, ry, 
                                      x, donors = 5, 
                                      type = 1, ridge = 1e-05, 
                                      version = "", ...) {
  # The mice:::remove.lindep may remove the parts required for
  # the test - in those cases we should escape the test
  if (!all(c("x2", "x3") %in% colnames(x))){
    warning("Could not enforce pmm_x1 due to missing column(s):",
            c("x2", "x3")[!c("x2", "x3") %in% colnames(x)])
    return(mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                           version = "", ...))
  }

  # Select those missing
  max_vals <- rowSums(x[!ry, c("x2", "x3")])

  # We will keep saving the valid values in the valid_vals
  valid_vals <- rep(NA, length.out = sum(!ry))
  # We need a counter in order to avoid an eternal loop
  # and for inflating the donor pool if no match is found
  cntr <- 0
  repeat{
    # We should be prepared to increase the donor pool, otherwise
    # the criteria may become imposs
    donor_inflation <- floor(cntr/10)
    vals <- mice.impute.pmm(y, ry, x, 
                            donors = min(5 + donor_inflation, sum(ry)), 
                            type = 1, ridge = 1e-05,
                            version = "", ...)

    # Our criteria check
    correct <- vals < max_vals
    if (all(!is.na(valid_vals) |
              correct)){
      valid_vals[correct] <-
        vals[correct]
      break
    }else if (any(is.na(valid_vals) &
                    correct)){
      # Save the new valid values
      valid_vals[correct] <-
        vals[correct]
    }

    # An emergency exit to avoid endless loop
    cntr <- cntr + 1
    if (cntr > 200){
      warning("Could not completely enforce constraints for ",
              sum(is.na(valid_vals)),
              " out of ",
              length(valid_vals),
              " missing elements")
      if (all(is.na(valid_vals))){
        valid_vals <- vals
      }else{
        valid_vals[is.na(valid_vals)] <- 
          vals[is.na(valid_vals)]
      }
      break
    }
  }
  return(valid_vals)
}

โปรดทราบว่าสิ่งนี้ทำงานได้ไม่ดีนักเนื่องจากชุดข้อมูลที่แนะนำนั้นล้มเหลวในข้อ จำกัด สำหรับทุกกรณีโดยไม่พลาด ฉันต้องเพิ่มความยาวของลูปเป็น 400-500 ก่อนที่มันจะเริ่มทำงาน ฉันคิดว่านี่เป็นสิ่งที่ไม่ได้ตั้งใจการใส่ร้ายของคุณควรเลียนแบบวิธีการสร้างข้อมูลจริง

การเพิ่มประสิทธิภาพ

อาร์กิวเมนต์ryมีค่าที่ไม่หายไปและเราสามารถเพิ่มความเร็วในการวนซ้ำได้โดยการลบองค์ประกอบที่เราพบว่ามีการใส่ความเข้าไป แต่เนื่องจากฉันไม่คุ้นเคยกับฟังก์ชั่นด้านในที่ฉันได้ละเว้นจากสิ่งนี้

ฉันคิดว่าสิ่งที่สำคัญที่สุดเมื่อคุณมีข้อ จำกัด ที่แข็งแกร่งซึ่งต้องใช้เวลาในการเติมเต็มคือการขนานของคุณใส่เข้าไป ( ดูคำตอบของฉันใน CrossValidated ) ส่วนใหญ่มีคอมพิวเตอร์ในปัจจุบันที่มี 4-8 คอร์และ R ใช้เพียงหนึ่งในนั้นโดยค่าเริ่มต้น เวลาสามารถแบ่งได้เป็นสองส่วน (เกือบ) โดยเพิ่มจำนวนแกนเป็นสองเท่า

ไม่มีพารามิเตอร์ที่การใส่เข้าไป

เกี่ยวกับปัญหาของx2การเป็นที่ขาดหายไปในช่วงเวลาของการใส่ร้าย - หนูจริงไม่เคยฟีดค่าที่ขาดหายเข้าไปใน-x หนูวิธีการรวมถึงการกรอกข้อมูลในการสุ่มค่าบางอย่างในช่วงเริ่มต้น ส่วนโซ่ของการใส่เข้าไป จำกัด ผลกระทบจากค่าเริ่มต้นนี้ หากคุณดูที่ - ฟังก์ชั่นคุณสามารถค้นหาสิ่งนี้ก่อนที่จะเรียก imputation (the -function):data.framemicemice:::sampler

...
if (method[j] != "") {
  for (i in 1:m) {
    if (nmis[j] < nrow(data)) {
      if (is.null(data.init)) {
        imp[[j]][, i] <- mice.impute.sample(y, 
                                            ry, ...)
      }
      else {
        imp[[j]][, i] <- data.init[!ry, j]
      }
    }
    else imp[[j]][, i] <- rnorm(nrow(data))
  }
}
...

data.initสามารถจ่ายให้กับmiceฟังก์ชั่นและmice.imput.sampleเป็นขั้นตอนพื้นฐานการสุ่มตัวอย่าง

เยี่ยมชมลำดับ

หากลำดับการเยี่ยมชมมีความสำคัญคุณสามารถระบุลำดับที่mice-function รันการอิมพลีเมนต์ ค่าเริ่มต้นมาจาก1:ncol(data)แต่คุณสามารถตั้งค่าvisitSequenceให้เป็นอะไรก็ได้ที่คุณต้องการ


+1 นี่คือสิ่งที่ยอดเยี่ยมสิ่งที่ฉันมีอยู่ในใจ (ดูความคิดเห็นของฉันที่มีต่อคำตอบของแฟรงค์) และแน่นอนว่าผู้สมัครอันดับที่ 1 สำหรับเงินรางวัลตอนนี้ สองสามสิ่งที่ฉันกังวลเกี่ยวกับpmm_x1: (1) การรวมผลรวมสูงสุดของชุดค่าผสมที่เป็นไปได้ใด ๆ ของx2และx3จากชุดข้อมูลทั้งหมดนั้นมีความแปลกกว่าข้อ จำกัด เดิมมาก สิ่งที่ถูกต้องจะได้ทดสอบว่าแต่ละแถวx1 < x2 + x3 , แน่นอนว่ายิ่งคุณมีแถวมากเท่าไหร่โอกาสที่คุณจะปฏิบัติตามข้อ จำกัด ก็จะยิ่งน้อยลงเท่านั้น
t0x1n

(2) ถ้าทั้งคู่x1และx2หายไปคุณอาจกำหนดค่าสำหรับx1ข้อ จำกัด (สมมติว่า 50) แต่เมื่อx2ได้รับการใส่ข้อมูลพวกเขาจะถูกทำลาย (สมมติว่ามันเป็นค่าที่ 55) มีวิธีการใส่ร้าย "แนวนอน" มากกว่าแนวตั้งหรือไม่? วิธีการที่เราสามารถใส่ร้ายแถวเดียวของx1, x2และx3และก็อีกใส่ร้ายมันจนกว่าว่าแถวที่ระบุตกอยู่ภายใต้ข้อ จำกัด ควรจะเร็วพอและเมื่อเสร็จแล้วเราสามารถย้ายไปยังแถวถัดไป แน่นอนว่าถ้า MI เป็น "แนวตั้ง" ในธรรมชาติเราก็ไม่โชคดี ในกรณีนั้นอาจจะมีวิธีการของอเล็กซานเดอร์ที่พูดถึง?
t0x1n

โซลูชันยอดเยี่ยม +1! อาจมีประโยชน์อย่างยิ่งเนื่องจากฉันใช้miceแพ็คเกจ ขอบคุณสำหรับการแบ่งปัน.
Aleksandr Blekh

1
@ t0x1n ฉันได้อัปเดตคำตอบของฉันด้วยฟังก์ชั่น wrapper ขั้นสูงตามความคิดเห็นของคุณ หากคุณต้องการดำน้ำลึกฉันขอแนะนำให้คุณเล่นกับdebug()เพื่อดูว่าmice.impute.pmmพี่น้องของเขาทำงานอย่างไรภายใต้ประทุน
Max Gordon

1
@ t0x1n: ฉันเดา - ตรวจสอบค่าที่กำหนดไว้ของคุณ หากพวกเขาดูเหมือนไม่สมจริงคุณอาจเลือกวิธีของฉันที่จะใส่ร้ายผู้ที่อยู่กึ่งกลางของโมเดลเท่านั้น ในกรณีของฉันฉันเลือกที่จะไม่รวมรังสีเอกซ์ที่ไม่ได้ติดตามเนื่องจากพวกเขาเป็นหัวใจสำคัญของการศึกษาและการใส่ร้ายไม่ได้ให้คุณค่าที่เป็นไปได้ทางคลินิก (ขายาวขึ้นหลังจากหัก) ฉันไม่พอใจกับสิ่งนี้อย่างสิ้นเชิง แต่ดูเหมือนว่าจะเป็นการประนีประนอมที่สมเหตุสมผล
Max Gordon

8

สิ่งที่ใกล้เคียงที่สุดที่ฉันพบคือการรวมข้อมูลก่อนหน้าของ Amelia ดูบทที่ 4.7 ในบทความสั้นโดยเฉพาะ 4.7.2:

นักบวชระดับสังเกตการณ์

นักวิจัยมักจะมีข้อมูลก่อนเพิ่มเติมเกี่ยวกับค่าข้อมูลที่หายไปจากการวิจัยก่อนหน้าฉันทามติทางวิชาการหรือประสบการณ์ส่วนตัว อมีเลียสามารถนำข้อมูลนี้ไปใช้เพื่อสร้างผลกระทบที่ดีขึ้นอย่างมากมาย อัลกอรึทึมของ Amelia ช่วยให้ผู้ใช้สามารถรวม Bayesian priors ที่มีข้อมูลเกี่ยวกับแต่ละเซลล์ข้อมูลที่ขาดหายไปแทนที่จะเป็นพารามิเตอร์ของ model ทั่วไปซึ่งส่วนใหญ่มีความหมายโดยตรงเล็กน้อย

การรวมตัวกันของนักบวชตามการวิเคราะห์แบบเบส์พื้นฐานซึ่งการใส่ความคิดกลายเป็นค่าเฉลี่ยถ่วงน้ำหนักของการใส่ความจากแบบจำลองและค่าเฉลี่ยก่อนหน้าซึ่งค่าน้ำหนักเป็นฟังก์ชันของความสัมพันธ์สัมพัทธ์ของข้อมูลและก่อนหน้า: เมื่อแบบจำลองทำนายได้ดีมาก การใส่ความจะลดน้ำหนักก่อนและในทางกลับกัน (Honaker และ King, 2010)

นักพยากรณ์เกี่ยวกับการสังเกตการณ์ส่วนตัวควรอธิบายถึงความเชื่อของนักวิเคราะห์เกี่ยวกับการกระจายของเซลล์ข้อมูลที่หายไป สิ่งนี้สามารถอยู่ในรูปแบบของค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานหรือช่วงเวลาการควบแน่น ตัวอย่างเช่นเราอาจจะรู้ว่าอัตราทาริ 1986 ในประเทศไทยประมาณ 40% แต่เรามีความไม่แน่นอนเกี่ยวกับมูลค่าที่แน่นอน ความเชื่อก่อนหน้าของเราเกี่ยวกับการกระจายของเซลล์ข้อมูลที่ขาดหายไปนั้นมีศูนย์อยู่ที่ 40 ด้วยค่าเบี่ยงเบนมาตรฐานที่สะท้อนถึงจำนวนความไม่แน่นอนที่เรามีเกี่ยวกับความเชื่อเดิมของเรา

ในการป้อนค่า priors คุณต้องสร้างเมทริกซ์ priors ด้วยคอลัมน์สี่หรือห้า แต่ละแถวของเมทริกซ์แสดงถึงค่าก่อนหน้าในการสังเกตหนึ่งครั้งหรือตัวแปรเดียว ในแถวใด ๆ รายการในคอลัมน์ rst คือแถวของการสังเกตและรายการคือคอลัมน์ที่สองคือคอลัมน์ของการสังเกต ในเมทริกซ์ priors คอลัมน์สี่คอลัมน์ที่สามและสี่คือค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของการแจกแจงก่อนหน้าของค่าที่หายไป

ดังนั้นในขณะที่คุณจะไม่สามารถพูดอะไรบางอย่างได้เหมือนx1<x2+x3กันคุณสามารถวนซ้ำชุดข้อมูลของคุณและเพิ่มระดับการสังเกตก่อนสำหรับแต่ละกรณีที่เกี่ยวข้อง ขอบเขตคงที่สามารถใช้งานได้ (เช่นการตั้งค่า x1, x2 และ x3 ให้เป็นแบบไม่ลบ) ตัวอย่างเช่น:

priors = matrix(NA, nrow=0, ncol=5);
for (i in seq(1, length(data))) 
{
    x1 = data$x1[i];
    x2 = data$x2[i];
    x3 = data$x3[i];

    if (is.na(x1) && !is.na(x2) && !is.na(x3))
    {
        priors = rbind(priors, c(i, 1, 0, x2+x3, 0.999999))
    }
}

amelia(data, m=1, bound = rbind(c(1, 0, Inf), c(2, 0, Inf), c(3, 0, Inf)), pr = priors);

5

ข้อ จำกัด น่าจะง่ายกว่าที่จะใช้ในการทำนายค่าเฉลี่ยที่ตรงกับการใส่หลาย นี่ถือว่ามีจำนวนของการสังเกตอย่างมีนัยสำคัญกับตัวแปรที่ไม่ขาดหายไปซึ่งตรงกับข้อ จำกัด ฉันกำลังคิดที่จะใช้สิ่งนี้ในฟังก์ชั่นHmiscแพ็คเกจR aregImputeคุณอาจต้องการกลับมาตรวจสอบในอีกหนึ่งเดือนข้างหน้า จะต้องระบุระยะห่างสูงสุดจากเป้าหมายที่การสังเกตของผู้บริจาคสามารถทำได้เพราะข้อ จำกัด จะผลักผู้บริจาคออกไปจากผู้บริจาคที่ไม่มีข้อ จำกัด ในอุดมคติ


ฉันก็ชอบที่จะมีสิ่งนี้เช่นกัน ฉันต้องการเพียงข้อ จำกัด ระหว่างตัวแปรพื้นฐานที่สุดx<y<zเท่านั้น
t0x1n

ยกโทษให้ความไม่รู้ของฉันถ้าฉันออกไป แต่ฉันอยู่ภายใต้ความประทับใจที่เทคนิคการใส่หลายที่เกี่ยวข้องกับการวาดค่าจากการกระจายที่เหมาะสม มันควรเป็นเรื่องง่ายหรือไม่ที่จะใช้การสุ่มตัวอย่างปฏิเสธ? เช่นวาดต่อไปจนกว่าจะพบข้อ จำกัด ที่ระบุ (เช่นx1<x2)?
t0x1n

นั่นคือสิ่งที่ฉันอาจทำกับaregImputeฟังก์ชั่นR ด้วยการจับคู่ค่าเฉลี่ยทำนาย แต่ถ้าหากไม่มีการสังเกตของผู้บริจาค (ใกล้เคียงกับการทำนาย) ตรงกับข้อ จำกัด สำหรับการสังเกตเป้าหมายที่ถูกกำหนดแม้ว่าพวกเขาจะต้องพบกับข้อ จำกัด ของตัวแปรผู้บริจาค
Frank Harrell

ในกรณีเช่นนี้อาจนำค่าที่คาดการณ์มาใช้โดยตรงหรือไม่ นั่นเป็นเพียงพึ่งพาการถดถอย (ไม่มีเฟส PMM) สำหรับตัวอย่างเช่น?
t0x1n

การใส่ความถดถอยมีแนวโน้มที่จะเกิดขึ้นเล็กน้อยกับค่าที่ใส่เข้าไปซึ่งไม่สอดคล้องกับส่วนที่เหลือของบันทึกของตัวแบบ ดังนั้นฉันไม่คิดว่านี่เป็นเหตุผลที่หลีกเลี่ยง PMM
Frank Harrell

4

ฉันเชื่อว่าAmeliaปัจจุบันแพ็คเกจ (Amelia II) มีการสนับสนุนที่ครอบคลุมที่สุดสำหรับการระบุข้อ จำกัด ของช่วงค่าข้อมูล อย่างไรก็ตามปัญหาคือAmeliaสมมติว่าข้อมูลเป็นหลายตัวแปรปกติ

ถ้าในกรณีของคุณสมมติฐานปกติหลายตัวแปรใช้ไม่ได้คุณอาจต้องการตรวจสอบmiceแพคเกจซึ่งการดำเนินการหลายใส่ร้าย (MI) ผ่านสมการที่ถูกล่ามโซ่ แพคเกจนี้ไม่ได้มีการสันนิษฐานของปกติหลายตัวแปร นอกจากนี้ยังมีฟังก์ชั่นที่อาจเพียงพอสำหรับการระบุข้อ จำกัดแต่ฉันไม่แน่ใจในระดับใด squeeze()ฟังก์ชั่นที่เรียกว่า คุณสามารถอ่านเกี่ยวกับมันในเอกสาร: http://cran.r-project.org/web/packages/mice/mice.pdf ประโยชน์เพิ่มเติมmiceคือความยืดหยุ่นในแง่ของการอนุญาตให้ใช้คุณสมบัติของฟังก์ชั่นการใส่ข้อมูลที่ผู้ใช้กำหนดและการเลือกอัลกอริทึมที่กว้างขึ้น นี่คือบทช่วยสอนเกี่ยวกับการแสดง MI โดยใช้mice:http://www.ats.ucla.edu/stat/r/faq/R_pmm_mi.htm

เท่าที่ฉันเข้าใจHmiscแพคเกจของดร. ฮาร์เรลล์ซึ่งใช้สมการที่ถูกล่ามโซ่เดียวกัน( การจับคู่ค่าเฉลี่ยทำนาย ) อาจสนับสนุนข้อมูลที่ไม่ปกติ (ยกเว้นnormpmmวิธีการ) บางทีเขาอาจใช้ฟังก์ชั่นการ จำกัด ข้อ จำกัด ต่อคำตอบของเขาด้านบน ฉันไม่ได้ใช้aregImpute()จึงไม่สามารถพูดได้มากขึ้นเกี่ยวกับเรื่องนี้ (ผมเคยใช้Ameliaและmiceแต่ฉันไม่แน่นอนผู้เชี่ยวชาญในสถิติแค่พยายามที่จะเรียนรู้ได้มากเท่าที่จะทำได้)

ในที่สุดคุณอาจพบว่าน่าสนใจต่อไปนี้เป็นวันที่เล็กน้อย แต่ก็ยังดีภาพรวมของวิธีการวิธีการและซอฟต์แวร์สำหรับการใส่ข้อมูลหลาย ๆ ค่าที่หายไป: http://www.ncbi.nlm.nih.gov/pmc/articles / ฉันแน่ใจว่ามีเอกสารภาพรวมที่ใหม่กว่าใน MI แต่นั่นคือทั้งหมดที่ฉันรู้ในปัจจุบัน ฉันหวังว่านี่จะเป็นประโยชน์บ้าง


1
ความคิดเห็นที่ดีนี้ทำให้ฉันคิดว่าการจับคู่ค่าเฉลี่ยที่ทำนายได้ซึ่งแทนที่การพลาดด้วยค่าที่สังเกตได้จริงอาจรวมข้อ จำกัด บางอย่างแล้วหากข้อมูลที่สังเกตได้ทั้งหมดตรงตามข้อ จำกัด ฉันจะขอบคุณใครบางคนที่คิดเรื่องนี้ผ่าน ผมยังไม่ได้ดำเนินการข้อ จำกัด ใด ๆ aregImputeเป็นพิเศษใน
Frank Harrell

1
คุณพูดถูก ฉันเพิ่งตระหนักว่าการสังเกตของผู้บริจาคให้ค่าที่สอดคล้องกับตัวแปรอื่น ๆของพวกเขาแต่ไม่ใช่กับตัวแปรอื่น ๆ ในตัวแปรเป้าหมาย
Frank Harrell

1
นอกเหนือจากสมมติฐานการกระจายตัวของ Amelia คุณมีโอกาสที่จะระบุข้อ จำกัด ในรายละเอียดเพิ่มเติมกว่าที่ฉันได้แสดงในคำตอบของฉันหรือไม่? ปัญหาsqueezeคือขอบเขตนั้นคงที่ดังนั้นคุณจึงไม่สามารถระบุอะไรx1<x2ได้ นอกจากนี้ดูเหมือนว่าจะมีการเรียกใช้งานบนเวกเตอร์ผลลัพธ์ที่ใส่ข้อมูลซึ่งฉันเชื่อว่าสายเกินไป สำหรับฉันแล้วดูเหมือนว่าขอบเขตควรได้รับการพิจารณาในระหว่างกระบวนการใส่ร้ายดังนั้นพวกเขาจึงมีความหมายมากกว่าการปรับตามความเป็นจริง
t0x1n

1
@ t0x1n: น่าเสียดายที่ฉันไม่มีโอกาสระบุข้อ จำกัดAmeliaเพราะฉันได้เปลี่ยนจากmiceเป็นเป็นทันทีที่การทดสอบของฉันยืนยันว่าข้อมูลของฉันไม่ได้หลายตัวแปรตามปกติ แต่ผมเพิ่งวิ่งข้ามชุดนี้ดีมากของสไลด์การนำเสนอในหัวข้อ (วิธีการ MI และซอฟต์แวร์): statistik.lmu.de/~fkreuter/imputation_sose2011/downloads/... หากฉันเข้าใจถูกต้องจะอธิบายถึงวิธีแก้ไขปัญหาข้อ จำกัด ที่อาจเกิดขึ้น (ดูหน้า 50 ของ PDF - ไม่ใช่สไลด์หมายเลข 50!) หวังว่านี่จะช่วยได้
Aleksandr Blekh

1
@ t0x1n: ที่จริงการแก้ปัญหาที่อธิบายไว้ในหน้า 50 และ 51
อเล็กซานเด Blekh

0

ถ้าฉันเข้าใจคำถามของคุณถูกต้องดูเหมือนว่าคุณรู้อยู่แล้วว่าค่าที่ตัวแปรที่หายไปควรมีข้อ จำกัด บางประการ ฉันไม่ชำนาญใน SPSS มากนัก แต่ใน RI คุณคิดว่าคุณสามารถเขียนฟังก์ชันเพื่อทำสิ่งนั้นได้ (ซึ่งไม่ควรยากเกินไปขึ้นอยู่กับประสบการณ์ของคุณฉันควรพูด) ฉันไม่ทราบแพ็คเกจที่ทำงานกับข้อ จำกัด ดังกล่าว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.