爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3180|回复: 3

[求助] 一元回归分析的代码问题

[复制链接]

新浪微博达人勋

发表于 2015-5-3 14:29:27 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
需要做云南(1960年到2011年52个春季)平均温度(做过标准化处理)与necp全球500hPa  omega(也是春季平均,且做过距平处理)的回归分析并做显著性检验
以下是求回归系数b的代码
real varx(52),sumvarx,avevarx,dvarx(52),vary(144,73,52),sumvary(144,73),
avevary(144,73),dvary(144,73,52),sumdvary(144,73),re(144,73)
open(1,file='e:\730\dat\omega_d_500_spring.dat',form='binary',status='old')
open(2,file='e:\730\dat\tema_spring_standardization.dat',form='binary',status='old')
open(3,file='e:\730\dat\re_omega_d_500_spring.dat',form='binary',status='replace')
read(1)(((vary(x,y,t),x=1,144),y=1,73),t=1,52)
read(2)(varx(t),t=1,52)

!以下是求预报因子(云南春季平均温度)距平平方和。(因为坐过标准化,因此距平等于本身)
sumvarx=0
do t=1,52
  sumvarx=sumdvarx+varx(t)**2
enddo

!以下是对预报量距平与预报因子距平之积求和
sumvary(1,1)=0
do y=1,73
  do x=1,144
    do t=1,52
       sumvary(x,y)=sumvary(x,y)+vary(x,y,t)
    enddo
  enddo
enddo

sumdvary(1,1)=0
do y=1,73
  do x=1,144
    do t=1,52
       avevary(x,y)=sumvary(x,y)/52
       dvary(x,y,t)=vary(x,y,t)-avevary(x,y)
       sumdvary(x,y)=sumdvary(x,y)+dvary(x,y,t)*dvarx(t)
    enddo
  enddo
enddo

!以下是求回归系数
do y=1,73
  do x=1,144
     write(3)sumdvary(x,y)/sumdvarx
  enddo
enddo
close(1)
close(2)
close(3)
end

以下是做t检验的代码(感觉就是这部分不对)
real varx(52),sumvarx,c,vary(144,73,52),sumvary(144,73),avevary(144,73),
dvary(144,73,52),Q(144,73),re(144,73),tt(144,73),estimator(144,73,52)
open(1,file='e:\730\dat\omega_d_300_spring.dat',form='binary',status='old')
open(2,file='e:\730\dat\tema_spring_standardization.dat',form='binary',status='old')
open(3,file='e:\730\dat\re_omega_d_300_spring.dat',form='binary',status='old')
open(4,file='e:\730\dat\test_omega_d_300_spring.dat',form='binary',status='replace')
open(5,file='e:\730\dat\omega_d_300_spring_estimator.dat',form='binary',status='replace')
read(1)(((vary(x,y,t),x=1,144),y=1,73),t=1,52)
read(2)(varx(t),t=1,52)
read(3)((re(x,y),x=1,144),y=1,73)
!print*,vary(34,54,33)
!print*,varx(44)
!print*,re(55,33)

!以下是求预报因子距平平方和
c=0
do t=1,52
  c=c+varx(t)**2
enddo
!以下是求残差平方和Q
do x=1,144
  do y=1,73
    do t=1,52
      dvary(x,y,t)=vary(x,y,t)-re(x,y)*varx(t)
    enddo
  enddo
enddo
Q(1,1)=0
do x=1,144
  do y=1,73
    do t=1,52
      Q(x,y)=Q(x,y)+dvary(x,y,t)**2
    enddo
  enddo
enddo

!以下是做t检验,写出估计量vary
do t=1,52
  do y=1,73
    do x=1,144
      tt(x,y)=sqrt(50*(re(x,y)**2)*c/Q(x,y))
      write(4)tt(x,y)
      estimator(x,y,t)=re(x,y)*varx(t)
      write(5)estimator(x,y,t)
    enddo
  enddo
enddo

close(1)
close(2)
close(3)
close(4)
close(5)
end

我做出来的结果是,相关显著的地方预报量vary与估计量vary相差很远,这不对吧?
我自己检查了几次程序逻辑,“没发现”问题,
所以请各位大神帮看程序有没有逻辑错误,或者说算法错误什么的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-3 16:49:58 | 显示全部楼层
zhouling 发表于 2015-5-3 15:13
貌似你写的t-检验公式有问题,楼主可参考http://bbs.06climate.com/forum.php?mod=viewthread&tid=18528&ex ...

我之前弄错了   我写的是对回归系数是否为0的F检验  只是统计量用的是t遵从自由度为(n-2)的t分布
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2015-5-3 14:34:07 | 显示全部楼层
有个地方打错了,就是求回归系数那,sumvarx少打了个d  应该是sumdvarx,还有定义变量的地方也是掉了个d  不过这都不是问题所在
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-3 15:13:14 | 显示全部楼层
貌似你写的t-检验公式有问题,楼主可参考http://bbs.06climate.com/forum.p ... p;extra=&page=1
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表