抜けデータに999999を入れるってどんな腐っているプログラムやと愚痴をいいつつ 和を計算するところでデータの値が999999のときを無視するようにIF文を挿入して必要なら 個数を数えるのを追加するんじゃないかな。 total =0.0; n =0; for(i=0;i60;i++) if(data[i] != 999999) /*magic*/ {
total = total + data[i];
n = n+1; }
return total/n; 相当ですよね。あとはn=0で割ってはいけないかNaNでもいいかに応じてもうひとつ条件分岐をいれるか。
逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
私自身は結婚したことはありませんが、研究員の経歴は持っているので、研究がどんだけ大変かはある程度判ります。で、その上で、私が直接知っているだけでもこんなに…
fjの教祖様
Re: (スコア:1)
データ解析はフォートランを使っていて、
データに対して「補間する」「計算する」「フィルタかける」「計算2をする」・・・
という処理の順序は大枠では判っているのですが、フォートランのプログラム自体を
ひとつひとつ、的確に結果が出るように作っている最中だったりもして
そこで時間が掛かっています。
また、処理は「大枠で」判っているだけであって、細かな処理がまだ理解出来ていなかったり
新しいプログラムを作る必要があるなぁとかどうやったら出来るんだろうとか調べものもあったり
色々やっているうちに一日があっという間に経ってしまっています。
うまくルーチン化させて自動処理が出来るようになればと思っているのですが
オットは「今すぐにでも」結論を出したいようで、どうしようかと混乱しています。
うまくルーチン化出来るようになるまでの間待ってもらえれば良いのですが・・・。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
頭を使う仕事は、夜になると気づかないうちに効率が低下しているので、 電車のあるうちに帰った方がトータルでは最終的に速く終わると 思われます。
> 「補間する」「計算する」「フィルタかける」「計算2をする」・・・ > という処理の順序は大枠では判っている
たぶん、最初に補間するのは間違っていて、欠落値があっても計算できる方法を 考える。そういう計算ができるプログラムを探す/改造する/書くの順で検討するところでしょう。
観測値を説明するモデル・パラメーターの選択だったら、最尤法か ベイズ推定がフレームワークとしては順当。
仮に上の順序でやるとしても
> フォートランのプログラム自体を > ひとつひとつ、的確に結果が出るように作っている最中だったり
得意でもないFORTRANのプログラムをscratchから書いていたら、時間がいくらあっても 足りないでしょう。FORTRANを使うべき理由は、ほとんどの処理を行うプログラムがすでに FORTRANでかかれているので、それをちょっと直すだけ。FORTRANしかまともなコンパイラがない 計算機を使う。FORTRANしか使えない特定のライブラリを使う。FORTRANが得意。 FORTRANがすごく得意な人が近くにいてききやすい。 のどれかにあたる場合に限られると思われる。
許容できる速度、正確さで処理できる言語のなかでもっともシンプルな記述が 可能な言語を選ぶところが本線。
別解としては、共同研究。 指導教官と相談後、隣の研究所の人に、やりたいこと、その意義、困っていることを プレゼンテーションして回って、興味をもってくれた人とデータ解析について 共同研究することにすると研究の質も向上して自分の時間も増える。
Scienceの傾向として、多くの人がかかわる共同研究が増えています。
全側面を一人でできる時代でもありません。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
敷居が高いというか、学生同士はあまり交流が無いというか・・・
でも確かに共同研究ぽい事をされている方はいるようなので
一度ポスドクに相談してみるのも手かもしれませんね、ありがとうございます。
フォートランを使っている理由については
>ほとんどの処理を行うプログラムがすでに FORTRANでかかれているので、それをちょっと直すだけ
>FORTRANがすごく得意な人が近くにいてききやすい
というのが近いのですが、
・既に書かれているルーチンプログラムはある
(但しバグとか沢山あるし対応するデータフォーマットとか少し違うから直して使うようにと言われた)
・指導教官がフォートランなら知ってる
という事で色々と手間取ってはいますがフォートランを使った解析をしています。
ただ、ルーチンになっている部分はほぼ直しが出来ているのですが、それとは別に
今回のデータに対して独自に必要な処理プログラムを作らなければならず
実際はそこに時間が掛かっています。
>得意でもないFORTRANのプログラムをscratchから書いていたら、時間がいくらあっても 足りないでしょう。
まさにこの状態ですねorz
じゃぁ他に何か得意な言語はあるか?と言われると、特に無いですorz
学部時代に授業でC++を少し習いましたが、データ解析出来るほどのレベルではありません。
今はもう忘れている事も多いので、まだフォートランのほうが今は良いかな、というレベルです。
あと、指導教官が丁寧に一から十まで手取り足取り教えてくれるかというと
やはり「自分で有る程度まで調べて学んで欲しい」と思っている(と推測される)ので
勿論お願いすれば参考書を貸してくれたり、口頭での処理方法の伝達はしてくれるのですが
それをコードにする作業はなるべく自分でやっていて、そしてそこが一番大変だったりします。
>たぶん、最初に補間するのは間違っていて、欠落値があっても計算できる方法を 考える。
これも補間がうまくいかない時に考えたのですが
ルーチンになっているプログラムをそういった感じに変えるにはどうすれば良いか
アイデアが全く出て来なかったので、初めに補間する、という方法を取り入れました。
おおまかな話をすると、たとえば10秒中数秒抜けデータが発生していたとして
解析ルーチンその1は1分ごとにヘッダーを付けて計算、抜けデータ箇所には999999の値が入る
解析ルーチンその2では1分平均値をとる(60秒なのでデータは60個・・・)
→999999の値が入ったところまで平均値計算に使われて1分平均値結果がおかしなことに
という感じで、どこをどううまく変えればスムーズに平均値が出せるのやらと思って
安直に「はじめに補間すればうまくいくよね・・・」と思ってやってしまっています。
>最尤法か ベイズ推定
そもそも統計学はそれほど得意でなく・・・一応物理学での統計力学とかは学んでいますが
それをどう応用するか、というところまでは、残念ながらあまり学んでいません。
それも含めてもしかしたら「お隣さん」と交流してみるべきなのかしら・・・?
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
おおまかな話をすると、たとえば10秒中数秒抜けデータが発生していたとして
解析ルーチンその1は1分ごとにヘッダーを付けて計算、抜けデータ箇所には999999の値が入る
解析ルーチンその2では1分平均値をとる(60秒なのでデータは60個・・・)
一分平均を出すだけなら、抜けデータなんか入れないで
有効なデータの個数を数えて、データの和/データの個数を計算すればいいだけですね?
補完をしていいというロジックがありません。
抜けデータに999999を入れるってどんな腐っているプログラムやと愚痴をいいつつ
和を計算するところでデータの値が999999のときを無視するようにIF文を挿入して必要なら
個数を数えるのを追加するんじゃないかな。
total =0.0; n =0;
for(i=0;i60;i++)
if(data[i] != 999999) /*magic*/
{
total = total + data[i];
n = n+1;
}
return total/n;
相当ですよね。あとはn=0で割ってはいけないかNaNでもいいかに応じてもうひとつ条件分岐をいれるか。
# 統計計算の記述量が減るという意味では、Rを勉強しておくといいんじゃないかなあ。
# 書きやすいだったらruby
お隣さんとの共同研究が成立するかは、お隣さんにとっても面白い問題が含まれているか
に依るけど、交流一般は広げておいたほうがいいでしょう。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
確かにデータのカウントが必要かなぁと思ってみたのですが
それがどうすればカウント出来るのかと悩んでいたので
補間に逃げていた部分でもあります。
(といって逃げた先でも少々つまづいていますが・・・)
平均値を出す計算式部分がプログラム内でちょっと複雑だったりもしてるんですが
ただ、少し時間をかけてそっちの方法もチャレンジしてみます。
「お隣さん」で地物データ扱ってる人が居れば良いなと思いつつ。
ありがとうございます。
書き直したほうがいいかも (スコア:1)
平均値を出す計算式部分がプログラム内でちょっと複雑だったりもしてるんですが
ただ、少し時間をかけてそっちの方法もチャレンジしてみます。
平均値の計算が複雑なようだったら、そのプログラムは信用できないので捨てて
書き直したほうがいいかも:(
http://srad.jp/~Kando/journal/494255 [srad.jp]
計算誤差を気にして絶対値の小さいほうから足すとかしていたら知らないけど、
まずそこまではやっていないことでしょう。
「お隣さん」で地物データ扱ってる人が居れば良いなと思いつつ。
機構が一緒になってから融合プロジェクトをやろうとしているでしょう:p
いま、扱っていなくても、テーマが面白そうならいいんじゃないかな。
Re:書き直したほうがいいかも (スコア:1)
なんか一応平均二乗誤差っぽい計算もやっているような。
リンク先を読んでみると、今持っている既存のプログラムに
バグが多い理由がなんとなく判るような。
そうですね、もいちどちゃんと見つめ直してみますm(_ _)m(見つめるだけじゃダメだっ)
#>融合プロジェクト
そこまで知っているとはなんとお詳しい・・・w;
Re:書き直したほうがいいかも (スコア:1)
なんか一応平均二乗誤差っぽい計算もやっているような。
それは、平均値を計算したあとにしかできない計算なので、
平均値の計算と混ざっているならその一連のプログラムは信頼性が低いので
捨てたほうがいいというほうの証拠でしょう。
Sigma (x-m)^2
を Sigma x^2 - 2 m Sigma x + n m^2
= Sigma x^2 - n m^2
だからx^2の和を計算しておけばone pathで計算できるじゃんと
思うのは、数値計算の誤差の挙動を知らない半可通とみなされます。