如何在没有相关性的变量之间产生非线性依赖?

How to generate non-linear dependence between variables without correlation?

我在生成这个 data set for my dissertation from the following distribution 时遇到问题。

我的尝试结果data set看起来更独立。我似乎无法发现我哪里出错了。有人可以帮我吗?

代码如下:

# Non-linear dependence without correlation
import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(-0.5, 0.5, 500)

def y_samples(x):
    y = []
    for i in x:
        if np.abs(i) <= 1/6:
            y.append(np.random.normal(0, 1/9))
        else:
            y.append(0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9))
    return y    

y = y_samples(x)

plt.scatter(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

谢谢!

您对 |x| > 1/6 案例的处理不正确,可能更多是因为对数学的误解而不是对代码的误解。表达式

0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9)

产生以零为中心的正态分布,不是中心为 -1 和 1 的双峰分布。

一旦你更好地理解了数学,修复就很明显了:用类似

的东西替换有问题的计算
np.random.normal(1.0, 1.0/9.0) if np.random.random() > 0.5 else np.random.normal(-1.0, 1.0/9.0)

(1/9 evaluates to 0 in Python2,我用来测试的。)