У меня возникла проблема с функцией, которую я сделал в R (я начинающий с этим языком).Это функция для удаления выбросов в наборе данных:
removalOutlier <- function(data){
q1 <- 0
q2 <- 0
q3 <- 0
for(j in 1:(ncol(data)-1)){
m <- length(data[,j])
J<-0
data<-data[order(data[,j]),]
data<-as.matrix(data)
print(data)
q2 <- median(data[,j])
if((m %% 2) != 0){
q1 <- median(data[1:(((m+1)/2)-1),j]) #m dispari
q3 <- median(data[(((m+1)/2)+1):m,j])
} else {
q1 <- median(data[1:(m/2),j]) #m pari
q3 <- median(data[(m+2)/2:m,j])
}
iqr = q3-q1
for(k in 1:(length(data[,j]))){
print(data[k,j])
if((data[k,j] > (q3+(1.5*iqr))) | (data[k,j] < (q1-(1.5*iqr))))
{
J[k]<-k
data <- as.matrix(data)
}
else
{J[k]<-0}
}
data <- as.data.frame(data)
for(z in 1:length(J)){
if(J[z]!=0){
data<-data.frame(data[-J[z],])
}
}
print (data)
}
data
}
Это упорядоченный вывод, связанный с первым столбцом набора данных.Разделив первый столбец набора данных на квартили, я нашел: Q1-1,5 * IQR = 117 и Q3 + 1,5 * IQR = 3609.Поскольку у меня есть эти результаты, функция должна удалить три последние выборки из следующего списка:
V1 V2 V3
45 852 2 179900
32 1000 1 169900
26 1100 3 249900
44 1200 3 299000
47 1203 3 239500
18 1236 3 199900
37 1239 3 229900
15 1268 3 259900
17 1320 2 299900
9 1380 3 212000
4 1416 2 232000
8 1427 3 198999
36 1437 3 249900
27 1458 3 464500
10 1494 3 242500
7 1534 3 314900
2 1600 3 329900
23 1604 3 242900
41 1664 2 368500
21 1767 3 252900
35 1811 4 285900
31 1839 2 349900
46 1852 4 299900
22 1888 2 255000
13 1890 3 329999
11 1940 4 239999
24 1962 4 259900
6 1985 4 299900
12 2000 3 347000
33 2040 4 314900
1 2104 3 399900
38 2132 4 345000
40 2162 4 287000
29 2200 3 475000
42 2238 3 329900
16 2300 4 449900
3 2400 3 369000
28 2526 3 469000
43 2567 4 314000
19 2609 4 499998
30 2637 3 299900
5 3000 4 539900
20 3031 4 599000
34 3137 3 579900
25 3890 3 573900
14 4478 5 699900
39 4515 4 549000
, но удаляет:
25 3890 3 573900
39 4515 4 549000
, а не:
14 4478 5 699900
Я не понимаю, почему.Когда я прохожу, чтобы проверить наличие выбросов во втором столбце, я нахожу их и удаляю их без проблем.