一个很诡异的问题。我有个比较大的数据集,400多万吧,其实也不算很大。
我写了个程序,先做回归,然后吧估计出来的线,画在观测值的图上。
程序很简单。
proc sgplot data=test;
scatter x=a y=b;
reg x=a_reg y=b_reg;
run;
其中a,b是观测值,一共400多万条观测。
a_reg, b_reg是我从400多万条观测中挑选出来的,用以回归的观测值。因为一来数据集比较大,二来尾部有些观测值很差,我只需要中间一段,所以挑选了一下。
然后出现了一个奇怪的错误。
ERROR: Java virtual machine exception. java.lang.OutOfMemoryError: Java heap space.
看起来是memory不够了,但是我选取的,用以回归的观测值已经不多了,为啥还会这样呢?
我进一步用proc reg直接做回归,没有任何问题,回归的各项参数都能得到,但是就是画图这一步完成不了。
而当我改用另外一个较小的数据集,大约100万观测的时候,整个程序又没有任何问题了。看起来似乎是观测集的大小,影响了画图。但是我做回归线图的时候,并没有用到那么多观察值啊?
然后我再测试,单独只画观测值(400万)或者单独只画回归线,都没有任何问题,唯独画一起,就出现上面的错误了。。。
求高人指点~