E se meus dados de regressão linear contiverem vários relacionamentos lineares combinados?

34

Digamos que eu esteja estudando como os narcisos respondem a várias condições do solo. Eu coletei dados sobre o pH do solo versus a altura madura do narciso. Estou esperando um relacionamento linear, então continuo executando uma regressão linear.

No entanto, quando eu comecei meu estudo, eu não percebi que a população realmente contém duas variedades de narciso, cada uma das quais responde de maneira muito diferente ao pH do solo. Portanto, o gráfico contém dois relacionamentos lineares distintos:

pH do solo vs altura da flor (cm)

Eu posso olhá-lo e separá-lo manualmente, é claro. Mas me pergunto se existe uma abordagem mais rigorosa.

Questões:

  1. Existe um teste estatístico para determinar se um conjunto de dados seria melhor ajustado por uma única linha ou por N linhas?

  2. Como eu executaria uma regressão linear para ajustar as N linhas? Em outras palavras, como separar os dados combinados?

Posso pensar em algumas abordagens combinatórias, mas elas parecem computacionalmente caras.


Esclarecimentos:

  1. A existência de duas variedades era desconhecida no momento da coleta de dados. A variedade de cada narciso não foi observada, nem notada nem registrada.

  2. É impossível recuperar esta informação. Os narcisos morreram desde o momento da coleta de dados.

Tenho a impressão de que esse problema é semelhante à aplicação de algoritmos de cluster, pois você quase precisa saber o número de clusters antes de iniciar. Acredito que, com QUALQUER conjunto de dados, aumentar o número de linhas diminuirá o erro rms total. No extremo, você pode dividir seu conjunto de dados em pares arbitrários e simplesmente desenhar uma linha através de cada par. (Por exemplo, se você tivesse 1000 pontos de dados, poderia dividi-los em 500 pares arbitrários e desenhar uma linha através de cada par.) O ajuste seria exato e o erro rms seria exatamente zero. Mas não é isso que queremos. Queremos o número "certo" de linhas.

SlowMagic
fonte
3
você sabe qual dafodil é qual variedade? Em caso afirmativo, basta incluir essas informações em seu modelo
rep_ho 28/01
11
Parece um caso clássico de interação estatística, como na resposta de @Demetri Pananos.
rolando2 28/01
2
Tenho a sensação de que eles não têm informações sobre a variedade da flor em seus dados. Concordo que se eles tivessem isso, seria apenas um caso de construção de um modelo de interação ou mesmo de execução de regressões separadas para cada variedade. No entanto, se eles não tiverem essas informações, nem toda a esperança será perdida. Pode-se construir um modelo que estima não apenas as linhas separadas, mas também prediz as probabilidades de que cada observação pertença a qualquer grupo.
Dason 28/01
11
@DemetriPananos Eu forneci uma resposta que espero que faça sentido. Dependendo do que eles querem fazer, é um pouco mais de trabalho. Para fazer algum tipo de teste, você precisa fazer um teste de razão de verossimilhança ou fazer algum tipo de teste de randomização ou algo assim. Mas eles não nos deram muitas informações e se o objetivo é apenas ajustar as linhas e eles não têm rótulos, não é tão ruim usar o pacote mixtools.
Dason 28/01

Respostas:

31

Acho que a resposta de Demetri é ótima se considerarmos que você tem os rótulos das diferentes variedades. Quando li sua pergunta, isso não me pareceu o caso. Podemos usar uma abordagem baseada no algoritmo EM para ajustar basicamente o modelo sugerido por Demetri, mas sem conhecer os rótulos para a variedade. Felizmente, o pacote mixtools no R fornece essa funcionalidade para nós. Como seus dados são bastante separados e você parece ter bastante, eles devem ser bem-sucedidos.

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)

Podemos examinar os resultados

> 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 

Assim, foram ajustadas duas regressões e estimou que 49,7% das observações caíram na regressão para o componente 1 e 50,2% caíram na regressão para o componente 2. A maneira como simulei os dados foi uma divisão de 50 a 50, então isso é bom.

Os valores 'true' que usei para a simulação devem fornecer as linhas:

y = 41,55 + 5,185 * ph e y = 65,14 + 1,48148 * ph

(que eu estimei 'manualmente' do seu gráfico para que os dados que eu crio pareçam com os seus) e as linhas que o algoritmo EM forneceu nesse caso foram:

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

Muito perto dos valores reais.

Podemos traçar as linhas ajustadas junto com os dados

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

Linhas ajustadas via EM

Dason
fonte
21

Edição: Eu originalmente pensei que OP sabia quais observações vieram de quais espécies. A edição do OP deixa claro que minha abordagem original não é viável. Vou deixar para a posteridade, mas a outra resposta é muito melhor. Como consolo, eu codifiquei um modelo de mistura em Stan. Não estou dizendo que uma abordagem bayesiana seja particularmente boa nesse caso, mas é apenas algo interessante que posso contribuir.

Código Stan

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,]);
  }
}

Executar o modelo Stan a partir de 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)

Resultados

insira a descrição da imagem aqui

Linhas tracejadas são verdadeiras, linhas sólidas são estimadas.


Resposta original

Se você souber qual amostra provém de qual variedade de narciso, é possível estimar uma interação entre variedade e PH do solo.

Seu modelo será semelhante

y=β0 0+β1 1variedade+β2PH+β3variedadePH

Aqui está um exemplo em R. Eu gerei alguns dados parecidos com este:

insira a descrição da imagem aqui

Claramente duas linhas diferentes, e as linhas correspondem a duas espécies. Aqui está como estimar as linhas usando regressão linear.

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)

E o resultado é

> 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

Para espécies rotuladas 0, a linha é aproximadamente

y=19+1 1PH

Para espécies rotuladas 1, a linha é aproximadamente

y=40.-2PH

Demetri Pananos
fonte
Se o OP conhece antecipadamente a variedade de narcisos, por que eles não podem simplesmente dividir os dados em duas partes e executar duas regressões separadas para cada variedade?
Akavall 28/01
Se o OP não estiver interessado em diferenças entre as variedades de narcisos (por exemplo, a variedade 1 cresce mais alto que a variedade 2 condicionada no PH do solo), não há razão para regredir todos os dados juntos, exceto talvez por argumentos que envolvam precisão.
Demetri Pananos 28/01
@ Akavail - Eles poderiam dividir os dados, mas executá-los dessa maneira facilita a comparação de qualquer tipo, se estiverem interessados ​​em testar qualquer hipótese sobre diferenças entre as variedades. A execução combinada também daria estimativas um pouco melhores se uma suposição de variância igual fosse válida.
Dason 28/01
11
Antes de analisar a abordagem EM, considerei a abordagem bayesiana. Mas, por mais que eu goste da maneira bayesiana de fazer as coisas, fiquei preguiçoso e é muito mais fácil adotar a abordagem EM. Com isso dito, eu prefiro uma análise bayesiana e acho que também facilita a resposta a perguntas de acompanhamento - você pode ter mais dificuldade em codificar o modelo inicial, mas, uma vez feito isso, é muito mais fácil responder a perguntas que você pode ter usando o distribuição posterior.
Dason 29/01
2

A abordagem estatística é muito semelhante a duas das respostas acima, mas trata um pouco mais de como escolher o número de classes latentes se você não tiver conhecimento prévio. Você pode usar critérios de informação ou parcimônia como um guia na escolha do número de classes latentes.

Aqui está um exemplo de Stata usando uma sequência de modelos de mistura finita (FMMs) com 2-4 classes / componentes latentes. A primeira tabela é os coeficientes para a associação à classe latente. Eles são um pouco difíceis de interpretar, mas podem ser convertidos em probabilidades posteriormente com estat lcprob. Para cada classe, você também obtém um parâmetro de interceptação e um declive ph, seguido pelas probabilidades marginais da classe latente e dois ICs dentro da amostra. Essas estimativas de coeficientes são interpretadas exatamente como os coeficientes de um modelo de regressão linear. Aqui, o menor BIC da amostra diz para você escolher o modelo de dois componentes como o melhor. AIC estranhamente seleciona o modelo de 3 componentes. Você também pode usar ICs fora da amostra para selecionar ou usar a validação cruzada.

.01433133004

A abordagem FMM nem sempre funcionará tão bem na prática se as aulas forem menos severas. Você pode ter dificuldades computacionais com muitas classes latentes, especialmente se você não tiver dados suficientes, ou se a função de probabilidade tiver vários máximos locais.

. 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.
Dimitriy V. Masterov
fonte
Obrigado por esta resposta muito interessante. Você me deu alguns novos conceitos para pesquisar!
SlowMagic 29/01
0

Vou me concentrar na questão da significância estatística, já que o Dason já cobriu a parte da modelagem.

Eu não estou familiarizado com nenhum teste formal para isso (que eu tenho certeza que existe), então vou lançar algumas idéias por aí (e provavelmente adicionarei código R e detalhes técnicos mais tarde).

Primeiro, é conveniente inferir as classes. Presumindo que você tenha duas linhas ajustadas aos dados, é possível reconstruir aproximadamente as duas classes atribuindo cada ponto à classe da linha mais próxima. Para pontos próximos à interseção, você terá problemas, mas por enquanto apenas os ignore (pode haver uma maneira de contornar isso, mas por enquanto apenas espero que isso não mude muito).

xeuxrxeuxrxeuxr

Existem duas maneiras naturais de fazer isso.

A maneira menos divertida é executar apenas o conjunto de dados original combinado com os rótulos de classe inferidos por meio de uma regressão linear, como na resposta de Demetri.

Uma maneira mais interessante de fazer isso seria através de uma versão modificada do ANOVA. O objetivo é criar um conjunto de dados artificial que represente as duas linhas (com propagação semelhante entre elas) e aplicar a ANOVA. Tecnicamente, você precisa fazer isso uma vez para o lado esquerdo e outra para a direita (ou seja, você terá dois conjuntos de dados artificiais).

y1 1(Eu)=β1 1,1 1x1 1(Eu)+β1 1,0 0+e1 1(Eu)
β1 1,1 1x1 1(Eu)+β1 1,0 0
β1 1,1 1xumavg+β1 1,0 0
xeuumavgxy1 1(Eu)
y~1 1(Eu)=β1 1,1 1xumavg+β1 1,0 0+e1 1(Eu),
y~1 1(Eu)y~2(Eu)

N

Jacob Maibach
fonte
-2

É possível que incluir os dois no mesmo gráfico seja um erro? Dado que as variedades se comportam completamente diferentes, existe algum valor em se sobrepor os dados? Parece-me que você está procurando impactos em uma espécie de narciso, não os impactos de ambientes semelhantes em diferentes narcisos. Se você perdeu os dados que ajudam a determinar as espécies "A" da espécie "B", basta agrupar o comportamento "A" e o comportamento "B" e incluir a descoberta de duas espécies em sua narrativa. Ou, se você realmente deseja um gráfico, basta usar dois conjuntos de dados no mesmo eixo. Não tenho nem um pouco do conhecimento que vejo nas outras respostas dadas, por isso tenho que encontrar métodos menos "qualificados". Eu executaria uma análise de dados em um ambiente de planilha em que as equações são mais fáceis de desenvolver. Então, Depois que os agrupamentos se tornarem óbvios, crie as duas tabelas de dados separadas e depois as converta em tabelas / gráficos. Eu trabalho com uma grande quantidade de dados e muitas vezes acho que minhas suposições de correlações diferentes resultam erradas; é isso que os dados devem nos ajudar a descobrir. Depois de aprender que minhas suposições estão erradas, exibo os dados com base nos comportamentos descobertos e discuto esses comportamentos e as análises estatísticas resultantes como parte da narrativa.

KBKIA
fonte
11
Estou supondo que você tenha sofrido uma votação negativa porque sua resposta não está fornecendo nenhuma clareza ou insight em resposta à pergunta. Você precisa estruturar sua resposta de maneira mais útil e esclarecer quais sub-perguntas você aborda em cada momento. A pergunta foi atualizada entre as respostas e antes da resposta para indicar claramente que as informações da variedade não estavam disponíveis e não são recuperáveis.
ReneBt
2
Bem-vindo ao Cross Validated! Por favor, não se deixe levar por sua primeira resposta não ser bem recebida - e soluções mais simples podem ser muito úteis - mas como o interlocutor já afirma "Eu posso olhar e separá-lo manualmente, é claro", não parece estar adicionando muito.
Scortchi - Restabelecer Monica