Boxplot: Matlab отображает различную графику в отношении R? - PullRequest
3 голосов
/ 19 марта 2019

Я построил простые данные матрица

39  135 249 1   91  8   28  0   0   74  17  65  560
69  0   290 26  254 88  31  0   18  53  4   63  625
66  186 344 0   9   0   0   0   18  54  0   74  554
80  41  393 0   0   0   2   0   6   51  0   65  660
271 112 511 1   0   274 0   0   0   0   16  48  601
88  194 312 0   110 0   0   0   44  13  2   76  624
198 147 367 0   15  0   0   3   9   44  3   39  590

, используя стандартную коробочную диаграмму (т. Е. Где усы расширяются в 1,5 раза по IRQ от Q1 и Q3).Каждый столбец - это переменная, каждая строка - наблюдение.

Тем не менее я получил две разные графики, используя R (RStudio 1.0.44) и Matlab2018.В частности, усы расширяются по-другому.

В Matlab я использую следующий код:

% clearing workspace
clear all;
close all;
clc;

%entering in current directory where I find the txt data file 
tmp = matlab.desktop.editor.getActive;
cd(fileparts(tmp.Filename));
clear tmp;

%reading data
df = readtable('pippo.txt', 'Delimiter', '\t', 'ReadVariableNames',false);
df = table2array(df)

figure(1);
boxplot(df(:, 1:end-1), 'Whisker', 1.5);
ylim([0 600]);

, который выдает следующий график: enter image description here

В R я использую следующий код:

rm(list = ls())

# getting the current directory
working_dir <-dirname(rstudioapi::getActiveDocumentContext()$path)

# setting the working directory where I finf the txt file with data
setwd(working_dir)

df <- read.table("pippo.txt")
jpeg('r_boxplot.jpg')
boxplot(df[,1:12], las=2, ylim=c(0,600), range=1.5)
dev.off()

, который выдает следующий график:

enter image description here

Замечание 1: если я опускаю параметры «усы» и «диапазон» в обоих сценариях, я получаю одинаковую графику;ожидается, что 1,5, кажется, является значением вискера по умолчанию.

Замечание 2: и matlab, и R, похоже, правильно считывают данные, я имею в виду, что оба рабочих пространства визуализируют одну и ту же матрицу

ЧтоЯ скучаю?Какому графику мне доверять?

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

объяснение для кода коробочного графика R

код MATLAB для коробочных диаграмм

Итак, пройдя обе функции, я обнаружил, что они обе выглядят как вычисляющиеТочно то же самое, вплоть до того, как они определяют IQR

R, заявляет, что делает следующее для бокса

upper whisker = min(max(x), Q_3 + 1.5 * IQR)
lower whisker = max(min(x), Q_1 – 1.5 * IQR)
where IQR = Q_3 – Q_1, the box length.

MATLAB утверждает, что делает это для своего бокса

p75 + w(p75 – p25) 
p25 – w(p75 – p25)
where p25 and p75 are the 25th and 75th percentiles, respectively.

Даже то, как они определяют расширение усов, совпадает с заявлением Матлаба

%   The plotted whisker extends to the adjacent value, which is the most 
%   extreme data value that is not an outlier. Set whisker to 0 to give 
%   no whiskers and to make every point outside of p25 and p75 an outlier.

И состояния R

Range determines how far the plot whiskers extend out from the box. If range is 
positive, the whiskers extend to the most extreme data point which is no more than 
range times the interquartile range from the box. A value of zero causes the whiskers 
to extend to the data extremes.

Лично я чувствую, что это связано с некоторыми основнымиспособ вычисления. Редактировать После игры с кодом я могу подтвердить, что он имеет все, что связано с базовыми вычислениями.

R код

quantile(a,c(.25, .75))
25% 75% 
301 380 
> 380+1.5*(380-301)
[1] 498.5
> 301-1.5*(380-301)
[1] 182.5

Код Matlab

prctile(te,[25,75])
ans =

  295.5000  386.5000

W75 = p75 + 1.5*(p75-p25)
W25 = p25 - 1.5*(p75-p25)

W75 =

   523


W25 =

   159

Я использовал 3-й столбец ваших данных, чтобы проверить и посмотреть, как рассчитываются квантили.Как вы можете видеть, 25% и 75% не очень различаются, но достаточно различаются, чтобы привести к большим отсечкам в коде matlab.

1 голос
/ 19 марта 2019

Из документации MATLAB boxplot :

На каждом блоке центральная метка обозначает медиану, а нижний и верхний края блока указывают 25-й и75 процентиль соответственно. Усы распространяются на самые экстремальные точки данных, которые не считаются выбросами , а выбросы отображаются индивидуально с использованием символа '+'.

Вы, вероятно, хотите проверить вычисление выбросов.

Под необязательным входом 'Whisker' (по умолчанию 1.5) вы можете увидеть это объяснение:

boxplot рисует точки как выбросы, если они больше q3 + w × (q3 – q1) илименьше чем q1 – w × (q3 – q1), где w - максимальная длина усов, а q1 и q3 - 25-й и 75-й процентили данных выборки соответственно.

Если вы установите'Whisker' Опция 0.7, вы получите тот же график, что и в коде R:

boxplot(df(:, 1:end-1), 'Whisker', 0.7);

boxplot

Эквивалентный ввод для Rboxplot равно range ( документы ):

Диапазон: это определяет, насколько далеко усики сюжета простираются от коробки.Если диапазон положительный, усы распространяются на самую крайнюю точку данных, которая не превышает диапазон, превышающий межквартильный диапазон от поля .Нулевое значение заставляет усы распространяться на крайние значения данных.

Похоже, что это то же самое определение, как показано выше в документации MATLAB - пожалуйста, обратитесь к Ответ Ходжо длячуть более подробно о вычислении IQR.

...