วิธีจำลองข้อมูลที่เป็นไปตามข้อ จำกัด เฉพาะเช่นมีค่าเฉลี่ยเฉพาะและค่าเบี่ยงเบนมาตรฐาน


56

คำถามนี้กระตุ้นโดยคำถามของฉันในการวิเคราะห์อภิมาน แต่ฉันคิดว่ามันจะมีประโยชน์ในการสอนบริบทที่คุณต้องการสร้างชุดข้อมูลที่สะท้อนชุดข้อมูลที่มีอยู่เดิม

ฉันรู้วิธีสร้างข้อมูลแบบสุ่มจากการแจกแจงที่กำหนด ตัวอย่างเช่นถ้าฉันอ่านเกี่ยวกับผลลัพธ์ของการศึกษาที่มี:

  • ค่าเฉลี่ย 102
  • ค่าเบี่ยงเบนมาตรฐานเท่ากับ 5.2 และ
  • ขนาดตัวอย่าง 72

ฉันสามารถสร้างข้อมูลที่คล้ายกันโดยใช้rnormใน R ตัวอย่างเช่น

set.seed(1234)
x <- rnorm(n=72, mean=102, sd=5.2)

แน่นอนค่าเฉลี่ยและ SD จะไม่เท่ากับ 102 และ 5.2 ตามลำดับ:

round(c(n=length(x), mean=mean(x), sd=sd(x)), 2)
##     n   mean     sd 
## 72.00 100.58   5.25 

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

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

คำถาม

  • โดยทั่วไปฉันจะจำลองข้อมูลที่ตรงตามข้อ จำกัด ได้อย่างไร
  • มีบทความที่เขียนเกี่ยวกับเรื่องนี้หรือไม่? มีโปรแกรมใด ๆ ใน R ที่ทำเช่นนี้หรือไม่?
  • เพื่อประโยชน์ของตัวอย่างฉันจะจำลองตัวแปรอย่างไรเพื่อให้มีค่าเฉลี่ยและ sd เฉพาะ?

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

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

4
BTW คำถามสุดท้ายเป็นเรื่องเล็กน้อยสำหรับตระกูลการกระจายขนาด เช่นx<-rnorm(72);x<-5.2*(x-mean(x))/sd(x)+102ทำกลอุบาย
whuber

1
@whuber ในฐานะที่เป็นสิ่งสำคัญในการแสดงความคิดเห็นต่อคำตอบของฉัน (ซึ่งกล่าวถึง "เคล็ดลับ" นี้) และความคิดเห็นสำหรับคำตอบอื่น - วิธีการนี้โดยทั่วไปจะไม่เก็บตัวแปรภายในตระกูลการกระจายตัวเดียวกันเนื่องจากคุณหาร โดยค่าเบี่ยงเบนมาตรฐานตัวอย่าง
แมโคร

5
@Macro นี่เป็นจุดที่ดี แต่บางทีคำตอบที่ดีที่สุดคือ "แน่นอนพวกเขาจะไม่มีการกระจายแบบเดียวกัน"! การกระจายที่คุณต้องการคือเงื่อนไขการกระจายในข้อ จำกัด โดยทั่วไปแล้วจะไม่ได้มาจากตระกูลเดียวกันกับการกระจายตัวของผู้ปกครอง ตัวอย่างแต่ละองค์ประกอบของตัวอย่างขนาด 4 ที่มีค่าเฉลี่ย 0 และ SD 1 ที่ดึงมาจากการแจกแจงแบบปกติจะมีความน่าจะเป็นแบบเดียวกันเกือบ[-1.5, 1.5] เนื่องจากเงื่อนไขวางขอบเขตบนและล่างของค่าที่เป็นไปได้
whuber

คำตอบ:


26

โดยทั่วไปจะทำให้ตัวอย่างของคุณหมายถึงความแปรปรวนและตรงเท่ากับค่าที่กำหนดไว้ล่วงหน้าคุณสามารถเปลี่ยนได้อย่างเหมาะสมและขนาดตัวแปร โดยเฉพาะถ้าเป็นตัวอย่างจากนั้นเป็นตัวแปรใหม่X1,X2,...,Xn

Zi=c1(XiX¯sX)+c2

โดยที่X¯=1ni=1nXisX2=1n1i=1n(XiX¯)2Zic2c1

Bi=a+(ba)(Ximin({X1,...,Xn})max({X1,...,Xn})min({X1,...,Xn}))

จะผลิตชุดข้อมูลว่าจะมีการ จำกัด ช่วงเวลาB) B1,...,Bn(a,b)

หมายเหตุ:โดยทั่วไปการเปลี่ยน / การปรับประเภทเหล่านี้โดยทั่วไปจะเปลี่ยนตระกูลการกระจายของข้อมูลแม้ว่าข้อมูลดั้งเดิมจะมาจากตระกูลที่ตั้งขนาดก็ตาม

ในบริบทของการกระจายปกติmvrnormฟังก์ชั่นในการR ช่วยให้คุณเพื่อจำลองข้อมูลปกติ (หรือหลายตัวแปรปกติ) กับที่กำหนดไว้ล่วงหน้าตัวอย่างหมายถึง / empirical=TRUEความแปรปรวนโดยการตั้งค่า โดยเฉพาะฟังก์ชั่นนี้จำลองข้อมูลจากเงื่อนไขการกระจายของตัวแปรที่กระจายตามปกติให้ค่าเฉลี่ยตัวอย่างและ (ร่วม) ความแปรปรวนเท่ากับค่าที่กำหนดไว้ล่วงหน้า โปรดทราบว่าการแจกแจงส่วนขยายที่เกิดขึ้นนั้นไม่ปกติตามที่ระบุโดย @whuber ในความคิดเห็นของคำถามหลัก

นี่คือตัวอย่าง univariate ง่ายๆที่ค่าเฉลี่ยตัวอย่าง (จากตัวอย่างของ ) ถูก จำกัด ให้เป็น 0 และค่าเบี่ยงเบนมาตรฐานตัวอย่างคือ 1 เราจะเห็นได้ว่าองค์ประกอบแรกนั้นคล้ายคลึงกับการแจกแจงแบบสม่ำเสมอมากกว่าปกติ กระจาย:n=4

library(MASS)
 z = rep(0,10000)
for(i in 1:10000)
{
    x = mvrnorm(n = 4, rep(0,1), 1, tol = 1e-6, empirical = TRUE)
    z[i] = x[1]
}
hist(z, col="blue")

                  ป้อนคำอธิบายรูปภาพที่นี่


1
จะไม่ได้รับการกระจายตามปกติแม้ว่าพวกเขาอาจจะอยู่ที่ประมาณดังนั้นถ้าขนาดของกลุ่มตัวอย่างที่มีขนาดใหญ่ ความคิดเห็นแรกที่ @ @ Sean ตอบคือสิ่งนี้ Zi
พระคาร์ดินัล

1
นั่นเป็นเรื่องธรรมชาติที่ต้องทำ ... และบ่อยครั้งที่จะไม่ทำให้เกิดปัญหามากเกินไป
พระคาร์ดินัล

1
+1 ในตัวอย่างเครื่องแบบคือคำตอบที่ถูกต้องโดยวิธีการ (การดร็อปดาวน์ที่ปลายสุดของพล็อตคือสิ่งประดิษฐ์ของวิธีการวาดกราฟฮิสโทแกรม)
whuber

1
@whuber ขอบคุณสำหรับแรงจูงใจตัวอย่างนี้ จากข้อเท็จจริงที่ว่าการกระจายของส่วนต่างเปลี่ยนไปเมื่อคุณมีเงื่อนไขเกี่ยวกับค่าเฉลี่ย / ความแปรปรวนตัวอย่างดูเหมือนว่า "คำตอบ" ที่ดีที่สุดในจิตวิญญาณของคำถามของ OP คือการจำลองข้อมูลที่มีค่าเฉลี่ย / ความแปรปรวนของประชากรเท่ากับที่รายงานเป็นตัวอย่าง ปริมาณ (ตามที่ OP แนะนำโดยตัวของมันเอง) ใช่ไหม? ด้วยวิธีนี้คุณจะได้รับปริมาณตัวอย่าง "ใกล้เคียง" กับสิ่งที่ต้องการและการกระจายเล็กน้อยเป็นสิ่งที่คุณต้องการให้เป็น
แมโคร

1
@whuber หากตัวอย่างของคุณเป็นปกติมี -distribution ใช่ไหม "ใหม่" ตัวแปรในคำถามก็จะมีการรวมกันเชิงเส้นของt_iTi=(XiX¯)/stTi
แมโคร

22

เกี่ยวกับคำขอของคุณสำหรับเอกสารมี:

นี่ไม่ใช่สิ่งที่คุณกำลังมองหา แต่อาจทำหน้าที่เป็นโรงโม่แป้ง


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

ยกตัวอย่างเช่นการสร้างชุดของข้อมูลจากการแจกแจงแบบปกติที่จะมีตัวอย่างให้หมายถึงและแปรปรวนคุณจะต้องแก้ไขค่าของจุดสองจุด:และZเนื่องจากค่าเฉลี่ยตัวอย่างคือ:ต้อง: ความแปรปรวนตัวอย่างคือ: ดังนั้น (หลังจากแทนที่ข้างต้นสำหรับ , การกระจาย / กระจายและจัดเรียงใหม่ ... ) เราได้รับ: Nx¯s2yz

x¯=i=1N2xi+y+zN
y
y=Nx¯(i=1N2xi+z)
s2=i=1N2(xix¯)2+(yx¯)2+(zx¯)2N1
y a = - 2 b = 2 ( N ˉ x - N - 2 i = 1 x i ) c z
2(Nx¯i=1N2xi)z2z2=Nx¯2(N1)+i=1N2xi2+[i=1N2xi]22Nx¯i=1N2xi(N1)s2
ถ้าเราใช้ ,และเป็นปฏิเสธของ RHS เราสามารถแก้ปัญหาสำหรับโดยใช้สูตรสมการกำลังสอง ตัวอย่างเช่นในสามารถใช้รหัสต่อไปนี้: a=2b=2(Nx¯i=1N2xi)czR
find.yz = function(x, xbar, s2){
  N    = length(x) + 2
  sumx = sum(x)
  sx2  = as.numeric(x%*%x)          # this is the sum of x^2
  a    = -2
  b    = 2*(N*xbar - sumx)
  c    = -N*xbar^2*(N-1) - sx2 - sumx^2 + 2*N*xbar*sumx + (N-1)*s2
  rt   = sqrt(b^2 - 4*a*c)

  z    = (-b + rt)/(2*a)
  y    = N*xbar - (sumx + z)
  newx = c(x, y, z)
  return(newx)
}

set.seed(62)
x    = rnorm(2)
newx = find.yz(x, xbar=0, s2=1)
newx                                # [1] 0.8012701  0.2844567  0.3757358 -1.4614627
mean(newx)                          # [1] 0
var(newx)                           # [1] 1

มีบางสิ่งที่จะเข้าใจเกี่ยวกับวิธีการนี้ อันดับแรกไม่รับประกันว่าจะทำงาน ยกตัวอย่างเช่นมันเป็นไปได้ว่าครั้งแรกของคุณข้อมูลเช่นว่าไม่มีค่าและมีอยู่ที่จะทำให้ความแปรปรวนของผลจากการตั้งค่าเท่ากับ 2 พิจารณา: Y Z s 2N2yzs2

set.seed(22)    
x    = rnorm(2)
newx = find.yz(x, xbar=0, s2=1)
Warning message:
In sqrt(b^2 - 4 * a * c) : NaNs produced
newx                                # [1] -0.5121391  2.4851837        NaN        NaN
var(c(x, mean(x), mean(x)))         # [1] 1.497324

ประการที่สองในขณะที่การกำหนดมาตรฐานทำให้การกระจายเล็กน้อยของตัวแปรทั้งหมดของคุณมีความเหมือนกันมากขึ้นวิธีการนี้มีผลเฉพาะค่าสองค่าสุดท้ายเท่านั้น

set.seed(82)
xScaled = matrix(NA, ncol=4, nrow=10000)
for(i in 1:10000){
  x           = rnorm(4)
  xScaled[i,] = scale(x)
}

(แทรกพล็อต)

set.seed(82)
xDf = matrix(NA, ncol=4, nrow=10000)
i   = 1
while(i<10001){
  x       = rnorm(2)
  xDf[i,] = try(find.yz(x, xbar=0, s2=2), silent=TRUE)  # keeps the code from crashing
  if(!is.nan(xDf[i,4])){ i = i+1 }                      # increments if worked
}

(แทรกพล็อต)

ประการที่สามตัวอย่างผลลัพธ์อาจดูไม่ปกติ มันอาจดูเหมือนว่ามี 'ค่าผิดปกติ' (เช่นจุดที่มาจากกระบวนการสร้างข้อมูลที่แตกต่างจากส่วนที่เหลือ) เนื่องจากเป็นกรณี นี่เป็นโอกาสน้อยที่จะมีปัญหากับขนาดตัวอย่างที่ใหญ่กว่าเนื่องจากสถิติตัวอย่างจากข้อมูลที่สร้างขึ้นควรรวมเข้ากับค่าที่ต้องการและทำให้ต้องมีการปรับเปลี่ยนน้อยลง ด้วยตัวอย่างขนาดเล็กคุณสามารถรวมวิธีการนี้กับอัลกอริทึมการยอมรับ / ปฏิเสธที่พยายามอีกครั้งหากตัวอย่างที่สร้างขึ้นมีสถิติรูปร่าง (เช่นความเบ้และความโด่ง) ที่อยู่นอกขอบเขตที่ยอมรับได้ (cf. , @ cardinal's comment ) หรือขยาย วิธีนี้เพื่อสร้างตัวอย่างที่มีค่าเฉลี่ยคงที่ความแปรปรวนความเบ้และkurtosis (ฉันจะทิ้งพีชคณิตให้คุณ) อีกวิธีหนึ่งคุณสามารถสร้างตัวอย่างจำนวนน้อยและใช้ตัวอย่างที่มีค่าสถิติ Kolmogorov-Smirnov ที่เล็กที่สุด

library(moments)
set.seed(7900)  
x = rnorm(18)
newx.ss7900 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss7900)                       # [1] 1.832733
kurtosis(newx.ss7900) - 3                   # [1] 4.334414
ks.test(newx.ss7900, "pnorm")$statistic     # 0.1934226

set.seed(200)  
x = rnorm(18)
newx.ss200 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss200)                        # [1] 0.137446
kurtosis(newx.ss200) - 3                    # [1] 0.1148834
ks.test(newx.ss200, "pnorm")$statistic      # 0.1326304 

set.seed(4700)  
x = rnorm(18)
newx.ss4700 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss4700)                       # [1]  0.3258491
kurtosis(newx.ss4700) - 3                   # [1] -0.02997377
ks.test(newx.ss4700, "pnorm")$statistic     # 0.07707929S

(เพิ่มพล็อต)


10

เทคนิคทั่วไปคือ 'วิธีการปฏิเสธ' ซึ่งคุณเพียงแค่ปฏิเสธผลลัพธ์ที่ไม่ตรงตามข้อ จำกัด ของคุณ นอกจากว่าคุณจะมีคำแนะนำบางอย่าง (เช่น MCMC) คุณอาจจะสร้างหลายกรณี (ขึ้นอยู่กับสถานการณ์ของคุณ) ซึ่งถูกปฏิเสธ!

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

เป็นตัวอย่างที่น่าเกลียดที่เราจะหาเวกเตอร์แบบสุ่มที่มีความยาว 100 ซึ่งมีค่าเฉลี่ย = 0 และส่วนเบี่ยงเบนมาตรฐาน = 1

# simplistic optimisation example
# I am looking for a mean of zero and a standard deviation of one
# but starting from a plain uniform(0,1) distribution :-)
# create a function to optimise
fun <- function(xvec, N=100) {
  xmin <- xvec[1]
  xmax <- xvec[2]
  x <- runif(N, xmin, xmax)
  xdist <- (mean(x) - 0)^2 + (sd(x) - 1)^2
  xdist
}
xr <- optim(c(0,1), fun)

# now lets test those results
X <- runif(100, xr$par[1], xr$par[2])
mean(X) # approx 0
sd(X)   # approx 1

7
ข้อ จำกัด ที่เกิดขึ้นกับความน่าจะเป็นศูนย์นั้นยากที่จะทำให้พอใจ ;-) สำหรับตัวอย่างที่เฉพาะเจาะจงการเปลี่ยนแปลงและการขยายที่เหมาะสมนั้นสามารถบรรลุเป้าหมายที่ระบุไว้ได้อย่างง่ายดายแม้ว่าอาจต้องการวิเคราะห์ลึกลงไปอีกเล็กน้อยเพื่อดูว่าการกระจายข้อมูลถูกรบกวนโดยการดำเนินการดังกล่าวอย่างไร
พระคาร์ดินัล

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

1
@cardinal - เห็นด้วย เราควรดูการแจกแจง (เช่นฮิสโตแกรม) ของทั้งตัวเลขที่จำลองและการป้อนข้อมูลเนื่องจากบางครั้งสิ่งเหล่านี้อาจดูแปลกมาก!
Sean

9

มีโปรแกรมใด ๆ ใน R ที่ทำเช่นนี้หรือไม่?

Runuranแพคเกจ R มีหลายวิธีในการสร้าง variates สุ่ม มันใช้ไลบรารี C จากโครงการUNU.RAN (เครื่องกำเนิดหมายเลข RAndom หมายเลขไม่สม่ำเสมอ) ความรู้ของฉันเองเกี่ยวกับสนามของการสร้างตัวแปรแบบสุ่มนั้นมี จำกัด แต่บทความใน Runuran ให้ภาพรวมที่ดี ด้านล่างนี้เป็นวิธีการที่มีอยู่ในแพ็คเกจ Runuran ซึ่งนำมาจากบทความสั้น ๆ :

การกระจายอย่างต่อเนื่อง:

  • การสุ่มตัวอย่างการปฏิเสธแบบปรับตัว
  • การปฏิเสธการแปลงความหนาแน่นผกผัน
  • การแก้ไขพหุนามของ Inverse CDF
  • วิธีอัตราส่วนง่ายของเครื่องแบบ
  • ปฏิเสธการเปลี่ยนความหนาแน่น

การกระจายแบบไม่ต่อเนื่อง:

  • การปฏิเสธการปฏิเสธโดยอัตโนมัติแบบไม่ต่อเนื่อง
  • วิธี Alias-Urn
  • วิธีการตารางแนะนำสำหรับการผกผันแบบไม่ต่อเนื่อง

การกระจายหลายตัวแปร:

  • อัลกอริทึม Hit-and-Run ด้วยวิธี Ratio-of-Uniforms
  • วิธีการหาอัตราส่วนของชุดเครื่องแบบหลายตัวแปร

ตัวอย่าง:

สำหรับตัวอย่างอย่างรวดเร็วสมมติว่าคุณต้องการสร้างการแจกแจงแบบปกติที่ล้อมรอบระหว่าง 0 ถึง 100:

require("Runuran")

## Normal distribution bounded between 0 and 100
d1 <- urnorm(n = 1000, mean = 50, sd = 25, lb = 0, ub = 100)

summary(d1)
sd(d1)
hist(d1)

urnorm()ฟังก์ชั่นฟังก์ชั่นเสื้อคลุมสะดวก ฉันเชื่อว่าเบื้องหลังมันใช้วิธี Polynomial Interpolation ของ Inverse CDF แต่ไม่แน่ใจ สำหรับสิ่งที่ซับซ้อนกว่านั้นให้บอกว่าการกระจายแบบไม่ต่อเนื่องที่ล้อมรอบอยู่ระหว่าง 0 ถึง 100:

require("Runuran")

## Discrete normal distribution bounded between 0 and 100
# Create UNU.RAN discrete distribution object
discrete <- unuran.discr.new(pv = dnorm(0:100, mean = 50, sd = 25), lb = 0, ub = 100)

# Create UNU.RAN object using the Guide-Table Method for Discrete Inversion
unr <- unuran.new(distr = discrete, method = "dgt")

# Generate random variates from the UNU.RAN object
d2 <- ur(unr = unr, n = 1000)

summary(d2)
sd(d2)
head(d2)
hist(d2)

3

ดูเหมือนว่าจะมีแพ็คเกจ R ที่ตอบสนองความต้องการของคุณเมื่อวานนี้! simstudyโดย Keith Goldfeld

จำลองชุดข้อมูลเพื่อสำรวจเทคนิคการสร้างแบบจำลองหรือเข้าใจกระบวนการสร้างข้อมูลได้ดีขึ้น ผู้ใช้ระบุชุดของความสัมพันธ์ระหว่าง covariates และสร้างข้อมูลตามข้อกำหนดเหล่านี้ ชุดข้อมูลสุดท้ายสามารถแสดงข้อมูลจากการทดลองควบคุมแบบสุ่มการวัดซ้ำ (ตามยาว) การออกแบบและการทดลองแบบสุ่มกลุ่ม การหายไปสามารถเกิดขึ้นได้โดยใช้กลไกต่าง ๆ (MCAR, MAR, NMAR)


1
ไม่ว่าจะเป็นในบทความสั้นหรือในหน้าแรกของโปรแกรม ทำไมคุณคิดว่าแพคเกจนี้ตรงกับความต้องการของการวาดจากการแจกแจงแบบมีเงื่อนไข
gg

2

นี่เป็นคำตอบที่มาช้ามากมันไม่มีความหมายอย่างแน่นอน แต่มักจะมีทางออกของคำถาม MCMC อยู่เสมอ กล่าวคือเพื่อฉายความหนาแน่นของตัวอย่างบนท่อร่วมที่กำหนดโดยข้อ จำกัด เช่น ปัญหาเดียวเท่านั้นคือในการจำลองค่าเหนือนานานั่นคือการหาพารามิเตอร์ของมิติที่ถูกต้อง 2,015 กระดาษโดย Bornn, Shephard และ Solgi ศึกษาปัญหานี้มาก (ด้วยการที่น่าสนใจคำตอบที่ดีที่สุดหากไม่ได้ )

i=1nf(xi)
i=1nxi=μ0i=1nxi2=σ02

2

คำตอบนี้จะพิจารณาวิธีการอื่นในการกรณีที่คุณต้องการบังคับ variates ที่จะอยู่ในช่วงที่ระบุและนอกจากนี้ยังกำหนดค่าเฉลี่ยและ / หรือความแปรปรวน

จำกัด การความสนใจของเราช่วงหน่วย[0,1]ลองใช้ค่าเฉลี่ยถ่วงน้ำหนักสำหรับค่าทั่วไปดังนั้นให้แก้ไขน้ำหนักด้วยหรือตั้งหากคุณต้องการน้ำหนักมาตรฐาน สมมติว่าปริมาณและเป็นตัวแทนของความแปรปรวนเฉลี่ย (น้ำหนัก) ที่ต้องการและ (ถ่วงน้ำหนัก) ตามลำดับ จำเป็นต้องใช้ขอบเขตบนของเพราะนั่นเป็นความแปรปรวนสูงสุดที่เป็นไปได้ในช่วงหน่วย เรามีความสนใจในการวาดบางตัวแปรจากด้วยข้อ จำกัด ช่วงเวลาเหล่านี้[0,1]wk[0,1]k=1Nwk=1wk=1/Nμ(0,1)0<σ2<μ(1μ)σ2x1,...,xN[0,1]

ครั้งแรกที่เราวาดบาง variatesจากการจำหน่ายใด ๆ เช่น(0,1) การกระจายนี้จะส่งผลต่อรูปร่างของการกระจายขั้นสุดท้าย จากนั้นเราจะ จำกัด ช่วงเวลาโดยใช้ฟังก์ชันโลจิสติก:y1,...,yNN(0,1)[0,1]

xk=11+e(ykvh)

ก่อนที่เราจะทำ แต่เท่าที่เห็นในสมการข้างต้นเราเปลี่ยน 's กับการแปลและขนาดวีนี่คล้ายกับสมการแรกในคำตอบของ @ Macro เคล็ดลับคือตอนนี้ให้เลือกและเพื่อให้ตัวแปรที่แปลงแล้วมีช่วงเวลาที่ต้องการ นั่นคือเราต้องการเก็บไว้หนึ่งหรือทั้งสองอย่างต่อไปนี้: ykhvhvx1,...,xN

μ=k=1Nwk1+e(ykvh)σ2=k=1Nwk(1+e(ykvh))2(k=1Nwk1+e(ykvh))2

Inverting สมการเหล่านี้สำหรับและวิเคราะห์ไม่เป็นไปได้ แต่การทำเช่นนั้นตัวเลขตรงไปตรงมาโดยเฉพาะอย่างยิ่งตั้งแต่สัญญาซื้อขายล่วงหน้าที่เกี่ยวกับและมีความง่ายต่อการคำนวณ; ใช้วิธีการซ้ำสองสามครั้งของวิธีการของนิวตันเท่านั้นvhvh

เป็นตัวอย่างแรกสมมติว่าเราใส่ใจเฉพาะการควบคุมค่าเฉลี่ยถ่วงน้ำหนักไม่ใช่ความแปรปรวน แก้ไข , , , Nจากนั้นสำหรับการแจกแจงพื้นฐาน ,และเราจบด้วยฮิสโตแกรมต่อไปนี้ตามลำดับและค่าเฉลี่ยของตัวแปรเท่ากับ (แม้สำหรับขนาดเล็ก):v = 1 w k = 1 / N N = 200000 N ( 0 , 1 ) N ( 0 , 0.1 ) Unif ( 0 , 1 ) 0.8 Nμ=0.8v=1wk=1/NN=200000N(0,1)N(0,0.1)Unif(0,1) 0.8N

example1

ต่อไปให้เรา จำกัด ทั้งค่าเฉลี่ยและความแปรปรวน ใช้ , ,และพิจารณาสามต้องการเบี่ยงเบนมาตรฐาน\การใช้การแจกแจงต้นแบบเดียวกันนี่คือฮิสโตแกรมสำหรับแต่ละรายการ:w k = 1 / N N = 2000 σ = 0.1 , 0.05 , 0.01 N ( 0 , 1 )μ=0.2wk=1/NN=2000σ=0.1,0.05,0.01N(0,1)

ตัวอย่างที่ 2

โปรดทราบว่าสิ่งเหล่านี้อาจดูเหมือนเป็นรุ่นเบต้าแต่ไม่ใช่


1

ในคำตอบของฉันที่นี่ฉันแสดงรายการแพ็คเกจ R สามชุดสำหรับการทำสิ่งนี้:


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