mpfitfun을 이용한 multiple linear regression

게시판 IDL Q&A mpfitfun을 이용한 multiple linear regression

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5040 Reply
      bjy512
      회원

      안녕하세요! 항상 이곳에 글을 많이 참조해서 idl 프로그램을 돌렸는데 이렇게 글을 쓰는건 처음이라 긴장되네요ㅎㅎ

      현재 저는 제목과 같이 multiple linear regression 모델을 만들려고 하고 있습니다.

      독립변수는 aerosol optical thickness, wind speed, temperature, relative humidity, height of planetary boundary layer 이며 종속변수는 pm 10의 농도입니다.

      jacobian=dblarr(5,number)
      jacobian=[transpose(aot),transpose(ww),transpose(temp1),transpose(rr),transpose(hpbla)]

      p=[1.,1.,1.,1.,1.,1.]

      weights=replicate(0.5,5,number)
      err=replicate(0,number)

      weights(0,*)=0.01
      weights(1,*)=0.5
      weights(2,*)=0.01
      weights(3,*)=0.01
      weights(4,*)=0.01

      myfunc=’p[5] + p[0]*x[0,*] +p[1]*x[1,*] + p[2]*x[2,*] + p[3]*x[3,*] + p[4]*x[4,*] ‘
      result=mpfitexpr(myfunc,jacobian,pm,p,err=err,weight=weights)
      for i=0, number-1 do begin
      est_pm(i)=result[5] + result[0]*jacobian[0,i] +result[1]*jacobian[1,i] + result[2]*jacobian[2,i] + result[3]*jacobian[3,i] + result[4]*jacobian[4,i]
      endfor

      print,correlate(pm,est_pm)

      그리고 결과는 다음과 같습니다.

      Iter 1 CHI-SQUARE = 14307411. DOF = 28008
      P(0) = 0.00000
      P(1) = 0.00000
      P(2) = 0.00000
      P(3) = 0.00000
      P(4) = 0.00000
      P(5) = 0.00000
      Iter 2 CHI-SQUARE = 12856524. DOF = 28008
      P(0) = 1.07795
      P(1) = 0.211403
      P(2) = 0.00272724
      P(3) = 0.0157495
      P(4) = 0.000587396
      P(5) = 0.795513
      Iter 3 CHI-SQUARE = 10267837. DOF = 28008
      P(0) = 3.25746
      P(1) = 0.630369
      P(2) = 0.00818722
      P(3) = 0.0472746
      P(4) = 0.00175172
      P(5) = 2.38876
      Iter 4 CHI-SQUARE = 6341225.3 DOF = 28008
      P(0) = 7.78086
      P(1) = 1.44129
      P(2) = 0.0191441
      P(3) = 0.110474
      P(4) = 0.00400585
      P(5) = 5.59057
      Iter 5 CHI-SQUARE = 3314531.7 DOF = 28008
      P(0) = 22.8257
      P(1) = 1.86361
      P(2) = 0.0419680
      P(3) = 0.210710
      P(4) = 0.00438853
      P(5) = 12.6728
      Iter 6 CHI-SQUARE = 3115033.6 DOF = 28008
      P(0) = 32.0562
      P(1) = 0.856479
      P(2) = 0.0693088
      P(3) = -0.131637
      P(4) = -0.00757064
      P(5) = 31.9358
      Iter 7 CHI-SQUARE = 3066579.7 DOF = 28008
      P(0) = 33.5698
      P(1) = 0.642435
      P(2) = -0.0595270
      P(3) = -0.316299
      P(4) = -0.0113180
      P(5) = 81.5952
      Iter 8 CHI-SQUARE = 3020367.5 DOF = 28008
      P(0) = 36.0046
      P(1) = 0.514486
      P(2) = -0.368683
      P(3) = -0.326099
      P(4) = -0.0100530
      P(5) = 169.769
      Iter 9 CHI-SQUARE = 3000701.9 DOF = 28008
      P(0) = 38.9420
      P(1) = 0.368825
      P(2) = -0.742651
      P(3) = -0.326625
      P(4) = -0.00826621
      P(5) = 275.618
      Iter 10 CHI-SQUARE = 3000701.9 DOF = 28008
      P(0) = 38.9420
      P(1) = 0.368825
      P(2) = -0.742651
      P(3) = -0.326625
      P(4) = -0.00826621
      P(5) = 275.618
      38.942010 0.36882528 -0.74265132 -0.32662464 -0.0082662146
      275.61782
      % Compiled module: CORRELATE.
      0.38675487
      마지막의 correlation 값은 제가 만든 multiple linear regression 모델을 바탕으로 만든 pm 10의 농도와 실제 그때 pm10 의 농도 간의 correlation입니다.

      제가 생각하기에는 낮은 correlation 값이 높은 CHI-SQUARE에 의한 것이라고 생각하는데 정답인지는 잘 모르겠네요ㅠ 그리고 weight와 error값을 주는 것도 정확히 알고 하는 것이 아니라 무작위로 주다 보니 저런 값이 나온것 같기도 합니다. 낮은 correlation 값을 고쳐주기 위하여 양의 correlation 값을 가지는 aot 와 wind speed에 weighting을 줬으나 오히려 correlation이 낮아지는 기이한(?) 현상을 보게 되었습니다…

      학부 졸업을 눈앞에 뒀는데 여전히 idl은 어렵네요ㅠㅠ 바쁘신 와중에 긴글 읽어주셔서 감사드리고 혹시 chi-square를 줄이는 방법이나 correlation coefficient를 올릴 수 있는 방법이 있다면 꼭 알고 싶습니다!! 감사합니다~

    • #5041 Reply
      Sangwoo
      회원

      MPFIT 라이브러리를 잘 사용하지않는 유저의 입장에서 말씀드리자면, 올려주신 코드에서 MPFITEXPR 함수가 사용되는데 있어서 입력 인자들에 대한 정의나 함수 설정 등이 적절하게 되어 있는지에 대해서는 판단이 잘 서지는 않습니다. 저도 사용법을 자세히는 모르기 때문에 이 부분에 있어서 더 자신있는 설명을 드리기는 어렵습니다. 다만 IDL 자체적으로도 REGRESS라는 다중선형 내삽용 함수가 있습니다. 이걸 한번 사용해보는 것은 어떨까 제안드려봅니다. 저도 유사한 작업을 할 때 이 함수를 종종 사용합니다.

      그리고 단일변수이든 다중변수이든 간에 결과의 상관관계가 좋지 않은데에는 여러가지 원인이 있을 수 있고, 그걸 향상시키는 방법은 데이터 특성에 따라 다를 수 밖에 없는데요. 올려주신 코드의 내용을 보면 weight를 주는데 있어서 두번째 인자에 대하여 높은 가중치를 주고 나머지는 상대적으로 매우 낮은 가중치가 부여되어 있는데, 두번째 인자가 가장 상관성이 높다는 판단을 근거로 한 것인지 궁금합니다. 그리고 weight는 인자 갯수인 5개의 값들로만 구성되는 것이 맞을 것 같은데, 코드의 내용을 보면 5xnumber의 구조를 갖는 배열로 정의되어 있거든요. 이 부분에 대한 확인도 필요해 보입니다.

      Chi-Square의 값이 수렴후에도 여전히 큰 것을 보면 최적의 내삽 결과가 나온 상태는 아직은 아닌 것 같습니다. 5개의 인자들에 대하여 개별적으로 상관관계를 따져본 후 가중치를 결정하는 것도 필요해 보입니다.

    • #5043 Reply
      bjy512
      회원

      상세한 답변 너무 감사드립니다!

      다시 한번 해봐야 겠네요ㅠㅠ

2 답변 글타래를 보이고 있습니다
'mpfitfun을 이용한 multiple linear regression'에 답변달기
글쓴이 정보: