Обновление2
Второй set.seed(i)
должен быть заменен на set.seed(i+1)
или любой другой новый случайный ряд. Если нет, то s3 <- sum(data$gene == 0 & data$cancer == 1)
всегда будет 0
, так как число меньше 0.08
будет меньше 0.39
.
Я не исправил свой исходный код вопроса, потому что этот вопрос не связан к основному вопросу этого поста.
Обновление
set.seed(i)
добавляется дважды, поскольку существует два поколения случайных чисел, то есть random1
и random2
. Тем не менее, результаты среди операций все еще изменчивы, что странно.
Справочная информация:
приведенные ниже коды примерно равны шансы крысы ios. Но точка фокусировки здесь не статистическая c. Вместо этого я обнаружил, что результаты изменились (!) Среди некоторых операций, которые на самом деле одинаковы (я полагаю, что на самом деле это не так, но я не могу это выяснить).
Код:
gene <- vector(length = 500, mode = "integer")
cancer <- vector(length = 500, mode = "integer")
data <- data.frame(gene, cancer)
odd_withMutate <- vector(length = 20, mode = "numeric")
odd_noMutate <- vector(length = 20, mode = "numeric")
result <- data.frame(odd_withMutate, odd_noMutate)
for (i in 1:20) {
# set.seed(12)
# set.seed(16)
set.seed(i)
random1 <- runif(500, min = 0, max = 1)
# set.seed(12)
# set.seed(16)
set.seed(i) # add this instruction
random2 <- runif(500, min = 0, max = 1)
for (j in 1:500) {
if (random1[j] < 0.39){
data[j,1] <- 1
}
if (random2[j] < 0.08){
data[j,2] <- 1
}
}
s1 <- sum(data$gene == 1 & data$cancer == 1) # has the mutated gene & has cancer
s2 <- sum(data$gene == 1 & data$cancer == 0)
s3 <- sum(data$gene == 0 & data$cancer == 1)
s4 <- sum(data$gene == 0 & data$cancer == 0)
result[i,]$odd_withMutate <- s1/s2
result[i,]$odd_noMutate <- s3/s4
}
Различные операции:
Операция № 1:
Если запустить код, указанный выше, 12-я строка odd_noMutate
in result
будет 0
, 16-е будет NaN
. Затем я попытался увидеть, что произошло, поэтому я использую set.seed(12)
или set.seed(16)
для проверки (Операции № 2 и № 3). Но 0
и NaN
исчезли! Я имею в виду, что в операции № 2 0.1638418 0
не 1.5075377 0
. В операции № 3 0.2830189 0
не является 2.4013605 NaN
.
операцией № 2:
измененная часть кода:
set.seed(12) #odd_noMutate = 0
# set.seed(16) #odd_noMutate = NaN
# set.seed(i)
random1 <- runif(500, min = 0, max = 1)
set.seed(12)
# set.seed(16)
# set.seed(i) # add this instruction
random2 <- runif(500, min = 0, max = 1)
операция № 3:
# set.seed(12) #odd_noMutate = 0
set.seed(16) #odd_noMutate = NaN
# set.seed(i)
random1 <- runif(500, min = 0, max = 1)
# set.seed(12)
set.seed(16)
# set.seed(i) # add this instruction
Операция № 4:
Я обнаружил, что даже изменение i
в моем коде приведет к совершенно другим результатам (не должно ли это быть подмножество исходного результата?) , Это операция № 4. В частности, 0.3092105 0
не является 1.5075377 0
; 0.7562724 0
не 2.4013605 NaN
.
for (i in 10:20) {
# set.seed(12) #odd_noMutate = 0
# set.seed(16) #odd_noMutate = NaN
set.seed(i)
random1 <- runif(500, min = 0, max = 1)
# set.seed(12)
# set.seed(16)
set.seed(i) # add this instruction
random2 <- runif(500, min = 0, max = 1)
Результаты этих операций показаны ниже: