Удаление результатов теста Bonferroni Outlier в цикле
Я смоделировал свои данные с помощью линейной регрессии. Я хочу несколько раз запустить тест на выброс Бонферрони и удалить соответствующие записи из моих данных. Моя проблема: я не могу извлечь идентификатор из outlierResult. Вот воспроизводимый код. Я хочу написать цикл while в соответствии с псевдокодом. Я код в R.
# URL <- "http://www.math.uah.edu/stat/data/Galton.csv"
# download.file(URL, destfile = "./galton.csv", method="curl")
galton <-read.csv("galton.csv")
attach(galton)
dim(galton)
head(galton)
##creating outliers
set.seed(1)
random_index <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
print(random_index)
galton[random_index,"Height"] = galton[random_index,"Height"] +100
set.seed(2)
random_index2 <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
galton[random_index2,"Height"] = galton[random_index2,"Height"] +75
set.seed(3)
random_index3 <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
galton[random_index3,"Height"] = galton[random_index3,"Height"] +50
linear_reg <- lm(Height~Father+Mother,data=galton)
require(car, quietly=TRUE)
outlierResult <-outlierTest(linear_reg)
outlierResult
# the pseudocode
# while outlierResult is not empty
# remove the corresponding records
# linear_reg <- lm(Height~Father+Mother,data=galton)
# outlierResult <-outlierTest(linear_reg)
1 ответ
Пожалуйста, смотрите ниже. Хитрость заключается в том, чтобы отметить, что результат выброса дает имена строк, если я правильно их читаю.
library(car, quietly=TRUE)
galton <-read.csv("http://www.math.uah.edu/stat/data/Galton.csv")
attach(galton)
dim(galton)
head(galton)
##creating outliers
set.seed(1)
random_index <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
print(random_index)
galton[random_index,"Height"] = galton[random_index,"Height"] +100
set.seed(2)
random_index2 <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
galton[random_index2,"Height"] = galton[random_index2,"Height"] +75
set.seed(3)
random_index3 <- sample(1:nrow(galton), size = 5, replace = FALSE, prob = NULL)
galton[random_index3,"Height"] = galton[random_index3,"Height"] +50
currentData <- galton
linear_reg <- lm(Height~Father+Mother,data=currentData)
outlierResult <-outlierTest(linear_reg)
outlierResult
while(length(outlierResult)!=0){
exclusionRows <-names(outlierResult[[1]])
inclusionRows <- !(rownames(currentData) %in% exclusionRows)
currentData <- currentData[inclusionRows,]
linear_reg <- lm(Height~Father+Mother,data=currentData)
outlierResult <-outlierTest(linear_reg)
}