2017-08-07 81 views
0

爲什麼在底部的while循環中我需要放入整個s變量而不是隻輸入s i。即爲什麼要在循環中所示的N元需要爲什麼n變量需要直接在while循環中

rm(list=ls()) 

nm <- c(585,578,568) 
nf <- c(632,510,589) 
ym <- c(543,522,510) 
yf <- c(560,466,536) 
y.barm <- ym/nm 
y.barf <- yf/nf 

#a) 
s <- sqrt(y.barm[2]*(1-y.barm[2])/nm[2] + y.barm[3]*(1-y.barm[3])/nm[3]) 
y.barm[2]-y.barm[3]+qnorm(0.005)*s 
y.barm[2]-y.barm[3]-qnorm(0.005)*s 
#Så konfindensintervallet er givet ved (-0.04,0.05) 

#b) 
s2 <- sqrt(y.barm[2]*(1-y.barm[2])/nm[2] + y.barf[2]*(1-y.barf[2])/nm[2]) 
y.barm[2]-y.barf[2]+qnorm(0.005)*s2 
y.barm[2]-y.barf[2]-qnorm(0.005)*s2 
#Så konfindensintervallet er (-0.054,0.033) 

#Opg. 8.107 
p2 <- ym[2]/nm[2] 
p3 <- ym[3]/nm[2] 
n <- 522 
s <- sqrt((p2*(1-p2) + p3*(1-p3))/n) 
x <- -qnorm(0.025)*s #(0.015 på hver side. Derfor skal der ikke ganges med 2) 

while(x > 0.031){ 
n <- n + 1 
x <- -qnorm(0.025)*sqrt((p2*(1-p2) + p3*(1-p3))/n) #DOESN'T WORK WHEN I TYPE IN THE s VARIABLE. I NEED TO WRITE OUT THE WHOLE THING. HOW COME?? 
} 

n 
+2

它爲我工作',而(X> 0.031){ ñ< - N的+ 1 x < - -qnorm(0.025)* s }' –

+0

這不應該發生,因爲在循環之前和之外聲明的變量[應該可用於循環內部](http://rextester.com/ZLGXZ47343)。請給我們一個可重複的例子。 –

+0

他已經舉了一個例子 –

回答

1

s是保持你開始在while循環改變之前n它賦值爲一個固定值。要獲得一個動態值,你應該使用一個函數來獲取標準錯誤,並使用你的循環中,像這樣的組合

s_fun <- function(p1, p2, p3, n){ 
    sqrt((p2*(1-p2) + p3*(1-p3))/n) 
} 


while(x > 0.031){ 
    n <- n + 1 
    x <- -qnorm(0.025) * s_fun(p1, p2, p3, n) 
}