外れ値を見つけて、外れ値の種類を示す特別な記号と一緒にユーザーに出力するメソッドを作成しています。外れ値は、エンジニアの方法またはテューキーの方法の 2 つの方法で計算できます。この関数は 2 つのパラメーターを取ります。1 列の乱数を含むデータ フレームと、外れ値の計算に使用する方法を決定するオプション値です。この関数は、外れ値の値とそのタイプをシンボル (o または *) として表す 2 つの列を持つデータ フレームを返します。
関数を呼び出して、エンジニアの方法を使用して外れ値を計算するように依頼すると、完全に機能します。ただし、Tukey の方法を使用すると、次のエラーが生成されます (0 列と 0 行のデータ フレーム)
以下は私のコードです:
findOutliers<- function(numbers,option){
outlierM=c()
outlierE=c()
outlier=c()
typeM=c()
typeE=c()
type=c()
length=nrow(numbers)
print(numbers)
if(option=="eng"){
print("Engineer Methods")
numbersmean= as.numeric(sapply(numbers,mean))
numbersd= as.numeric(sapply(numbers,sd))
for(i in 1:length){
zscore= as.numeric((i-numbersmean)/numbersd)
if(zscore>2 & zscore<3){
#cat(zscore," ", "O","\n")
outlierM =c(outlierM,zscore)
typeM=c(typeM, "O")
}#end of if statment
else if(zscore>3){
#cat(zscore," ", "*", "\n")
outlierE =c(outlierE,zscore)
typeE=c(typeE, "*")
}#end of if statment
}#end of for loop
}#end of if statment
else if(option=="tukey"){
print("Tuckey's Methods")
sortedNumbers=numbers[order(numbers$Numbers), ]
IQR=IQR(sortedNumbers)
Q1=as.numeric(quantile(sortedNumbers,0.25))
Q3=as.numeric(quantile(sortedNumbers,0.75))
rangeM1=Q1 - (1.5 * IQR)
rangeM2=Q3 + (1.5 * IQR)
rangeE1=Q1 - (3 * IQR)
rangeE2=Q3 + (3 * IQR)
for(i in 1:length){
if(numbers[i,]<rangeM1|numbers[i,]>rangeM2){
outlierM=c(outlierM,numbers[i])
typeM=c(typeM, "O")
}#end of if statment
else if(numbers[i,]<rangeE1|numbers[i,]>rangeE2){
outlierE=c(outlierE, numbers[i])
typeE=c(typeE, "*")}
}# end of for loop
}#end of if statment
outlier= c(outlierM,outlierE)
type=c(typeM,typeE)
founOtliers<- data.frame(Outliers=outlier,Type=type)
return(founOtliers)
}#end of function
normalnumbers=rnorm(10)
randomNumbers<- data.frame(Numbers=normalnumbers)
findOutliers(randomNumbers,"eng")
findOutliers(randomNumbers,"tukey")