(я редактирую свой вопрос, чтобы сделать его воспроизводимым). Я имею в виду, что у меня есть функция, которая выполняет множество операций, чтобы найти среднее значение, матрицу отклонений, значения выборки T2 и контрольные пределы из набора данных, скажем, my_data. Теперь мне нужно сравнить значения T2 с контрольными пределами, и если любое из значений T2 превышает контрольные пределы, я хочу удалить всю выборку (представленную в виде строки в моем основном наборе данных) из моего набора данных и повторно выполнять мои операции с оставшимися образцами (поэтому я получаю новый набор данных), пока значение T2 не превысит пределы. Мне нужно сохранить матрицу среднего и дисперсии, чтобы я использовал << - в своей функции для них. Я использовал некоторое время l oop (предложенный @ r2evans) в своем коде, но, поскольку я очень новичок в кодировании, мой код не останавливается с тех пор. Вот весь мой код ниже: (Я поставил все это для пояснения) </p>
## Implementation of the T2 C.C and EWMA-R c.c for the "On-line monitoring" article
## Creating a sample set of data for my online article; representing width as x_points and speed as y_points
width1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
width2 <- c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
width3 <- c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3)
corr_speed1 <- c(0.33, 0.37, 0.54, 0.52, 0.66, 0.64, 0.45, 0.66, 0.56, 0.33)
corr_speed2 <- c(0.47, 0.62, 0.57, 0.45, 0.53, 0.4, 0.49, 0.43, 0.38, 0.52)
corr_speed3 <- c(0.5, 0.37, 0.39, 0.72, 0.33, 0.54, 0.43, 0.35, 0.55, 0.41)
sample_boat <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
my_data <- data.frame(sample_boat, width1, width2, width3, corr_speed1, corr_speed2, corr_speed3)
T2_article_chart <- function(m){
while(nrow(m)>0){
x_data <- m[2:4]
y_data <- m[5:7]
mean_x_data <- mean(apply(x_data, MARGIN=1, mean))
mean_y_data <- apply(y_data, MARGIN=1, mean)
autocorr_x <- mean(apply(x_data, MARGIN=1, var)*(length(x_data)-1))
## Finding estimates as per sample sizes
diff_x <- x_data-mean_x_data
mult_yx <- y_data*diff_x
a1_m <- apply(mult_yx, MARGIN=1, sum)/autocorr_x
a0_m <- mean_y_data -a1_m*mean_x_data
resi_m <- y_data-a0_m-a1_m*x_data
square_resi <- resi_m^2
app_func_resi <- apply(square_resi, MARGIN=1, sum)
MSE_m <- app_func_resi/(length(x_data)-2)
MSE_all <- sum(MSE_m)/length(MSE_m)
var_a0_m <- MSE_all^2*(1/length(x_data)+mean_x_data^2*(1/autocorr_x))
var_a1_m <- MSE_all^2*(1/autocorr_x)
cov_a1_a0_m <- -(MSE_all^2*mean_x_data*(1/autocorr_x))
cov_a1_a0_m <- mean(cov_a1_a0_m)
## For all the samples j=1,2,...,k
# First we need to define the number of samples we have (represented by the number of MFC in our article)
k <- length(a0_m)
a0 <- sum(a0_m)/length(a0_m)
a1 <- sum(a1_m)/length(a1_m)
var_a0 <- var_a0_m/length(var_a0_m)
var_a1 <- var_a1_m/length(var_a1_m)
## We should now define the expected value and the var-cov matrix for each
# sample and find the sample statistic for our Tsquare control chart
# when expected mean and cov_var matrix are unknown for Phase I
z_m <- data.frame(a0_m, a1_m)
expected_value_U <<- c(a0, a1)
var_cov_matrix <<- matrix(c(var_a0, cov_a1_a0_m, cov_a1_a0_m, var_a1), nrow=2, ncol=2, byrow=TRUE)
#T2_m <- (z_m-expected_value_U)%*%solve(var_cov_matrix)%*%t(z_m-expected_value_U)*(k/(k-1))
subs_id1 <- vector()
subs_id2 <- vector()
for(i in 1:nrow(z_m)){
subs_id1[i] <- z_m$a0_m[i]-expected_value_U[1]
subs_id2[i] <- z_m$a1_m[i]-expected_value_U[2]
}
samp_mean_diffs <- data.frame(subs_id1,subs_id2)
T2_samples <- vector()
for(i in 1:nrow(samp_mean_diffs)){
T2_samples[i] <- as.matrix(samp_mean_diffs[i,])%*%solve(var_cov_matrix)%*%t(as.matrix(samp_mean_diffs[i,]))
}
T2_samples <- cbind(T2_samples)
# Control limits for T2 control chart
upper_control_limit_t2 <- 2*qf(0.95,2,(length(x_data)-2)*k)
for(i in 1:nrow(T2_samples)){
if(T2_samples[i]>upper_control_limit_t2){
m <- m[-c(i),]
repeat{T2_article_chart(m)}
break
}
}
}
}
T2_article_chart(my_data)