matlab生成多元回归仿真数据

前言

算法仿真需要生成多元回归的仿真数据,这里将代码简单地总结一下

仿真模型

y = X β + ϵ y = X\beta+\epsilon y=Xβ+ϵ
y ∈ R n × 1 , X ∈ R n × p , β ∈ R n × 1 , ϵ ∈ R n × 1 y\in \mathbb{R}^{n\times 1},X\in \mathbb{R}^{n\times p},\beta\in \mathbb{R}^{n\times 1},\epsilon \in \mathbb{R}^{n\times 1} yRn×1,XRn×p,βRn×1,ϵRn×1
数据构造如下
X ∼ N p ( 0 p , Σ ) y = X β + N ( 0 , 0.1 ) X\sim {N_p}({\mathbf{0}_p},{\Sigma })\\ y = X\beta+N(0,0.1) XNp(0p,Σ)y=Xβ+N(0,0.1)

参数设置

生成60个样本,维度为6,协方差为 Σ = d i a g ( 10 , 8 , 6 , 4 , 2 , 1 ) \Sigma=diag(10,8,6,4,2,1) Σ=diag(10,8,6,4,2,1),这样的得到的数据 X X X为满秩,系数可以直接用最小二乘法求解 β ^ = ( X T X ) − 1 X T y \hat{\beta}=(X^TX)^{-1}X^Ty β^=(XTX)1XTy

代码

代码主要调用了函数mvnrnd生成多元变量,第一个参数为均值向量,第二个参数为协方差矩阵,第三个参数是生成的样本数量。

n = 60;
p = 6;
cov = diag([10,8,6,4,2,1]);
X = mvnrnd(zeros(1,p),cov,n);
%经验协方差估计
hatcov = X'*X/(n-1)
beta = rand(p,1);
err = mvnrnd(0,0.1,n);
y = X*beta + err;
hatbeta = inv(X'*X)*X'*y;

%画图
plot([beta hatbeta],'linewidth',1.5);
h = legend(["$$\beta$$","$$\hat{\beta}$$"]);
set(h,'Interpreter','latex')
a=gca;
a.FontSize=20;
a.FontName='Helvetica';
set(gcf,'color','w');

结果

协方差估计,与实际的协方差比较接近
在这里插入图片描述
系数估计值与实际值基本一致
在这里插入图片描述

高维数据仿真

这里采用了 n ≫ p n\gg p np,如果要生成 n ≪ p n\ll p np要怎么弄呢?

简单的做法如下

X ∼ N p ( 0 p , I p ) X\sim N_p(\mathbf{0}_p,I_p) XNp(0p,Ip)
按照这个分布生成 n n n个样本,不过求 β \beta β就不能用上面的公式直接得到,需要用正则或偏最小二乘法等手段,得到稳健一些的 β \beta β

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值