士郎小天使 2021-10-22 02:46 采纳率: 81.1%
浏览 193
已结题

matlab中,有一组二维数据,如何绘制三维的联合经验分布函数图

如果是一维数据X,就能直接用[f,x] = ecdf(X)来绘制经验分布函数图,但如果是二维的数据数据[X,Y],要如何绘制二维数据的三维联合经验分布函数图。最开始我是直接分别算ecdf 得到两个f和x,y。结果的x,y做X轴Y轴的值,两个f相乘做Z轴。代码如下,绘制的图比较相近。
但是我问了下导师,我这种求法前提是X和Y是相互独立的。我的数据[X Y]中的X和Y不是独立的,不能简单地分别用ecdf来求然后概率相乘。想问下大神们,一组二维数据,要如何绘制三维的联合经验分布函数图

Z=xlsread('Linton3.xlsx')
X=Z(:,1);
Y=Z(:,2);
[f1,x] = ecdf(X);
[f2,y] = ecdf(Y);
[XX,YY]=meshgrid(x,y);
[ff1,ff2]=meshgrid(f1,f2);
ZZ=ff1.*ff2
surf(XX,YY,ZZ,'EdgeColor','none');

img

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-22 17:16
    关注

    你好同学,给你编了一个专属函数ecdf2:

    function [X, Y, CDF] = ecdf2(x,y,nx,ny,xminmax,yminmax)
    % x:x的值
    % y:y的值
    % nx:x方向划分段数
    % ny:y方向划分段数
    % xminmax = [xmin, xmax]
    % yminmax = [ymin, ymax]
    num = length(x);
    if(num~=length(y))
       error('输入的x和y长度必须相等') 
    end
    if(nargin>6) % 如果变量个数大于6个,太多了
        error('太多输入变量')
    elseif(nargin<2) % 如果变量个数小于2个,太少了
        error('输入变量数目不足!!')
    end
    if(nargin==6) % 如果变量个数等于6个,赋值给ymin和ymax
        ymin = yminmax(1);
        ymax = yminmax(2);
    end
    if(nargin>=5)% 如果变量个数大于等于5个,赋值给xmin和xmax
        xmin = xminmax(1);
        xmax = xminmax(2);
    end
    if(nargin<=4)% 如果变量个数小于等于4个,自定义xmin和xmax
        xmin = min(x);
        xmax = max(x)+eps;
        ymin = min(y);
        ymax = max(y)+eps;
    end
    if(nargin<=3)% 如果变量个数小于等于3个,自定义y方向划分段数ny
        ny = 30;
    end
    if(nargin==2)% 如果变量个数等于2个,自定义x方向划分段数nx
        nx = 30;
    end
    xg = linspace(xmin, xmax, nx);%x方向的点
    yg = linspace(ymin, ymax, ny);%y方向的点
    [X,Y] = meshgrid(xg, yg);%形成网格
    [I,J] = meshgrid(1:nx, 1:ny);%下标网格
    CDF = arrayfun(@(i,j)sum(x<X(i,j)&y<Y(i,j))/num,I,J);%形成经验分布
    end
    

    然后调用就行:

    clc;clear
    num = 1000000;
    x = randn(num,1);% 为了说明弄了两个正态分布搞联合,实际数据会更好
    y = randn(num,1);
    [X, Y, CDF] = ecdf2(x,y);% ,50,50,[-3, 3],[-3, 3]
    surf(X,Y,CDF)
    

    可以看到效果杠杠的:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真