Что если мои данные линейной регрессии содержат несколько смешанных линейных отношений?


34

Допустим, я изучаю, как нарциссы реагируют на различные почвенные условия. Я собрал данные о pH почвы в зависимости от зрелой высоты нарцисса. Я ожидаю линейных отношений, поэтому я продолжаю выполнять линейную регрессию.

Однако, когда я начал свое исследование, я не осознавал, что популяция на самом деле содержит две разновидности нарцисса, каждый из которых очень по-разному реагирует на рН почвы. Таким образом, график содержит две различные линейные зависимости:

pH почвы в зависимости от высоты цветка (см)

Конечно, я могу посмотреть на это и отделить вручную. Но мне интересно, если есть более строгий подход.

Вопросов:

  1. Существует ли статистический тест для определения того, будет ли набор данных лучше подходить по одной строке или по N строк?

  2. Как бы я запустить линейную регрессию, чтобы соответствовать N строк? Другими словами, как мне распутать смешанные данные?

Я могу думать о некоторых комбинаторных подходах, но они кажутся вычислительно дорогими.


Разъяснения:

  1. Существование двух разновидностей было неизвестно во время сбора данных. Разнообразие каждого нарцисса не наблюдалось, не отмечалось и не регистрировалось.

  2. Невозможно восстановить эту информацию. Нарциссы умерли со времени сбора данных.

У меня сложилось впечатление, что эта проблема чем-то похожа на применение алгоритмов кластеризации, поскольку вам почти необходимо знать количество кластеров перед началом работы. Я считаю, что при ЛЮБОМ наборе данных увеличение числа строк уменьшит общую среднеквадратичную ошибку. В крайнем случае, вы можете разделить ваш набор данных на произвольные пары и просто провести линию через каждую пару. (Например, если бы у вас было 1000 точек данных, вы могли бы разделить их на 500 произвольных пар и провести линию через каждую пару.) Подгонка была бы точной, а среднеквадратичная ошибка была бы точно нулевой. Но это не то, что мы хотим. Мы хотим «правильное» количество строк.



3
ты знаешь, какой нарцисс какой сорт? Если это так, то вы можете просто включить эту информацию в свою модель
rep_ho

1
Это кажется классическим случаем статистического взаимодействия, как в ответе @Demetri Pananos.
rolando2

2
У меня такое ощущение, что у них нет информации о том, какого сорта был цветок в их данных. Я согласен, что если бы они имели это, то это было бы просто случаем построения модели взаимодействия или даже просто запуска отдельных регрессий для каждого сорта. Однако, если у них нет этой информации, не вся надежда потеряна. Можно построить модель, которая оценивает не только отдельные линии, но и предсказывает вероятности того, что каждое наблюдение принадлежит какой-либо группе.
Дейсон

1
@DemetriPananos Я дал ответ, который, надеюсь, имеет смысл. В зависимости от того, что они хотят сделать, это немного больше работы. Чтобы провести какое-то тестирование, вам нужно выполнить тест отношения правдоподобия или сделать какой-нибудь тест рандомизации или что-то в этом роде. Но они не дали нам слишком много информации, и если цель состоит в том, чтобы разместить линии, и у них нет меток, то это не так уж плохо, используя пакет mixtools.
Дейсон

Ответы:


31

Я думаю, что ответ Деметрия будет отличным, если мы предположим, что у вас есть ярлыки для разных сортов. Когда я прочитал твой вопрос, мне это показалось не так. Мы можем использовать подход, основанный на алгоритме EM, чтобы в основном соответствовать модели, которую предлагает Деметрий, но не зная меток для разнообразия. К счастью, пакет mixtools в R предоставляет нам эту функциональность. Поскольку ваши данные довольно разделены, и у вас, кажется, их немного, они должны быть довольно успешными.

library(mixtools)

# Generate some fake data that looks kind of like yours
n1 <- 150
ph1 = runif(n1, 5.1, 7.8)
y1 <- 41.55 + 5.185*ph1 + rnorm(n1, 0, .25)

n2 <- 150
ph2 <- runif(n2, 5.3, 8)
y2 <- 65.14 + 1.48148*ph2 + rnorm(n2, 0, 0.25)

# There are definitely better ways to do all of this but oh well
dat <- data.frame(ph = c(ph1, ph2), 
                  y = c(y1, y2), 
                  group = rep(c(1,2), times = c(n1, n2)))

# Looks about right
plot(dat$ph, dat$y)

# Fit the regression. One line for each component. This defaults
# to assuming there are two underlying groups/components in the data
out <- regmixEM(y = dat$y, x = dat$ph, addintercept = T)

Мы можем изучить результаты

> summary(out)
summary of regmixEM object:
          comp 1    comp 2
lambda  0.497393  0.502607
sigma   0.248649  0.231388
beta1  64.655578 41.514342
beta2   1.557906  5.190076
loglik at estimate:  -182.4186 

Таким образом, он подходит для двух регрессий, и, по его оценкам, 49,7% наблюдений попали в регрессию для компонента 1, а 50,2% - в регрессию для компонента 2. Как я смоделировал данные, это было разделение на 50-50, так что это хорошо.

«Истинные» значения, которые я использовал для симуляции, должны давать строки:

y = 41,55 + 5,185 * ph и y = 65,14 + 1,41848 * ph

(который я оценил «от руки» по вашему графику, чтобы данные, которые я создаю, были похожи на ваши) и строки, которые EM-алгоритм дал в этом случае, были:

y = 41,514 + 5,19 * ph и y = 64,655 + 1,55 * ph

Довольно чертовски близко к фактическим значениям.

Мы можем построить подгонянные линии вместе с данными

plot(dat$ph, dat$y, xlab = "Soil Ph", ylab = "Flower Height (cm)")
abline(out$beta[,1], col = "blue") # plot the first fitted line
abline(out$beta[,2], col = "red") # plot the second fitted line

Установленные линии через EM


21

РЕДАКТИРОВАТЬ: я первоначально думал, что ОП знал, какие наблюдения пришли от каких видов. Редактирование ОП дает понять, что мой оригинальный подход неосуществим. Я оставлю это для потомков, но другой ответ намного лучше. В качестве утешения я написал кодовую модель в Стэне. Я не говорю, что байесовский подход особенно хорош в этом случае, но я могу внести свой вклад в это.

Код Стэн

data{

  //Number of data points
  int N; 

  real y[N];
  real x[N];
}
parameters{
  //mixing parameter
  real<lower=0, upper =1>  theta;

  //Regression intercepts
  real beta_0[2];

  //Regression slopes.
  ordered[2] beta_1;

  //Regression noise
  real<lower=0> sigma[2];
}
model{

  //priors
  theta ~ beta(5,5);
  beta_0 ~ normal(0,1);
  beta_1 ~ normal(0,1);
  sigma ~ cauchy(0,2.5);

  //mixture likelihood
  for (n in 1:N){
    target+=log_mix(theta,
                     normal_lpdf(y[n] | beta_0[1] + beta_1[1]*x[n], sigma[1]),
                     normal_lpdf(y[n] | beta_0[2] + beta_1[2]*x[n], sigma[2]));
  }
}
generated quantities {
  //posterior predictive distribution
  //will allow us to see what points belong are assigned
  //to which mixture 
  matrix[N,2] p;
  matrix[N,2] ps;
  for (n in 1:N){
    p[n,1] = log_mix(theta,
                     normal_lpdf(y[n] | beta_0[1] + beta_1[1]*x[n], sigma[1]),
                     normal_lpdf(y[n] | beta_0[2] + beta_1[2]*x[n], sigma[2]));

    p[n,2]= log_mix(1-theta,
                     normal_lpdf(y[n] | beta_0[1] + beta_1[1]*x[n], sigma[1]),
                     normal_lpdf(y[n] | beta_0[2] + beta_1[2]*x[n], sigma[2]));

    ps[n,]= p[n,]/sum(p[n,]);
  }
}

Запустить модель Стэна из R

library(tidyverse)
library(rstan)


#Simulate the data
N = 100
x = rnorm(N, 0, 3)
group = factor(sample(c('a','b'),size = N, replace = T))

y = model.matrix(~x*group)%*% c(0,1,0,2) 
y = as.numeric(y) + rnorm(N)

d = data_frame(x = x, y = y)

d %>% 
  ggplot(aes(x,y))+
  geom_point()

#Fit the model
N = length(x)
x = as.numeric(x)
y = y

fit = stan('mixmodel.stan', 
           data = list(N= N, x = x, y = y),
           chains = 8,
           iter = 4000)

Полученные результаты

введите описание изображения здесь

Пунктирные линии - наземная правда, сплошные линии оценены.


Оригинальный ответ

Если вы знаете, какой образец взят из какого сорта нарцисса, вы можете оценить взаимодействие между сортом и PH почвы.

Ваша модель будет выглядеть

y=β0+β1variety+β2PH+β3varietyPH

Вот пример на R. Я сгенерировал некоторые данные, которые выглядят так:

введите описание изображения здесь

Ясно, что две разные линии, и линии соответствуют двум видам. Вот как можно оценить линии, используя линейную регрессию.

library(tidyverse)

#Simulate the data
N = 1000
ph = runif(N,5,8)
species = rbinom(N,1,0.5)

y = model.matrix(~ph*species)%*% c(20,1,20,-3) + rnorm(N, 0, 0.5)
y = as.numeric(y)

d = data_frame(ph = ph, species = species, y = y)

#Estimate the model
model = lm(y~species*ph, data = d)
summary(model)

И результат

> summary(model)

Call:
lm(formula = y ~ species * ph, data = d)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.61884 -0.31976 -0.00226  0.33521  1.46428 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 19.85850    0.17484  113.58   <2e-16 ***
species     20.31363    0.24626   82.49   <2e-16 ***
ph           1.01599    0.02671   38.04   <2e-16 ***
species:ph  -3.03174    0.03756  -80.72   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4997 on 996 degrees of freedom
Multiple R-squared:  0.8844,    Adjusted R-squared:  0.8841 
F-statistic:  2541 on 3 and 996 DF,  p-value: < 2.2e-16

Для видов, обозначенных 0, линия примерно равна

y=19+1PH

Для видов, обозначенных 1, линия приблизительно

y=402PH


Если ОП заранее знает разновидность нарцисса, почему они не могут просто разделить данные на две части и запустить две отдельные регрессии для каждой разновидности?
Акавалл

Если OP не заинтересован в различиях между сортами нарциссов (например, растет ли сорт 1 выше, чем у сорта 2, обусловленного PH почвы), то нет причин для регрессии всех данных вместе, за исключением, возможно, аргументов, касающихся точности.
Димитрий Пананос

@Akavail - они могли бы разделить данные, но их запуск таким образом облегчает проведение каких-либо сравнений, если они заинтересованы в проверке любой гипотезы о различиях между сортами. Комбинирование этого также даст немного лучшие оценки, если допущение равной дисперсии является действительным.
Дейсон

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

2

Статистический подход очень похож на два ответа выше, но он немного больше касается того, как выбрать количество скрытых классов, если вам не хватает предварительных знаний. Вы можете использовать информационные критерии или скупость в качестве руководства при выборе количества скрытых классов.

Вот пример Stata, использующий последовательность моделей конечных смесей (FMM) с 2-4 скрытыми классами / компонентами. Первая таблица - это коэффициенты для скрытого членства в классе. Их немного сложно интерпретировать, но позже они могут быть преобразованы в вероятности estat lcprob. Для каждого класса вы также получаете параметр перехвата и параметр ph slope, за которым следуют предельные вероятности скрытого класса и две микросхемы в выборке. Эти оценки коэффициентов интерпретируются так же, как коэффициенты из модели линейной регрессии. Здесь самый маленький BIC в выборке говорит вам выбрать двухкомпонентную модель как лучшую. AIC странным образом выбирает 3-компонентную модель. Вы также можете использовать микросхемы вне выборки, чтобы выбрать или использовать перекрестную проверку.

.01433133004 наблюдения.

Подход FMM не всегда будет работать так хорошо на практике, если классы менее строгие. Вы можете столкнуться с вычислительными трудностями из-за слишком большого количества скрытых классов, особенно если у вас недостаточно данных или функция правдоподобия имеет несколько локальных максимумов.

. clear

. /* Fake Data */
. set seed 10011979

. set obs 300
number of observations (_N) was 0, now 300

. gen     ph = runiform(5.1, 7.8) in 1/150
(150 missing values generated)

. replace ph = runiform(5.3, 8)   in 151/300
(150 real changes made)

. gen y      = 41.55 + 5.185*ph   + rnormal(0, .25)  in 1/150
(150 missing values generated)

. replace y  = 65.14 + 1.48148*ph + rnormal(0, 0.25) in 151/300
(150 real changes made)

. 
. /* 2 Component FMM */
. fmm 2, nolog: regress y ph

Finite mixture model                            Number of obs     =        300
Log likelihood =  -194.5215

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
1.Class      |  (base outcome)
-------------+----------------------------------------------------------------
2.Class      |
       _cons |   .0034359   .1220066     0.03   0.978    -.2356927    .2425645
------------------------------------------------------------------------------

Class          : 1
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   5.173137   .0251922   205.35   0.000     5.123761    5.222513
       _cons |     41.654   .1622011   256.80   0.000      41.3361    41.97191
-------------+----------------------------------------------------------------
     var(e.y)|   .0619599   .0076322                      .0486698     .078879
------------------------------------------------------------------------------

Class          : 2
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.486062    .026488    56.10   0.000     1.434147    1.537978
       _cons |   65.10664   .1789922   363.74   0.000     64.75582    65.45746
-------------+----------------------------------------------------------------
     var(e.y)|   .0630583   .0075271                      .0499042    .0796797
------------------------------------------------------------------------------

. estat lcprob

Latent class marginal probabilities             Number of obs     =        300

--------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.     [95% Conf. Interval]
-------------+------------------------------------------------
       Class |
          1  |    .499141   .0305016      .4396545    .5586519
          2  |    .500859   .0305016      .4413481    .5603455
--------------------------------------------------------------

. estat ic

Akaike's information criterion and Bayesian information criterion

-----------------------------------------------------------------------------
       Model |        Obs  ll(null)  ll(model)      df         AIC        BIC
-------------+---------------------------------------------------------------
           . |        300         .  -194.5215       7     403.043   428.9695
-----------------------------------------------------------------------------
               Note: N=Obs used in calculating BIC; see [R] BIC note.

. 
. /* 3 Component FMM */
. fmm 3, nolog: regress y ph

Finite mixture model                            Number of obs     =        300
Log likelihood =  -187.4824

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
1.Class      |  (base outcome)
-------------+----------------------------------------------------------------
2.Class      |
       _cons |  -.0312504    .123099    -0.25   0.800    -.2725199    .2100192
-------------+----------------------------------------------------------------
3.Class      |
       _cons |  -3.553227   .5246159    -6.77   0.000    -4.581456   -2.524999
------------------------------------------------------------------------------

Class          : 1
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   5.173077   .0252246   205.08   0.000     5.123637    5.222516
       _cons |   41.65412     .16241   256.48   0.000      41.3358    41.97243
-------------+----------------------------------------------------------------
     var(e.y)|   .0621157   .0076595                      .0487797    .0790975
------------------------------------------------------------------------------

Class          : 2
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.476049   .0257958    57.22   0.000      1.42549    1.526608
       _cons |   65.18698   .1745018   373.56   0.000     64.84496    65.52899
-------------+----------------------------------------------------------------
     var(e.y)|   .0578413   .0070774                      .0455078    .0735173
------------------------------------------------------------------------------

Class          : 3
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.776746   .0020074   885.09   0.000     1.772811     1.78068
       _cons |   62.76633   .0134072  4681.54   0.000     62.74005    62.79261
-------------+----------------------------------------------------------------
     var(e.y)|   9.36e-06   6.85e-06                      2.23e-06    .0000392
------------------------------------------------------------------------------

. estat lcprob

Latent class marginal probabilities             Number of obs     =        300

--------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.     [95% Conf. Interval]
-------------+------------------------------------------------
       Class |
          1  |   .5005343   .0304855      .4410591    .5599944
          2  |   .4851343   .0306119      .4256343    .5450587
          3  |   .0143313   .0073775      .0051968     .038894
--------------------------------------------------------------

. estat ic

Akaike's information criterion and Bayesian information criterion

-----------------------------------------------------------------------------
       Model |        Obs  ll(null)  ll(model)      df         AIC        BIC
-------------+---------------------------------------------------------------
           . |        300         .  -187.4824      11    396.9648   437.7064
-----------------------------------------------------------------------------
               Note: N=Obs used in calculating BIC; see [R] BIC note.

. 
. /* 4 Component FMM */
. fmm 4, nolog: regress y ph

Finite mixture model                            Number of obs     =        300
Log likelihood = -188.06042

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
1.Class      |  (base outcome)
-------------+----------------------------------------------------------------
2.Class      |
       _cons |  -.6450345   .5853396    -1.10   0.270    -1.792279      .50221
-------------+----------------------------------------------------------------
3.Class      |
       _cons |  -.8026907   .6794755    -1.18   0.237    -2.134438    .5290568
-------------+----------------------------------------------------------------
4.Class      |
       _cons |  -3.484714   .5548643    -6.28   0.000    -4.572229     -2.3972
------------------------------------------------------------------------------

Class          : 1
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   5.173031   .0251474   205.71   0.000     5.123743    5.222319
       _cons |   41.65574    .161938   257.23   0.000     41.33835    41.97313
-------------+----------------------------------------------------------------
     var(e.y)|   .0617238   .0076596                      .0483975    .0787195
------------------------------------------------------------------------------

Class          : 2
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.503764   .0371216    40.51   0.000     1.431007    1.576521
       _cons |   65.13498   .2666049   244.31   0.000     64.61244    65.65751
-------------+----------------------------------------------------------------
     var(e.y)|   .0387473   .0188853                      .0149062    .1007195
------------------------------------------------------------------------------

Class          : 3
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.441334   .0443892    32.47   0.000     1.354333    1.528335
       _cons |   65.26791   .2765801   235.98   0.000     64.72582       65.81
-------------+----------------------------------------------------------------
     var(e.y)|   .0307352    .010982                      .0152578    .0619127
------------------------------------------------------------------------------

Class          : 4
Response       : y
Model          : regress

------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
y            |
          ph |   1.665207   .0079194   210.27   0.000     1.649685    1.680728
       _cons |   63.42577   .0510052  1243.52   0.000      63.3258    63.52573
-------------+----------------------------------------------------------------
     var(e.y)|    .000096   .0000769                        .00002    .0004611
------------------------------------------------------------------------------

. estat lcprob

Latent class marginal probabilities             Number of obs     =        300

--------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.     [95% Conf. Interval]
-------------+------------------------------------------------
       Class |
          1  |   .4991443   .0304808      .4396979     .558615
          2  |   .2618733   .1506066      .0715338    .6203076
          3  |   .2236773    .150279      .0501835    .6110804
          4  |    .015305    .008329       .005234    .0438994
--------------------------------------------------------------

. estat ic

Akaike's information criterion and Bayesian information criterion

-----------------------------------------------------------------------------
       Model |        Obs  ll(null)  ll(model)      df         AIC        BIC
-------------+---------------------------------------------------------------
           . |        300         .  -188.0604      15    406.1208   461.6776
-----------------------------------------------------------------------------
               Note: N=Obs used in calculating BIC; see [R] BIC note.

Спасибо за этот очень интересный ответ. Вы дали мне несколько новых концепций для исследования!
SlowMagic

0

Я сосредоточусь на вопросе статистической значимости, так как Дейсон уже рассмотрел часть моделирования.

Я не знаком с какими-либо формальными тестами для этого (которые, я уверен, существуют), поэтому я просто добавлю некоторые идеи (и, возможно, позже добавлю код R и технические детали).

Во-первых, это удобно выводить классы. Предполагая, что у вас есть две строки, подходящие для данных, вы можете приблизительно восстановить два класса, назначив каждую точку классу линии, ближайшей к ней. Что касается точек возле пересечения, вы столкнетесь с проблемами, но пока просто игнорируйте их (возможно, можно обойти это, но сейчас просто надейтесь, что это не сильно изменится).

Способ сделать это состоит в том, чтобы выбрать ИксL а также Икср (значения рН почвы) с ИксLИкср так, что части, оставшиеся от ИксL достаточно разделены и части права Икср достаточно разделены (ближайшая точка, где распределения не перекрываются).

Тогда есть два естественных способа сделать это.

Менее забавный способ - просто запустить исходный набор данных в сочетании с выведенными метками классов через линейную регрессию, как в ответе Деметрия.

Более интересный способ сделать это - через модифицированную версию ANOVA. Задача состоит в том, чтобы создать искусственный набор данных, который представляет две линии (с одинаковым разбросом между ними), а затем применить ANOVA. Технически, вам нужно сделать это один раз для левой стороны и один раз для правой (то есть у вас будет два искусственных набора данных).

Мы начнем с левой стороны и применим простой метод усреднения, чтобы получить две группы. По сути, каждая точка в первом классе, скажем, имеет вид

Y1(я)знак равноβ1,1Икс1(я)+β1,0+е1(я)
поэтому мы собираемся заменить линейное выражение β1,1Икс1(я)+β1,0 по константе, а именно среднее значение линейного члена или
β1,1Иксavг+β1,0
где ИксLavг буквально в среднем Иксзначение для левой стороны (важно, что это по обоим классам, так как это делает вещи более согласованными). То есть мы заменимY1(я) с
Y~1(я)знак равноβ1,1Иксavг+β1,0+е1(я),
и мы аналогично для второго класса. То есть ваш новый набор данных состоит из коллекцииY~1(я) и аналогично Y~2(я),

Обратите внимание, что оба подхода естественным образом обобщают N классы.


-2

Возможно ли, что включение обоих в один и тот же график является ошибкой? Учитывая, что сорта ведут себя совершенно по-разному, есть ли смысл перекрывать данные? Мне кажется, что вы ищете воздействие на вид нарциссов, а не воздействие похожих сред на разных нарциссов. Если вы потеряли данные, которые помогают определить вид «A» из вида «B», вы можете просто сгруппировать поведение «A» и поведение «B» и включить обнаружение двух видов в свое повествование. Или, если вы действительно хотите одну диаграмму, просто используйте два набора данных на одной оси. Я не имею ничего общего с опытом, который я вижу в других ответах, поэтому я должен найти менее «квалифицированные» методы. Я бы провел анализ данных в среде рабочего листа, где уравнения легче разработать. Затем, как только группировки станут очевидными, создайте две отдельные таблицы данных с последующим преобразованием их в диаграммы / графики. Я работаю с большим количеством данных и часто нахожу, что мои предположения о различных корреляциях оказываются неверными; это то, что данные должны помочь нам обнаружить. Как только я узнаю, что мои предположения неверны, я отображаю данные, основанные на обнаруженном поведении, и обсуждаю это поведение и полученный статистический анализ как часть повествования.


1
Я предполагаю, что за вас проголосовали, потому что ваш ответ не дает какой-либо ясности или понимания в ответ на вопрос. Вы должны более четко структурировать свой ответ и прояснить, какие подвопросы вы рассматриваете в каждой точке. Вопрос был обновлен между ответами и перед вашим ответом, чтобы четко указать, что информация о сортах недоступна и не подлежит восстановлению.
ReneBt

2
Добро пожаловать в Cross Validated! Пожалуйста, не расстраивайтесь из-за того, что ваш первый ответ не был хорошо принят - и более простые решения могут быть очень полезны - но, поскольку спрашивающий уже заявляет: «Я могу разглядеть его и отделить вручную, конечно», он не кажется много добавляю.
Scortchi - Восстановить Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.