How to identify latent factors on only one observed variable Is there an approach to identify latent factors impacting the outcome of only one observed variable?
I have a number of observations for one variable and assume that it is affected by two latent factors. Below you find an example. data_1 consist of the observations for the first latent factor and data_2 consists of observations for the second latent factor.
Unfortunately my experimental design does not allow to easily distinguish between both latent factors. What I actually observe is something like the combination of data_1 and data_2. This is what I called "data" in the code below.
Figure 1: So what I observe is something like this:

Figure 2: Is there a possibility to identify the underlying latent factors that possibly affect my observations, so that I get something like this?

library(ggplot2)
library(tidyverse)
library(MASS)

#DATA---------------------------------------------------------------------------
#set seed-----------------------------------------------------------------------
set.seed(789)

#sample data set----------------------------------------------------------------
data_1 <- mvrnorm(n = 100,                                                     
                  mu = c(0, 0),                                                
                  Sigma = matrix(c(1, 0.8,                               
                                 0.8, 1),                                 
                                 nrow = 2, ncol = 2))       

data_2 <- mvrnorm(n = 100,                                                    
                  mu = c(0, 0),                                              
                  Sigma = matrix(c(1,0.9,
                                   0.9,1),
                                 nrow = 2, ncol = 2)) 

#...combine 2 data sets---------------------------------------------------------
data_1 <- as.data.frame(data_1)
colnames(data_1) <- c("x", "y")
data_1$factor <- "factor_1"

data_2 <- as.data.frame(data_2)
colnames(data_2) <- c("x", "y")
data_2$factor <- "factor_2"

data <- bind_rows(data_1, data_2)

ggplot(data = data, mapping = aes(x = x, y = y)) +                             
  geom_point() 

EDIT:
data_1 and data_2 represent two data sets. These are two observations of the Variables X and Y. My question: Is there a possibility to disentangle the combined data set of above (figure 1) so that I can get the two regression lines in the second figure.
I imagine that the data points belong to two different groups. If life would be easy, I would see them separately like in this figures:
Figure 3: Data 1

Figure 4: Data 2

However, I only see them as in Figure 1. Is there a possibility to identify the different groups with the different slopes?
 A: If I understand correctly, the R code is describing a Gaussian mixture distribution $X$ with two mixture components ("latent factors") $G_1\sim N(0, 1)$ and $G_2\sim N(0, 1)$ such that
$f(x) = 0.5g_1(x) + 0.5g_2(x)$ and
the correlations $\rho_{g_1y}= 0.8$ and $\rho_{g_2y}= 0.9$.
The goal is to disentangle the mixture components within $X$ so that separate linear regressions can be run for each component. If the problem is defined correctly, then there are several methods used for mixture decomposition. My first thought was K-means clustering which might be sufficient if the distance between the latent random variables were sufficiently large. A common method used is model-based clustering using Gaussian mixture models estimated by Expectation–Maximization algorithm (the library mclust in R).
However, in the example provided, the mixture components are defined so similarly that their combination in $X$ leads to significant information loss -- I don't know if there is a method that would be quite satisfactory at disentangling them. But perhaps mixture modelling methods may still be of use to you if it is possible for the latent factors to exhibit more distinguishing properties.
Here is an example of EM algorithm using mclust where $\rho_{g_1y}= 0.8$ and $\rho_{g_2y}= -0.8$. The method is successful, except at the overlapping cluster centers ($\mu_{g_1}=\mu_{g_2}=0$) where it unsurprisingly struggles. With the resulting classifications, you can then disentangle the data into two datasets and run regressions on each.

#DATA---------------------------------------------------------------------------
#set seed-----------------------------------------------------------------------
set.seed(789)

#sample data set----------------------------------------------------------------
data_1 <- mvrnorm(n = 1000,                                                     
                  mu = c(0, 0),                                                
                  Sigma = matrix(c(1, 0.8,                               
                                   0.8, 1),                                 
                                 nrow = 2, ncol = 2))       

data_2 <- mvrnorm(n = 1000,                                                    
                  mu = c(0, 0),                                              
                  Sigma = matrix(c(1,-0.8,
                                   -0.8,1),
                                 nrow = 2, ncol = 2)) 

#...combine 2 data sets---------------------------------------------------------
data_1 <- as.data.frame(data_1)
colnames(data_1) <- c("x", "y")
data_1$factor <- "2"

data_2 <- as.data.frame(data_2)
colnames(data_2) <- c("x", "y")
data_2$factor <- "1"

data <- bind_rows(data_1, data_2)

library(mclust)
EMCluster <- Mclust(data.frame(x=data$x, y=data$y), G = 2)
plot(EMCluster, what = "classification")
data$emcluster <- EMCluster$classification 

