如何在不相关的变量之间产生非线性依存关系?

时间:2019-06-04 08:26:24

标签: python statistics probability-distribution

我无法从以下data set的论文中生成此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()

谢谢!

1 个答案:

答案 0 :(得分:0)

您错误地处理了|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。)