ทำไมการรวบรวมข้อมูลจนกว่าจะได้ผลลัพธ์ที่มีนัยสำคัญจะเพิ่มอัตราความผิดพลาด Type I


60

ฉันสงสัยว่าทำไมการรวบรวมข้อมูลจนกว่าจะได้ผลลัพธ์ที่สำคัญ (เช่น ) ได้รับ (เช่นการแฮ็ค p) เพิ่มอัตราความผิดพลาด Type I หรือไม่p<.05

ฉันขอชื่นชมการRสาธิตปรากฏการณ์นี้อย่างมาก


6
คุณอาจหมายถึง "p-hacking" เพราะ "harking" หมายถึง "Hypothesizing After Results is Known" และถึงแม้ว่าจะถือว่าเป็นบาปที่เกี่ยวข้อง แต่ก็ไม่ใช่สิ่งที่คุณต้องการถาม
whuber

2
อีกครั้ง xkcd ตอบคำถามที่ดีกับรูปภาพ xkcd.com/882
Jason

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

1
@JiK โทรอย่างยุติธรรม ฉันมุ่งเน้นไปที่ "พยายามต่อไปจนกว่าเราจะได้ผลลัพธ์ตามที่เราต้องการ" แต่คุณถูกต้องจริง ๆ มีคำถามมากมายอยู่ในมือ
Jason

@whuber และผู้ใช้ 163778 ให้คำตอบที่คล้ายกันมากตามที่กล่าวไว้สำหรับกรณีที่เหมือนกันในทางปฏิบัติของการทดสอบ "A / B (ตามลำดับ)" ในหัวข้อนี้: stats.stackexchange.com/questions/244646/เรามีข้อโต้แย้งในแง่ของ Family Wise Error อัตราและความจำเป็นสำหรับการปรับค่า p ในการทดสอบซ้ำ คำถามนี้ในความเป็นจริงสามารถมองว่าเป็นปัญหาการทดสอบซ้ำ!
tomka

คำตอบ:


87

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

ฉันจะพลิกคุณเพื่อดูว่าใครจ่ายสำหรับอาหารค่ำ

ตกลงฉันเรียกหัว

หนูคุณชนะแล้ว ดีที่สุดสองในสาม


หากต้องการทำความเข้าใจกับสิ่งนี้ให้ดีขึ้นให้พิจารณาแบบจำลองที่เรียบง่าย แต่เป็นจริงของขั้นตอนต่อเนื่องนี้ สมมติว่าคุณจะเริ่มต้นด้วยการ "หนีคดี" ของจำนวนที่แน่นอนของการสังเกต แต่ยินดีที่จะยังคงอยู่ในการทดลองเพื่อให้ได้รับค่า p น้อยกว่า0.05สมมติฐานว่างคือการสังเกตแต่ละครั้งมาจากการแจกแจงแบบปกติมาตรฐาน (อิสระ) อีกทางเลือกหนึ่งคือมาจากการแจกแจงปกติความแปรปรวนของหน่วยด้วยค่าเฉลี่ยที่ไม่ใช่ศูนย์ สถิติการทดสอบจะเป็นค่าเฉลี่ยของทุกสังเกตหารด้วยข้อผิดพลาดมาตรฐานของพวกเขา{n} สำหรับการทดสอบสองด้านค่าที่สำคัญคือX ฉันX ฉัน n ˉ X 1 / 0.05XiXinX¯ 0.0250.975Zα=±1.961/n0.025คะแนนร้อยละและของการแจกแจงแบบปกติมาตรฐาน,โดยประมาณ0.975Zα=±1.96

นี่คือการทดสอบที่ดี --for การทดสอบเดียวกับขนาดของกลุ่มตัวอย่างคงที่nมีโอกาสในการปฏิเสธสมมติฐานว่างไม่ว่าอาจเป็นอะไร5 % nn5%n

ลองเปลี่ยนพีชคณิตเป็นพีชคณิตเป็นแบบทดสอบที่เท่ากันโดยอิงจากผลรวมของค่าทั้งหมด,S n = X 1 + X 2 + + X n = n ˉ Xn

Sn=X1+X2++Xn=nX¯.

ดังนั้นข้อมูลจะ "สำคัญ" เมื่อ

|Zα||X¯1/n|=|Snn/n|=|Sn|/n;

นั่นคือ,

(1)|Zα|n|Sn|.

หากเราฉลาดเราจะลดความสูญเสียและยอมแพ้เมื่อเติบโตขึ้นมากและข้อมูลยังไม่ได้เข้าสู่ภูมิภาคที่สำคัญn

นี้อธิบายสุ่มเดิน S_nสูตรจำนวนจะสร้าง "รั้ว" โค้งหรือพาราโบลาโค้งรอบพล็อตของการเดินแบบสุ่ม : ผลลัพธ์คือ "สำคัญ" หากจุดใด ๆของการสุ่มเดินกระทบรั้ว ( 1 ) ( n , S n )Sn(1)(n,Sn)

มันเป็นคุณสมบัติของการเดินแบบสุ่มว่าถ้าเรารอนานพอมีโอกาสมากที่ในบางจุดผลลัพธ์จะดูมีความสำคัญ

นี่คือการจำลองอิสระ 20 แบบจนถึงขีด จำกัดตัวอย่าง พวกเขาทุกคนเริ่มต้นการทดสอบที่ตัวอย่างที่จุดที่เราตรวจสอบว่าแต่ละจุดอยู่นอกอุปสรรคที่ได้รับการวาดตามสูตร(1)จากจุดที่การทดสอบทางสถิติเป็นครั้งแรก "สำคัญ" ข้อมูลจำลองจะเป็นสีแดงn = 30 ( 1 )n=5000n=30(1)

รูป

คุณสามารถดูว่าเกิดอะไรขึ้น: การเดินแบบสุ่มจะเพิ่มขึ้นเรื่อย ๆ เมื่อเพิ่มขึ้น อุปสรรคกำลังแพร่กระจายในอัตราเดียวกัน - แต่ไม่เร็วพอที่จะหลีกเลี่ยงการเดินสุ่มn

ใน 20% ของการจำลองเหล่านี้พบความแตกต่าง "สำคัญ" - มักจะค่อนข้างเร็ว - แม้ว่าในทุก ๆ คนสมมติฐานว่างจะถูกต้องอย่างแน่นอน! การรันการจำลองประเภทนี้มากขึ้นบ่งชี้ว่าขนาดการทดสอบจริงใกล้เคียงกับมากกว่าค่าที่คาดหวังของ : นั่นคือความตั้งใจของคุณที่จะมองหา "นัยสำคัญ" จนถึงขนาดตัวอย่างให้โอกาสในการปฏิเสธค่า Null แม้ว่าค่า Null จะเป็นจริงα = 5 % 5000 25 %25%α=5%500025%

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

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

library(data.table)
library(ggplot2)

alpha <- 0.05   # Test size
n.sim <- 20     # Number of simulated experiments
n.buffer <- 5e3 # Maximum experiment length
i.min <- 30     # Initial number of observations
#
# Generate data.
#
set.seed(17)
X <- data.table(
  n = rep(0:n.buffer, n.sim),
  Iteration = rep(1:n.sim, each=n.buffer+1),
  X = rnorm((1+n.buffer)*n.sim)
)
#
# Perform the testing.
#
Z.alpha <- -qnorm(alpha/2)
X[, Z := Z.alpha * sqrt(n)]
X[, S := c(0, cumsum(X))[-(n.buffer+1)], by=Iteration]
X[, Trigger := abs(S) >= Z & n >= i.min]
X[, Significant := cumsum(Trigger) > 0, by=Iteration]
#
# Plot the results.
#
ggplot(X, aes(n, S, group=Iteration)) +
  geom_path(aes(n,Z)) + geom_path(aes(n,-Z)) +
  geom_point(aes(color=!Significant), size=1/2) +
  facet_wrap(~ Iteration)

12
nO(n)2/π

10
n=5,000,000α=0.051/4

4
α=0.05n

6
p<0.05n1=10nk+1=10nkpnk+1pnkp<0.0510nkA(nk)BB(nk)

10
@CL ฉันคาดหวังคำคัดค้านของคุณเมื่อหลายปีก่อน: 17 เป็นเชื้อสายของฉัน ในความเป็นจริงในช่วงต้น (มากอีกต่อไป) การทดลองผมก็มักจะได้รับมากขึ้นอัตราที่มีความสำคัญอย่างมากมีขนาดใหญ่กว่า 20% ฉันตั้งค่าเมล็ดพันธุ์ที่ 17 เพื่อสร้างภาพสุดท้ายและรู้สึกผิดหวังที่เอฟเฟกต์นั้นไม่น่าทึ่งนัก C'est la vie โพสต์ที่เกี่ยวข้อง (แสดงจุดของคุณ) ที่stats.stackexchange.com/a/38067/919
whuber

18

ผู้ที่ยังใหม่กับการทดสอบสมมติฐานมักคิดว่าเมื่อค่า ap ต่ำกว่า. 05 การเพิ่มผู้เข้าร่วมมากขึ้นจะลดค่า p เท่านั้น แต่นี่ไม่เป็นความจริง ภายใต้สมมติฐานว่างค่า ap จะกระจายอย่างสม่ำเสมอระหว่าง 0 และ 1 และสามารถกระเด็นไปรอบ ๆ ได้เล็กน้อยในช่วงนั้น

ฉันได้จำลองข้อมูลบางอย่างใน R (ทักษะ R ของฉันค่อนข้างพื้นฐาน) ในการจำลองนี้ฉันรวบรวมจุดข้อมูล 5 จุดโดยแต่ละกลุ่มมีการสุ่มเลือกสมาชิกภาพกลุ่ม (0 หรือ 1) และแต่ละคนมีการวัดผลลัพธ์แบบสุ่มที่เลือก ~ N (0,1) เริ่มต้นที่ผู้เข้าร่วม 6 ฉันทำการทดสอบ t ทุกรอบซ้ำ

for (i in 6:150) {
  df[i,1] = round(runif(1))
  df[i,2] = rnorm(1)
  p = t.test(df[ , 2] ~ df[ , 1], data = df)$p.value
  df[i,3] = p
}

ค่า p อยู่ในรูปนี้ สังเกตว่าฉันพบผลลัพธ์ที่สำคัญเมื่อขนาดตัวอย่างประมาณ 70-75 ถ้าฉันหยุดอยู่ตรงนั้นฉันจะจบลงด้วยการเชื่อว่าการค้นพบของฉันมีความสำคัญเพราะฉันจะพลาดความจริงที่ว่าค่า p ของฉันเพิ่มขึ้นกลับมาพร้อมกับกลุ่มตัวอย่างที่มีขนาดใหญ่ขึ้น เนื่องจากฉันรู้ว่าประชากรทั้งสองมีค่าเฉลี่ย 0 จึงต้องเป็นค่าบวกผิด ๆ นี่เป็นปัญหาของการเพิ่มข้อมูลจนกว่า p <.05 หากคุณเพิ่มความประพฤติที่เพียงพอในการทดสอบ p ในที่สุดก็จะข้ามขีด จำกัด . 05 และคุณสามารถพบผลกระทบที่สำคัญคือชุดข้อมูลใด ๆ

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


1
ขอบคุณ แต่Rรหัสของคุณไม่ได้ทำงานเลย
Reza

3
@Reza คุณจะต้องสร้างdfก่อน (ควรเป็นขนาดสุดท้าย) เนื่องจากรหัสเริ่มเขียนที่แถว 6 ความหมาย (ซึ่งตรงกับข้อความของคำตอบ) คือ df มีอยู่แล้วกับ 5 แถวที่กรอกข้อมูลแล้วอาจมีบางสิ่งที่เป็นเช่นนี้: n150<-vector("numeric",150); df<-data.frame(gp=n150,val=n150,pval=n150); init<-1:5; df[init,1]<-c(0,1,0,1,0); df[init,2]<-rnorm(5)(จากนั้นเรียกใช้โค้ดด้านบน) จากนั้นอาจ: plot(df$pv[6:150])
Glen_b

@ user263778 เน้นคำตอบที่เป็นประโยชน์และตรงประเด็นมาก แต่มีความสับสนมากเกินไปเกี่ยวกับการตีความค่า p ที่เรียกว่า - ความงามของการเต้น
Subhash C. Davar

@ user163778 - คุณควรรวมรหัสเพื่อเริ่มต้นทุกอย่างด้วย
Dason

17

คำตอบนี้เกี่ยวข้องกับความน่าจะเป็นในการได้รับผลลัพธ์ที่ "มีนัยสำคัญ" และการกระจายเวลาไปยังกิจกรรมนี้ในแบบจำลองของ @ whuber

S(t)=X1+X2++XttX1,X2,

(1)S(t+h)|S(t)=s0N(s0,h),
S(t)

TS(t)±zα/2t

Y(τ)S(t)tτ=lnt

(2)Y(τ)=S(t(τ))t(τ)=eτ/2S(eτ).
Y(τ+δ)
E(Y(τ+δ)|Y(τ)=y0)=E(e(τ+δ)/2S(eτ+δ)|S(eτ)=y0eτ/2)(3)=y0eδ/2
Var(Y(τ+δ)|Y(τ)=y0)=Var(e(τ+δ)/2S(eτ+δ)|S(eτ)=y0eτ/2)(4)=1eδ,
Y(τ)

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

±zα/2TY(τ)λ±zα/2λ^=0.125α=0.05ατ=0H0T=eT

(5)ET1+(1α)0eτλeλτdτ.
Tλ>1α

TETtt+1t

P(T>t)

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

รหัส R:

# Fig 1
par(mfrow=c(1,2),mar=c(4,4,.5,.5))
set.seed(16)
n <- 20
npoints <- n*100 + 1
t <- seq(1,n,len=npoints)
subset <- 1:n*100-99
deltat <- c(1,diff(t))
z <- qnorm(.975)
s <- cumsum(rnorm(npoints,sd=sqrt(deltat)))
plot(t,s,type="l",ylim=c(-1,1)*z*sqrt(n),ylab="S(t)",col="grey")
points(t[subset],s[subset],pch="+")
curve(sqrt(t)*z,xname="t",add=TRUE)
curve(-sqrt(t)*z,xname="t",add=TRUE)
tau <- log(t)
y <- s/sqrt(t)
plot(tau,y,type="l",ylim=c(-2.5,2.5),col="grey",xlab=expression(tau),ylab=expression(Y(tau)))
points(tau[subset],y[subset],pch="+")
abline(h=c(-z,z))

# Fig 2
nmax <- 1e+3
nsim <- 1e+5
alpha <- .05
t <- numeric(nsim)
n <- 1:nmax
for (i in 1:nsim) {
  s <- cumsum(rnorm(nmax))
  t[i] <- which(abs(s) > qnorm(1-alpha/2)*sqrt(n))[1]
}
delta <- ifelse(is.na(t),0,1)
t[delta==0] <- nmax + 1
library(survival)
par(mfrow=c(1,1),mar=c(4,4,.5,.5))
plot(survfit(Surv(t,delta)~1),log="xy",xlab="t",ylab="P(T>t)",conf.int=FALSE)
curve((1-alpha)*exp(-.125*(log(x))),add=TRUE,col="red",from=1,to=nmax)

ขอบคุณ! คุณมีการอ้างอิงใด ๆ (มาตรฐาน) สำหรับผลลัพธ์เหล่านี้หรือไม่ ตัวอย่างเช่นเหตุใดกระบวนการ Y จึงเป็น Ornstein-Uhlenbeck และเราสามารถหาผลลัพธ์เวลาที่ระบุได้อย่างไร
Grassie

1
Tτ=0Y(0)


Y(0)

5

จะต้องมีการกล่าวว่าการอภิปรายข้างต้นสำหรับมุมมองโลกบ่อยครั้งที่หลายหลากมาจากโอกาสที่คุณให้ข้อมูลจะรุนแรงมากขึ้นไม่ได้มาจากโอกาสที่คุณให้ผลกระทบที่มีอยู่ สาเหตุที่แท้จริงของปัญหาคือข้อผิดพลาด p-value และ type I ใช้การปรับเปลี่ยนลำดับการไหลของข้อมูลย้อนหลังซึ่งทำให้สำคัญ "วิธีที่คุณมาที่นี่" และสิ่งที่อาจเกิดขึ้นแทน ในทางตรงกันข้ามกระบวนทัศน์ของ Bayesian เข้ารหัสความสงสัยเกี่ยวกับผลกระทบของพารามิเตอร์เองไม่ใช่จากข้อมูล นั่นทำให้ความน่าจะเป็นหลังแต่ละอันถูกตีความเหมือนกันไม่ว่าคุณจะคำนวณความน่าจะเป็นหลังอื่น ๆ ของเอฟเฟกต์ 5 นาทีที่แล้วหรือไม่ รายละเอียดเพิ่มเติมและการจำลองแบบง่าย ๆ สามารถดูได้ที่http://www.fharrell.com/2017/10/continuous-learning-from-data-no


1
ลองจินตนาการถึงห้องแล็บที่นำโดยดร. บีซึ่งเป็นเบย์ผู้มีศรัทธา ห้องปฏิบัติการกำลังศึกษาการทำไพรเมอร์ทางสังคมและได้จัดทำเอกสารจำนวนมากแสดงผลของการทำรองพื้นซึ่งแต่ละครั้งรองรับโดย Bayes factor BF> 10 หากพวกเขาไม่เคยทำการทดสอบตามลำดับดูเหมือนว่าค่อนข้างน่าเชื่อถือ แต่ขอบอกว่าผมได้เรียนรู้ว่าพวกเขามักจะดำเนินการทดสอบตามลำดับและให้ได้รับวิชาใหม่จนกว่าพวกเขาจะได้รับ BF> 10 ในความโปรดปรานของผลกระทบรองพื้น เห็นได้ชัดว่าการทำงานทั้งหมดนี้ไร้ค่า ความจริงที่ว่าพวกเขาทำการทดสอบตามลำดับ + การเลือกสร้างความแตกต่างอย่างมากไม่ว่าจะขึ้นอยู่กับค่า p ของ BF
อะมีบาพูดว่า Reinstate Monica

1
0.95

1
ฉันอ่านโพสต์บล็อกของคุณสังเกตเห็นคำพูดและดูกระดาษที่คล้ายกัน ( ตัวเลือกหยุด: ไม่มีปัญหาสำหรับ Bayesians ) ที่คนอื่นเชื่อมโยงกับความคิดเห็นในคำตอบอื่น ฉันยังไม่เข้าใจ ถ้า "โมฆะ" (ขาดผลกระทบรองพื้น) เป็นจริงถ้าดร. บียินดีที่จะลองตัวอย่างนานพอเขาจะสามารถรับความน่าจะเป็นหลัง> 0.95 ทุก ๆ ครั้งที่เขาทำการทดลอง (เหมือนกับที่ดร. F จะสามารถ รับ p <0.05 ทุกครั้ง) ถ้านี่คือ "ไม่มีอะไรผิดปกติ" จากนั้นฉันก็ไม่รู้ว่าเป็นอะไร
อะมีบาพูดว่า Reinstate Monica

2
ฉันโต้เถียงเรื่องนี้ "ประเด็นที่ใหญ่กว่า" ฉันไม่คิดว่านี่เป็นเรื่องจริง ในขณะที่ฉันยังคงทำซ้ำภายใต้โมฆะของผลกระทบเป็นศูนย์และกับที่ได้รับก่อน (สมมติว่าบางอย่างต่อเนื่องกว้างก่อนที่ศูนย์ที่ศูนย์) การสุ่มตัวอย่างซ้ำจะเสมอไม่ช้าก็เร็วหรือให้ผลผลิต> 0.98 บุคคลที่มีการสุ่มตัวอย่างจนกว่านี้เกิดขึ้น (เช่นการใช้กฎหยุดนี้) จะผิดทุกครั้งเดียว คุณจะบอกได้อย่างไรว่าคนนี้จะผิดเพียง 0.02 ครั้ง? ฉันไม่เข้าใจ ภายใต้สถานการณ์เหล่านี้โดยเฉพาะไม่ว่าเขาจะไม่เขาจะมักจะผิด
อะมีบาพูดว่า Reinstate Monica

2
ฉันไม่คิดว่าฉันเป็น ประเด็นที่ใหญ่กว่าของฉันคือมันไม่ยุติธรรมและไม่สอดคล้องกันที่จะตำหนิขั้นตอนของผู้ปฏิบัติงานประจำสำหรับความทุกข์ทรมานจากการทดสอบตามลำดับและปกป้องขั้นตอนของเบย์โดยไม่ได้รับผลกระทบใด ๆ ประเด็นของฉัน (ซึ่งเป็นข้อเท็จจริงทางคณิตศาสตร์) คือสิ่งที่พวกเขาทั้งสองได้รับผลกระทบในลักษณะเดียวกันหมายความว่าการทดสอบตามลำดับสามารถเพิ่มความผิดพลาดแบบเบย์แบบที่ 1 ได้ถึง 100% แน่นอนถ้าคุณพูดว่าคุณเป็นคนที่ไม่สนใจอัตราความผิดพลาดประเภทที่ 1 คุณก็ไม่เกี่ยวข้อง แต่แล้วขั้นตอนบ่อย ๆ ก็ไม่ควรถูกตำหนิในเรื่องนั้น
อะมีบาพูดว่า Reinstate Monica

3

nx1θ=θ0tαcnx2(x1,x2)K

ดูเหมือนว่าปัญหานี้จะได้รับการแก้ไขโดยP. Armitage, CK McPherson และ BC Rowe (1969), วารสารสมาคมสถิติแห่ง Royal ซีรีส์ (132), 2, 235-244: "การทดสอบความสำคัญอีกครั้งในการสะสมข้อมูล"

มุมมองแบบเบย์เกี่ยวกับปัญหานี้ซึ่งได้กล่าวถึงในที่นี้ก็คือการหารือในBerger and Wolpert (1988), "หลักการความน่าจะเป็น" , มาตรา 4.2

K>1α

K

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

ขนาดเป็นฟังก์ชันของการเพิ่มค่าวิกฤตสำหรับแตกต่างกันK

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

K

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

reps <- 50000

K <- c(1:5, seq(10,50,5), seq(60,100,10)) # the number of attempts a researcher gives herself
alpha <- 0.05
cv <- qnorm(1-alpha/2)

grid.scale.cv <- cv*seq(1,1.5,by=.01) # scaled critical values over which we check rejection rates
max.g <- length(grid.scale.cv)
results <- matrix(NA, nrow = length(K), ncol=max.g)

for (kk in 1:length(K)){
  g <- 1
  dev <- 0
  K.act <- K[kk]
  while (dev > -0.01 & g <= max.g){
    rej <- rep(NA,reps)
    for (i in 1:reps){
      k <- 1
      accept <- 1
      x <- rnorm(K.act)
      while(k <= K.act & accept==1){
        # each of our test statistics for "samples" of size n are N(0,1) under H0, so just scaling their sum by sqrt(k) gives another N(0,1) test statistic
        rej[i] <- abs(1/sqrt(k)*sum(x[1:k])) > grid.scale.cv[g] 
        accept <- accept - rej[i]
        k <- k+1
      }
    }
    rej.rate <- mean(rej)
    dev <- rej.rate-alpha
    results[kk,g] <- rej.rate
    g <- g+1
  }
}
plot(K,results[,1], type="l")
matplot(grid.scale.cv,t(results), type="l")
abline(h=0.05)

cv.a <- data.frame(K,adjusted.cv=grid.scale.cv[apply(abs(results-alpha),1,which.min)])
plot(K,cv.a$adjusted.cv, type="l")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.