文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

20. 正态生成

Q: 如何生成两个标准正态分布(N(0,1))的随机变量,使它们之间的相关系数为p,假设你有一个标准正态分布的随机数生成器?

A: 要生成两个标准正态分布(即 N ( 0 , 1 ) N(0,1) N(0,1))的随机变量 X X X Y Y Y,并使它们之间的相关系数为 p p p(其中 p p p 是一个给定的常数,且 ∣ p ∣ ≤ 1 |p| \leq 1 p1),假设你已有一个标准正态分布的随机数生成器(可以生成独立的 N ( 0 , 1 ) N(0,1) N(0,1) 随机变量),可以按照以下步骤操作。该方法基于线性组合的原理,确保 X X X Y Y Y 均服从 N ( 0 , 1 ) N(0,1) N(0,1),且相关系数 Corr ( X , Y ) = p \text{Corr}(X,Y) = p Corr(X,Y)=p

步骤

  1. 生成两个独立的标准正态随机变量
    使用你的随机数生成器生成两个独立的 N ( 0 , 1 ) N(0,1) N(0,1) 随机变量,记为 Z 1 Z_1 Z1 Z 2 Z_2 Z2。即:

    • Z 1 ∼ N ( 0 , 1 ) Z_1 \sim N(0,1) Z1N(0,1)
    • Z 2 ∼ N ( 0 , 1 ) Z_2 \sim N(0,1) Z2N(0,1)
    • Cov ( Z 1 , Z 2 ) = 0 \text{Cov}(Z_1, Z_2) = 0 Cov(Z1,Z2)=0(独立)。
  2. 定义 X X X Y Y Y

    • X = Z 1 X = Z_1 X=Z1
    • Y = p ⋅ Z 1 + 1 − p 2 ⋅ Z 2 Y = p \cdot Z_1 + \sqrt{1 - p^2} \cdot Z_2 Y=pZ1+1p2 Z2

验证

  • 分布性质
    • X = Z 1 X = Z_1 X=Z1 显然服从 N ( 0 , 1 ) N(0,1) N(0,1)
    • Y Y Y Z 1 Z_1 Z1 Z 2 Z_2 Z2 的线性组合。由于 Z 1 Z_1 Z1 Z 2 Z_2 Z2 独立且服从标准正态分布, Y Y Y 的期望和方差计算如下:
      • 期望: E [ Y ] = E [ p ⋅ Z 1 + 1 − p 2 ⋅ Z 2 ] = p ⋅ 0 + 1 − p 2 ⋅ 0 = 0 E[Y] = E[p \cdot Z_1 + \sqrt{1 - p^2} \cdot Z_2] = p \cdot 0 + \sqrt{1 - p^2} \cdot 0 = 0 E[Y]=E[pZ1+1p2 Z2]=p0+1p2 0=0

      • 方差:

        Var ( Y ) = Var ( p ⋅ Z 1 + 1 − p 2 ⋅ Z 2 ) = p 2 ⋅ Var ( Z 1 ) + ( 1 − p 2 ) ⋅ Var ( Z 2 ) = p 2 ⋅ 1 + ( 1 − p 2 ) ⋅ 1 = 1 \begin{align*} \text{Var}(Y) &= \text{Var}(p \cdot Z_1 + \sqrt{1 - p^2} \cdot Z_2) \\ &= p^2 \cdot \text{Var}(Z_1) + (1 - p^2) \cdot \text{Var}(Z_2) \\ &= p^2 \cdot 1 + (1 - p^2) \cdot 1 \\ &= 1 \end{align*} Var(Y)=Var(pZ1+1p2 Z2)=p2Var(Z1)+(1p2)Var(Z2)=p21+(1p2)1=1

        因为 Cov ( Z 1 , Z 2 ) = 0 \text{Cov}(Z_1, Z_2) = 0 Cov(Z1,Z2)=0。 因此, Y ∼ N ( 0 , 1 ) Y \sim N(0,1) YN(0,1)

  • 相关系数
    • 协方差:

      Cov ( X , Y ) = Cov ( Z 1 , p ⋅ Z 1 + 1 − p 2 ⋅ Z 2 ) = p ⋅ Cov ( Z 1 , Z 1 ) + 1 − p 2 ⋅ Cov ( Z 1 , Z 2 ) = p ⋅ Cov ( Z 1 , Z 1 ) + 1 − p 2 ⋅ Cov ( Z 1 , Z 2 ) = p ⋅ Var ( Z 1 ) + 0 = p ⋅ 1 = p \begin{align*} \text{Cov}(X, Y) &= \text{Cov}(Z_1, p \cdot Z_1 + \sqrt{1 - p^2} \cdot Z_2) \\ &= p \cdot \text{Cov}(Z_1, Z_1) + \sqrt{1 - p^2} \cdot \text{Cov}(Z_1, Z_2) \\ &= p \cdot \text{Cov}(Z_1, Z_1) + \sqrt{1 - p^2} \cdot \text{Cov}(Z_1, Z_2) \\ &= p \cdot \text{Var}(Z_1) + 0 \\ &= p \cdot 1 \\ &= p \end{align*} Cov(X,Y)=Cov(Z1,pZ1+1p2 Z2)=pCov(Z1,Z1)+1p2 Cov(Z1,Z2)=pCov(Z1,Z1)+1p2 Cov(Z1,Z2)=pVar(Z1)+0=p1=p

    • 相关系数: Corr ( X , Y ) = Cov ( X , Y ) σ X σ Y = p 1 ⋅ 1 = p \text{Corr}(X, Y) = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y} = \frac{p}{1 \cdot 1} = p Corr(X,Y)=σXσYCov(X,Y)=11p=p(因为标准差 σ X = σ Y = 1 \sigma_X = \sigma_Y = 1 σX=σY=1)。

注意事项

  • 参数 p p p 的范围 p p p 必须在 [ − 1 , 1 ] [-1, 1] [1,1] 内,否则 1 − p 2 \sqrt{1 - p^2} 1p2 可能不是实数(例如,如果 ∣ p ∣ > 1 |p| > 1 p>1,该方法无效)。
  • 特殊情况
    • 如果 p = 1 p = 1 p=1,则 Y = Z 1 Y = Z_1 Y=Z1,所以 X = Y X = Y X=Y,相关系数为 1。
    • 如果 p = − 1 p = -1 p=1,则 Y = − Z 1 Y = -Z_1 Y=Z1,相关系数为 -1。
    • 如果 p = 0 p = 0 p=0,则 Y = Z 2 Y = Z_2 Y=Z2,所以 X X X Y Y Y 独立(相关系数为 0)。
  • 实现:在编程时(如 Python 中使用 numpy.random.randn),确保生成的 Z 1 Z_1 Z1 Z 2 Z_2 Z2 是独立的。每次生成一对 ( X , Y ) (X, Y) (X,Y) 时,都需要新的独立 Z 1 Z_1 Z1 Z 2 Z_2 Z2

Python 实现

以下是使用 Python 实现生成相关系数为 p 的两个标准正态分布随机变量的代码:

import numpy as np
from typing import Tupledef generate_correlated_normals(correlation: float, sample_size: int = 1
) -> Tuple[np.ndarray, np.ndarray]:"""生成两个相关系数为给定值的标准正态分布随机变量。此函数使用线性变换方法生成一对相关随机变量:X = Z₁Y = ρ·Z₁ + √(1 - ρ²)·Z₂其中 Z₁ 和 Z₂ 是独立的标准正态随机变量,ρ 是指定的相关系数。示例:>>> X, Y = generate_correlated_normals(correlation=0.7, sample_size=1000)>>> np.corrcoef(X, Y)[0, 1]  # 应接近0.70.7012Args:correlation (float): 目标相关系数,必须在 [-1, 1] 范围内sample_size (int, optional): 要生成的样本数量. Defaults to 1.Returns:Tuple[np.ndarray, np.ndarray]: 包含两个NumPy数组的元组 (X, Y),每个数组的形状为 (sample_size,)"""# 验证相关系数范围if abs(correlation) > 1:raise ValueError(f"相关系数必须在 [-1, 1] 范围内。收到: {correlation}")# 生成两个独立的标准正态随机变量z1: np.ndarray = np.random.standard_normal(size=sample_size)z2: np.ndarray = np.random.standard_normal(size=sample_size)# 计算缩放因子(避免重复计算)scale_factor: float = np.sqrt(1 - correlation**2)# 构造相关变量x: np.ndarray = z1y: np.ndarray = correlation * z1 + scale_factor * z2return x, ydef verify_distribution(x: np.ndarray, y: np.ndarray, expected_correlation: float
) -> None:"""验证生成变量的分布属性。Args:x (np.ndarray): 第一个随机变量数组y (np.ndarray): 第二个随机变量数组expected_correlation (float): 预期的相关系数"""# 计算实际相关系数actual_correlation: float = np.corrcoef(x, y)[0, 1]# 计算统计量stats = {"X 均值": np.mean(x),"X 标准差": np.std(x),"Y 均值": np.mean(y),"Y 标准差": np.std(y),"目标相关系数": expected_correlation,"实际相关系数": actual_correlation,"绝对误差": abs(actual_correlation - expected_correlation),}# 打印验证结果print("\n验证结果:")for stat, value in stats.items():print(f"{stat}: {value:.6f}")# 示例用法
TARGET_CORRELATION: float = 0.6
SAMPLE_SIZE: int = 10_000# 生成相关正态变量
x_data, y_data = generate_correlated_normals(correlation=TARGET_CORRELATION, sample_size=SAMPLE_SIZE
)# 验证分布属性
verify_distribution(x_data, y_data, TARGET_CORRELATION)

这道面试题的本质是考察候选人对金融随机过程的数学建模能力在量化系统中实现统计属性的工程能力,这两项能力直接对应量化金融中的风险因子生成、蒙特卡洛定价模型和资产相关性模拟等核心场景。

🔑 核心知识点

  1. 概率论基础

    • 标准正态分布的性质(均值0、方差1)
    • 相关系数ρ的数学定义: ρ X , Y = Cov ( X , Y ) σ X σ Y \rho_{X,Y} = \frac{\text{Cov}(X,Y)}{\sigma_X\sigma_Y} ρX,Y=σXσYCov(X,Y)
    • 随机变量线性变换的期望与方差计算
  2. 统计模拟技术

    • 独立随机变量的组合构造相关性(Cholesky分解的二维特例)
    • 协方差矩阵的隐含约束( ∣ ρ ∣ ≤ 1 |\rho| \leq 1 ρ1
  3. 量化金融应用

    • 多资产价格路径模拟(如期权定价中的相关布朗运动)
    • 投资组合风险模型中因子相关性的生成
    • 信用风险中的联合违约概率建模

📊 面试评估维度

考察维度具体表现要求本题对应点
数学推导能力将统计概念转化为数学表达式推导 Y = ρ X + 1 − ρ 2 Z Y = \rho X + \sqrt{1-\rho^2} Z Y=ρX+1ρ2 Z 的构造过程
工程实现严谨性边界条件处理与数值稳定性检测 ∣ ρ ∣ > 1 |\rho|>1 ρ>1 的异常输入,避免 1 − ρ 2 \sqrt{1-\rho^2} 1ρ2 的浮点误差
金融直觉理解相关性在量化场景的意义解释生成变量在蒙特卡洛模拟中的用途(如相关资产价格)
验证思维设计统计检验方法验证结果通过样本均值/方差/相关系数检查分布属性

🧩 典型回答框架

  1. 数学原理阐述

    • 定义两个独立标准正态变量 Z 1 , Z 2 ∼ N ( 0 , 1 ) Z_1, Z_2 \sim N(0,1) Z1,Z2N(0,1)
    • 构造线性组合:
      X = Z 1 X = Z_1 X=Z1
      Y = ρ Z 1 + 1 − ρ 2 Z 2 Y = \rho Z_1 + \sqrt{1-\rho^2} Z_2 Y=ρZ1+1ρ2 Z2
    • 证明 Var ( Y ) = 1 \text{Var}(Y)=1 Var(Y)=1 Cov ( X , Y ) = ρ \text{Cov}(X,Y)=\rho Cov(X,Y)=ρ
  2. 代码实现要点

    # 1. 输入验证:|ρ|≤1
    # 2. 生成独立正态变量 (vectorized)
    # 3. 应用变换矩阵 [1, 0; ρ, √(1-ρ²)] 
    # 4. 返回 (X,Y) 数组
    
  3. 统计验证方法

    • 计算生成数据的样本相关系数 ρ ^ \hat{\rho} ρ^
    • KS检验正态性
    • 可视化散点图与理论密度对比

💡 核心洞察

  • 隐藏考点

    • ρ → ± 1 \rho \to \pm 1 ρ±1 时,算法退化为完全相关( Y = ± X Y= \pm X Y=±X),暴露候选人对极端值处理的敏感性
    • 向量化实现效率(如同时生成10万组变量)反映大规模金融模拟的工程能力
  • 业务连接

    • 此方法实际是高斯copula的二维特例,在CDO定价中用于模拟关联违约事件。
    • 若候选人能指出“此方法仅适用于正态分布,而真实市场需用t-copula或秩相关”,则展现高阶认知。
  • 进阶挑战

    • 如何扩展至生成N维相关正态变量?(期待Cholesky分解或PCA的答案)
    • 若要求相关系数随时间变化 ρ ( t ) \rho(t) ρ(t),如何修改?(考察随机微分方程的应用)

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85230.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85230.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85230.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino入门教程:10、屏幕显示

飞书文档https://x509p6c8to.feishu.cn/docx/N45Pd0tA1oaC4CxUWZjc8Ekyn0b 屏幕应用场景 课程使用的SSD1306是一款128*64像素可以使用IIC驱动的OLED屏幕。 SSD1306 Oled显示模块共有4个引脚,标记为GND, VCC, SCL和SDA。这种Oled显示模块可以使用3.3V到5V轻松上电。…

华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己dify钉钉群聊机器人

华为云FlexusDeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己dify钉钉群聊机器人 什么是华为云ModelArts 华为云ModelArts ModelArts是华为云提供的全流程AI开发平台,覆盖从数据准备到模型部署的全生命周期管理,帮…

【Pytorch】(1)Pytorch环境安装-①创建虚拟环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、创建Pytorch的虚拟环境 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、Anaconda环境基础操作 1.1 启动Anaconda Prompt …

如何自定义WordPress登录页面,提升用户体验和安全性

WordPress是目前最受欢迎的网站搭建平台之一,无论是个人博客、企业网站,还是电商平台,很多人都选择用它来搭建自己的网站。不过,很多WordPress用户会发现默认的登录页面相对普通,无法体现自己网站的特色。其实&#xf…

Coze扣子 - AI生成数字人口播视频

一、数字人介绍 数字人(Digital Human)是指利⽤先进的数字技术和⼈⼯智能创建的虚拟人 类形象,能够模拟⼈类的外貌、⾏为和情感。数字⼈不仅可以在视觉上表 现出真实的⼈类特征,还可以通过⾃然语⾔处理与⽤户进⾏互动。 Coze通过全…

【请关注】真实案例pg及kong安装部署

# 前提需要安装好nfs KONG_NAMESPACE="kong-api" PG_NAMESPACE="pg-ha" HARBOR_IP="harbor.rancher.com" 一、安装pg高可用####################################################################################### kubectl creat…

SSRF7 SSRF漏洞的检测方式

我们可以进入bp利用bp模块collaborator,进行检测: 我们点击复制到剪切板: 然后再到目标网站进行构造URL: http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlmvluewtgs390alohzqjakhu2qtwkkc81.oastify.com 然…

C++ 函数的使用

C中的函数是实现代码复用和模块化的基本单元。下面从定义、调用、参数传递、常见样式、声明和分文件编写等方面进行介绍。 1. 函数定义 函数定义包括返回类型、函数名、参数列表和函数体: 返回类型 函数名(参数列表) {// 函数体return 返回值; // 如果返回类型不是…

一文讲清辐射传输模型

一、为什么需要进行辐射传输反演? 遥感影像中,我们看到的是从地表和大气混合后到达传感器的总辐射信号。这个信号既包含了地物反射,也包含了大气分子和气溶胶的散射吸收、以及地表自身或大气的热发射。若要从中定量获得植被生理参数、水体理…

视频编码怎么选?H.264、H.265、VP9、AV1全解析

你有没有遇到过这样的情况:下载了一个高清电影,却发现播放器打不开;或者上传视频到网站时提示“格式不支持”?其实,这背后和视频编码格式密切相关。 那么问题来了:视频编码格式哪个好? 今天简鹿…

单例模式:全局唯一实例的设计艺术

引言:为什么需要单例模式 在软件开发中,某些对象只需要一个全局实例: 数据库连接池配置管理器日志记录器线程池缓存系统 使用new关键字多次创建这些对象会导致: #mermaid-svg-TyfdXbNvcmqwnA6C {font-family:"trebuchet m…

性能优化 - 案例篇:11种优化接口性能的通用方案

文章目录 Pre1. 加索引:最低成本,最大收益常见问题:工具命令:建议: 2. SQL 优化:比加索引再进阶一步常见 5 类问题:实用建议: 3. 远程调用:从串行改并行,性能…

Kafka - 并发消费拉取数据过少故障分析

文章目录 背景与问题描述原理与原因分析参数优化思路示例配置验证与监控实践注意事项与风险总结 背景与问题描述 场景描述 使用 Spring Boot Spring Kafka,注解 KafkaListener(topics..., id..., ...),批量监听(方法签名为 public void doHa…

开源 Arkts 鸿蒙应用 开发(二)封装库.har制作和应用

文章的目的为了记录使用Arkts 进行Harmony app 开发学习的经历。本职为嵌入式软件开发,公司安排开发app,临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 相关链接: 开源 Arkts …

Qt基础相关

模态对话框和非模态对话框 在一个页面进行交互时弹出的一个新页面,新页面不堵塞旧页面的交互,这就是非模态对话框。 模态对话框 模态对话框就是当该对话框弹出后会阻塞其他窗口的响应事件,必须先关闭该对话框,其他窗口才会继续…

《汇编语言:基于X86处理器》第2章 x86处理器架构

本章重点是与 x86 汇编语言相关的底层硬件。有说法认为,汇编语言是直接与机器交流的理想软件工具。如果是真的,那么汇编程序员就必须非常熟悉处理器的内部结构与功能。本章将讨论指令执行时处理器内部发生的一些基本操作,以及操作系统如何加载…

最小生成树算法的解题思路与 C++ 算法应用

一、最小生成树算法针对问题类型及概述 先来简要陈述一下树的概念:一个由 N N N 个点和 N − 1 N-1 N−1 条边组成的无向连通图。由此,我们可以得知生成树算法的概念:在一个 N N N 个点的图中找出一个由 N − 1 N-1 N−1 条边组成的树。…

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/se

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/send 原因:多个地方注册 FeignClient(name “ti”, path “/ti/v1/i/send/repeat”) 解决:删除一个即可

Mac m1 通过docker镜像安装kafka

kafka依赖zookeeper,因此需要使用docker同时安装zookeeper和kafka。 macOS的docker在容器和宿主之间无法通过ip直接通信,因此在安装的时候需要特殊注意与ip相关的设置。当容器需要访问宿主ip时,需要使用docker.for.mac.host.internal或者host…

01初始uni-app+tabBar+首页

初始uni-apptabBar首页 1. uni-app1.1 新建uni-app项目1.2 目录结构1.3 把项目配置运行到微信开发者工具 2. tabBar3.1 首页3.1 配置网络请求3.2 轮播图区域3.3 分类导航区域3.4 楼层区域 1. uni-app ​ uni-app 是使用 Vue.js 开发前端应用的框架。开发者编写一套代码&#x…