#r
#r
Вопрос:
Я использую R для своего проекта, но приведенный ниже код не работает…
sample_size_function <- function(d) {
if (0.82 d >=1 ) {
function_p_1 <- 1
} else {
function_p_1 <- 0.82 d
}
if (0.82 - d <= 0) {
function_p_2 <- 0
} else {
function_p_2 <- 0.82 - d
}
sequence_p_1 <- seq(from = function_p_1, to = 1, by = 0.0001)
sequence_p_2 <- seq(from = function_p_2, to = 0, by = -0.0001)
c_power_matrix_1 <- matrix(0, nrow = 10000-52, ncol =
length(sequence_p_1))
c_power_matrix_2 <- matrix(0, nrow = 10000-52, ncol =
length(sequence_p_2))
for (i in 53:10000) {
c_cr_left <- qbinom(0.025, i, 0.82)
c_cr_right <- qbinom(0.975, i, 0.82)
for (j in 1:length(sequence_p_1)) {
c_power_matrix_1[i-52, j] <- pbinom(c_cr_left-1, i, sequence_p_1[j])
(1-pbinom(c_cr_right, i, sequence_p_1[j]))
}
if (all(c_power_matrix_1[i-52, ]) > 0.7) {
c_sample_size_1 <- i
break
}
}
for (n in 53:10000) {
c_cr_left <- qbinom(0.025, i, 0.82)
c_cr_right <- qbinom(0.975, i, 0.82)
for (k in 1:length(sequence_p_2)) {
c_power_matrix_2[n-52, k] <- pbinom(c_cr_left-1, n, sequence_p_2[j]) (1-pbinom(c_cr_right, n, sequence_p_2[k]))
}
if (all(c_power_matrix_2[n-52, ] > 0.7)) {
c_sample_size_2 <- n
break
}
}
result <- max(c_sample_size_1, c_sample_size_2)
return(result)
}
когда я запускаю этот код, я получаю несколько предупреждений, и он не дает ответа, который я ожидал.
Для d=0.1,
> sample_size_function(0.1)
[1] 53
Warning message:
In all(c_power_matrix_1[i - 52, ]) :
coercing argument of type 'double' to logical
Но я ожидал, что это даст
[1]111
поскольку приведенное ниже значение дает 111, что должно быть тем же результатом, когда я ставлю d = 0.1
true_p_1 <- seq(from = 0.92, to = 1, by = 0.0001)
true_p_2 <- seq(from = 0.72, to = 0, by = -0.0001)
power_matrix_1 <- matrix(0, nrow = 10000-52, ncol = length(true_p_1))
power_matrix_2 <- matrix(0, nrow = 10000-52, ncol = length(true_p_2))
for (i in 53:10000) {
cr_left <- qbinom(0.025, i, 0.82)
cr_right <- qbinom(0.975, i, 0.82)
for (j in 1:length(true_p_1)) {
power_matrix_1[i-52, j] <- pbinom(cr_left-1, i, true_p_1[j]) (1-
pbinom(cr_right, i, true_p_1[j]))
}
if (all(power_matrix_1[i-52, ] > 0.7)) {
sample_size_b_1 <- i
break
}
}
for (n in 53:10000) {
cr_left <- qbinom(0.025, n, 0.82)
cr_right <- qbinom(0.975, n, 0.82)
for (k in 1:length(true_p_2)) {
power_matrix_2[n-52, k] <- pbinom(cr_left-1, n, true_p_2[k]) (1-
pbinom(cr_right, n, true_p_2[k]))
}
if (all(power_matrix_2[n-52, ] > 0.7)) {
sample_size_b_2 <- n
break
}
}
max(sample_size_b_1, sample_size_b_2)
Приведенное выше дает
[1]111
Я новичок в R и я не знаю, почему моя функция не работает… Помогите мне, пожалуйста!! Спасибо!
Ответ №1:
Я думаю, вы просто неуместно размещаете parathensis в своем 3-м if
. измените его следующим образом
if (all(c_power_matrix_1[i-52, ] > 0.7)) {
c_sample_size_1 <- i
break
}