SPM12におけるspm_defaults.mの設定 【重要】

SPM12の正式版が出て、気づいたのですが、spm_defaults.mの設定に関して、重要な変更が行われました。

今後は、spm_defaults.mは直接いじってはいけないことになりました。
これは、非常に理にかなっていることで、これまで、spm_defaults.mを修正しても、アップデートによってこれが上書きされてしまうことがありました。これを回避するために、新たな方法が導入されました。

「すぐできるVBM」のp.22 「8.SPMの設定」に関しての記載を以下のように訂正します。

spm_defaults.mの最初の記載のスクリーンショットは以下のようになります。

spm_defaults_screenshot

シンプルにいうと、以下のようになります。

− spm_defaults.mは編集しない
– MATLABのパスが通っているところにspm_my_defaults.mを作成する

私がSPMをインストールして行う作業は、defaults.stats.maxmemを編集することです。これは、統計の際に、Matlabにメモリをどの程度まで使わせてあげるかという設定です。デフォルトは2^26バイトで、64MBになります。せっかくメモリを多く積んでいる場合、これはもったいないです。そのため、私は2^31(=2GB)としています。

Matlabから以下のようにタイプします。

edit spm_my_defaults.m

そこに以下のように記載します。

global defaults
defaults.stats.maxmem      = 2^31;

スクリーンショットを以下に示します。

spm_my_defaults_screenshot

これを保存するのですが、MATLABのパスが通っているところならばいいのですが、
無難なのは、ドキュメントフォルダの下のMATLABフォルダもしくは、SPM12のフォルダ内に保存したらよいと思います。

このうえで、SPMを起動すると、きちんと認識されると、Matlabのコマンドウィンドウ内に以下の表示がなされるはずです。

spm_screenshot_modified_defaults

これで設定が終了です。これは重要な設定ですので、チェックするようにしてください。

Print Friendly, PDF & Email

26 thoughts on “SPM12におけるspm_defaults.mの設定 【重要】

  1. お忙しいところ誠にありがとうございました。参考にしてやってみます。よろしくお願いいたします。

    • 根本先生いつもご指導誠にありがとうございます
      感謝いたします
      先生のご指導により
      1 -1 0
      0 1 -1
      のコントラストを設定して、F検定の個人解析を行いました
      この時各被験者にess0001
      というmatフィアルができました
      説明では、F検定では、A≠B≠Cの領域が示されるようになるとのことだとおもいます。
      このあとで、いわゆるpost-hocとして、具体的に、どの条件とどの条件間に有意差があるのかを検定したいときは、どのようにコントラストを設定して、個人解析を行えばよいのでしょうか?
      F検定のまま、新たなコントラストを設定して行えるのか?それとも、peired t-testにして、p値を修正するのでしょうか? 全く違う方法でしょうか?
      SPM解析では、初歩的なことかもしれませんが、なかなか自分の力では、解決できません。
      お忙しいところ誠に申し訳ありませんが、ご教授いただけると幸いです。

      • 石井先生

        Post-hoc は、通常と同様に t-test を行う形になります。

        よろしくお願いします。

        根本清貴

        • 根本先生
          いつもご指導誠にありがとうございます
          ’’Post-hoc は、通常と同様に t-test を行う形になります。’’
          その場合、F検定の結果有意だった領域に限定する必要がでてくるかと思うのですが、結果の表し方はどうすればよいのでしょうか。
          マスクの機能かなにかを使用するのでしょうか。
          わからないことが多く申し訳ありませんが、ご教授いただけると幸いです。
          お忙しいところ誠に申し訳ありませんが、どうかよろしくお願いいたします。

          • F-testのあと、t-testをすると、統計の閾値が同じであれば、原則、F-testで有意だった領域のみ表示されます。

            なので、まずは、それを確認されてはいかがでしょうか。

  2. お忙しいところご指導誠にありがとうございました
    また、わからないことが出たら、コメントしたいと思います
    今後ともご指導よろしくお願いいたします

    • ANOVA within subjectに関しては、以下を参考にしていただけたらと思います。
      https://www.nemotos.net/?p=759

      2群の縦断解析ですが、ANOVA within subjectということは、おそらく縦断解析を念頭に置いていると思われますのでFlexible factorial designがわかれば、ANOVA within subjectもコントラストがわかるかと思います。

  3. 日本大学松戸歯学部有床義歯補綴学 石井智浩です
    いつもご指導誠にありがとうございます

    SPM12を用いて脳活動領域の検定を行う際に同一被験者に対してA,B,Cの3条件でfMRI撮影を行い解析を行う際には、F contrast を用いることができると思うのですが、この場合に コントラストの付与の仕方がわかりません。 
     A B C の条件で F contrast を -1 1 0 では A C の結果になりますでしょうか? また、F contrast を 1 -1 0 では A > B, にはならずに、 -1 1 0 の結果と同じ結果になります。根本的にF contrastの付与の仕方が理解できていないと思います。
    さらに、グループ解析では、F-test within subject を用いることができると思うのですが、この時の解析の仕方がわかりません
     F contrast の説明書やyoutubeをみても、理解するのが難しいです。
    お忙しいところ誠に申し訳ありませんが、ご指導いただければ幸いです。
    どうかよろしくお願いいたします。

    • F-contrast の帰無仮説は A=B=C となります。
      A=B
      B=C
      をコントラストとして指定する必要があります。

      そのため、

      1 -1 0
      0 1 -1

      として指定します。2行になります。A=Cの分はどうなるだという質問が出るかもしれませんが、A=BとB=Cがなりたつならば、A=Cは自動で成立するのでいれる必要はありません。

      ちなみに、F-contrastでは、A≠B となる領域が表示されます。つまり、A

  4. お忙しいところ誠に、ご指導ありがとうございます 感謝いたします
    個人解析からやりなおしてみます
    また、疑問がでましたら、ご指導よろしくお願いいたします

  5. 早速の返答ありがとうございます
    そこから解析方法が間違っています
    私は個人解析ではA,B,Cそれぞれ別に解析をしてconファイルを作成していました。グループ解析からF-testを行っていました。

    • それならば 1st level で行っていただければ大丈夫かなと思います。

  6. 日本大学松戸歯学部有床義歯補綴学 石井智浩です
    いつもご指導誠にありがとうございます

    SPM12を用いて脳活動領域の検定を行う際に同一被験者に対してA,B,Cの3条件でfMRI撮影を行い解析を行う際には、F-test within subject を用いることができると思うのですが、この場合に コントラストの付与の仕方がわかりません。 
     また、F-test within subjectで有意だという結果が得られたあと、Post-hocとしての解析はどのように行えばよいでしょうか。
    お忙しいところ誠に申し訳ありませんが、ご指導いただければ幸いです。
    どうかよろしくお願いいたします。

    • SPMでは、被検者内の解析は 1st-level で、グループ解析は 2nd-level で解析をします。
      なので、ご質問の内容に関しては、1st-level でコントラストをたてることになります。

      まず、ここに関しては大丈夫でしょうか?

  7. お世話になっております。
    先生の著書をみていて、SPMの初期設定(メモリ)の変更方法を検索して、ここにいきつきました。
    ひとつ質問させてください。

    記載の通りに実施し、パスの通っているspm12内にspm_my_defaults.mを保存できました。ただ、コマンドウインドウにspmといれても、赤で囲まれたような記載は表示されずにspmが起動されます。設定が完了できていないのでしょうか。

    ご教示いただけましたら幸いです。

    • ご質問ありがとうございます。

      そのような場合には、まず、spmのパスを確認するのがいいですね。

      Matlabから以下をタイプしてみてください。

      which spm

      この結果は、ご自身の考えているSPMのパスと同じでしょうか?

      また、spm_my_defaults.mのパスも確認しましょう。

      which spm_my_defaults.m

      このパスは、ご自身が保存されたパスと同じでしょうか?
      もしかしたら、別のところにすでに spm_my_defaults.m があるのではないかと思いました。

      なお、defaultsが正しく設定されたかは、以下をご確認ください。

      Matlabから以下をタイプします。

      defaults = spm_get_defaults
      
      defaults = 
      
        フィールドをもつ struct:
      
               cmdline: 0
                    ui: [1×1 struct]
              renderer: 'opengl'
                images: [1×1 struct]
                   mat: [1×1 struct]
                   tbx: [1×1 struct]
                 dicom: [1×1 struct]
                 stats: [1×1 struct]
                  mask: [1×1 struct]
           slicetiming: [1×1 struct]
               realign: [1×1 struct]
                 coreg: [1×1 struct]
                unwarp: [1×1 struct]
             normalise: [1×1 struct]
          deformations: [1×1 struct]
                smooth: [1×1 struct]
                imcalc: [1×1 struct]
                   old: [1×1 struct]
              modality: 'PET'
      
      

      たとえば私は defaults.stats.maxmem を 2^31 に設定しましたので、この値を確認します。

      defaults.stats.maxmem
      
      defaults.stats.maxmem
      
      ans =
      
         2.1475e+09
      
      2^31
      
      ans =
      
         2.1475e+09
      
      

      正しくセットされていることがわかります。

      • ご返信ありがとうございます。
        パスはuserのなかのspmフォルダに設定したつもりです。
        確認してみましたが、

        >> which spm
        /Users/akaikeshun/spm/spm12/spm.m
        >> which spm_my_defaults.m
        /Users/akaikeshun/spm/spm12/spm_my_defaults.m

        となりました。

        しかし、

        >> defaults.stats.maxmem

        ans =

        2.1475e+09

        となり、2^31が設定できていないようです。

        パスの設定に問題はございますか。

        お手数をおかけして恐縮ですが、ご教示いただけてましたら助かります。

      • すみません、返信が遅くなりました。

        提示いただいたとおりに入力しますと、

        >> which spm
        /Users/akaikeshun/spm/spm12/spm.m
        >> which spm_my_defaults.m
        /Users/akaikeshun/spm/spm12/spm_my_defaults.m

        のようになります。
        user内のspm/spm12を指定できているようにみえます。

        しかし、

        >> defaults.stats.maxmem

        ans =

        2.1475e+09

        と2^31の変更が反映されていません・・・

        パスの指定は上記の指定で問題ないでしょうか?

        • あっていますよ。

          Matlabで、

          2^31

          とタイプしてみてください。

          2.1475e+09

          となるかと思います。

          • こんな時間に申し訳ありません。

            理解いたしました。
            ありがとうございます。

  8. Dear Sensei,
    I follow your advice and there is no error.
    However, I can not save the spm_my_defaults., in the spm12 folder so that I just saved it in Document folder.
    Is it ok for this?
    Thank you very much!

    • Dear Nguyen,

      No problem to save the file in Document folder as long as the folder is among your MATLAB path.

  9. Dear Sensei,
    Thank you for your reply.
    I am using Window 7.
    In spm_my_defaults.m , I copied the contents of spm_defaults.m and edited the max mem as you mention in your post.
    MATLAB is set in my C:\\ programfiles\MATLAB

    • Dear Nguyen,

      OK, in your spm_my_defaults.m, just put the following two lines;

      global defaults
      defaults.stats.maxmem = 2^31;

      and remove othere lines and save.

      Then errors will not be displayed anymore, I hope.

  10. Dear Sensei,
    I tried to create the spm_my_defaults in the folder of spm12 but it said I could not do that.
    So I tried to save in my document file. Then when I run the spm in matlab it came out a long error message.
    So could you please explain a little more about creat new file spm_my_defaults.
    Thank you very much!

    • Dear Nguyen,

      Please let me know the following;

      1) What OS are you using?
      2) What did you write in your spm_my_defaults.m?
      3) Is MATLAB path set on your home directory?

kiyotaka へ返信する コメントをキャンセル

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください