HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1205
pi12345心理学実験のプログラミングで困っています21解決


pi12345

リンク

2011/12/5(Mon) 22:09:44|NO.43524

心理学実験で心的ローテーションをしようと思っています。
HSP使用のプログラミングをやろうと思っていますが
エクセルやワードしか普段使ったことがありません。
本や、インターネットでのやり方を参照していますが
なかなか用語が難しくできません。
やりたいことが簡単にできないでしょうか?
(1)個人情報(名前、年齢、性別)
(2)練習、
(3)画像提示、
(4)反応時間計測、
(5)誤答率、
(6)試行数の確保(必ず10試行取る)、
(7)エクセル上へデータ集計をしたい
・・・のですが、用語が難しくて途方に暮れています。

どなたか、よろしくお願いします。



この記事に返信する


GENKI

リンク

2011/12/5(Mon) 22:30:08|NO.43525

さて、とりあえずそれら項目の中で具体的に何をしたいのかさっぱり分からないわけですが…。心理学を履修している人がいればわかるのかもしれませんが。
何がしたいのかは具体的に教えてくれないと、答えたい人も答えようがありません。

でもとりあえず推測してみました。しかしやっぱり良く分からない項目もあります。どこまであってるかな。

> (1)個人情報(名前、年齢、性別)
被験者の情報を入力して保存したい。

> (2)練習、


> (3)画像提示、
画像を表示したい。

> (4)反応時間計測、
作業時間を計測したい。

> (5)誤答率、
入力された結果を評価したい。

> (6)試行数の確保(必ず10試行取る)、
作業じゃなくて何かの条件?

> (7)エクセル上へデータ集計をしたい
取得した情報を保存したい。
後処理で使いたいのでエクセル形式がいい。


なんだか全部エクセルのマクロで作ってしまったほうが簡単な気がしますが…。



> 本や、インターネットでのやり方を参照していますが
> なかなか用語が難しくできません。

もしかして答えそのものを探そうとしていませんか?プログラムは単純な一つ一つの積み重ねですよ。



pi12345

リンク

2011/12/5(Mon) 23:27:59|NO.43527

回答本当にありがとうございます。

わかりにくく申し訳ありません。

やりたい内容は

1、カタカナ4文字を「ex:アマガサ」を用意します。
これを、4文字をそれぞれ 0°、60°120°、180°、240°、300°
と回転させたセット
同じ4文字カタカナを鏡映文字(鏡で映したような逆さ文字)にしたもので
この上記の角度に回転させたものの合計12通りを図形として用意。

2、この要領のものを15〜20の4文字カタカナを用意。

3、↑上記で用意した文字を提示してから被験者が反応する時間と反応の正誤を測定したい。
ex:画像提示↓

 注意点「×」
    ↓
  0°の4文字カタカナ「アマガサ」
    ↓
「以降はできれば角度と鏡映文字0°〜300°をランダムに提示したい。」

4、反応は実像(鏡の文字ではない)だなと判断した場合は例えば「F」キー、
鏡映像だなと判断した場合は「J」キーを押すようにする。

5、このデータを保存したい。


(1)個人情報(名前、年齢、性別)
被験者の情報を入力して保存したい。
※ご理解いただいたその通りです。

(2)練習
これからこんな作業をします。という
3、をひと通り被験者に練習として行ってもらうものでデータは取らなくてOK

※(3)、(4)、(5)もご理解いただいたその通りです。

(6)は結果が4文字カタカナを15通り用意したとして、試行数は15×12=180
となります。
そうなると、人によってはキーを押すタイミングが早まってしまったり、
他のキーを押してしまったり「失敗」が起こるので
この明らかな失敗は数えないものとして、失敗した場合はもう一度、提示して
有効データを180取れるようにしたい。

※(7)はご理解いただいた通りです。

サンプルプログラムがありました。
20通りの数字が提示され、奇数なら←キーを押し
偶数なら→を押す
結果はどちらのキーが押されたかと、反応時間
失敗は999で表示されるというものがありました。

初めからでは、なんといっても難しくてかなわないので
アレンジできるものかと思いました・・・

まぐれで一度、画像提示ができましたが・・・その後エラーになるし

というところです。



GENKI

リンク

2011/12/6(Tue) 00:38:36|NO.43528

ヘルプについてるHSP入門は読んで実践済みという前提でよいのかしら。
でもまだ慣れてないようなので簡単なとこからサンプル提示してみる。
あえて細かい説明は除いています。ヘルプと格闘して読み方を習得するのも必要なことです。

;----------------------- ;1、カタカナ4文字を「ex:アマガサ」を用意します。 ; screen 0 ;メインのウィンドウ buffer 1 ;見えないウィンドウ。作業用 ;バッファ(仮想画面)にコピー元となる画像を作成する gsel 1,0 ;picload "画像ファイル名.jpg" ;画像ファイルあるならこんな感じで読み込めます。 ;↓このサンプルでは画像用意してないんで画像の代わりです。 color 255,127,127 : boxf : color ;適当に背景塗りたくって… mes "画像ファイル\nあいうえお\nABCDEFGHIJKLMN\n↑絵の代用" ;適当な文字を書いてみる… ;バッファからメインのウィンドウに画像をコピーします。 gsel 0,1 gcopy 1,0,0, 100,100 ;貼り付け pos 50,20 gcopy 1,0,0, 100,100 ;貼り付け ;回転して張り付ける pos 200, 120 gmode 0, 100, 100 grotate 1, 0,0, deg2rad(30), 200, 200 ;回転して張り付ける+左右反転 pos 400, 200 gmode 0, 100, 100 grotate 1, 0,0, deg2rad(60), -200, 200 ;あえて詳しくは書かないのでまずはヘルプをよんでみてください。 ;----------------------- ;2、この要領のものを15〜20の4文字カタカナを用意。 ; sdim mondai, 5*2, 20 ;4文字(+終了コード)x20個 ;詳しくはヘルプで「文字列のひみつ」を参照 mondai(0) = "モンダイ" mondai(1) = "アイウエ" mondai(2) = "テスト…" ;この調子でmondai(19)まで作る。 pos 0, 200 a = 1 mes mondai(a) mes mondai(0) ;詳しくはプログラミング・マニュアルの「配列変数」を参照


> まぐれで一度、画像提示ができましたが・・・その後エラーになるし

画像の読み込みで躓くのってたいていファイルの置き場所が原因だったり…。
スクリプトファイルと画像ファイルの相対的な位置関係は要注意ポイント。


3,4を見るとゲーム系のサンプルを見てみるといいんじゃないかなという気がしました。
慣れてない人にいきなりoncmdってのもなー…と。



GENKI

リンク

2011/12/6(Tue) 00:40:50|NO.43529

ある程度字を大きくすれば画像の汚さは目立たなくなるかな?




Artlet2Dを薦めていいものか迷う…。



KA

リンク

2011/12/6(Tue) 00:48:25|NO.43530

おおよそ、やりたい事の内容は分かりますが、「急いでいる」の
なら回答は困難です、仮にサンプルを出しても理解出来ないでし
ょう。「趣味の範囲でのんびりと」と言うのであれば、まず要所
要所を聞き理解していった方が良いでしょう。

この場合
(1)文字(画像としての)操作・表示方法。
(2)被験者データの扱い。
(3)試験方法。
などと、処理を細分化できます。

質問自体の難易度は高くありませんが、総合した物となると難しい
でしょう。要所ごとに質問した方が良いと思います。



pi12345

リンク

2011/12/6(Tue) 03:48:02|NO.43531

GENKIさま、KAさま

丁寧な説明とサンプル、ご意見ありがとうございました。
大変、勉強になりました。

HSP入門は読んで実践してみました。
そして、GENKIさまのくださったサンプルも応用させていただきました。

やはり、画像の取り込みはファイルの置き場所が原因だったと理解できました。

しかし、やはりKAさまのおっしゃる通り
実は「急いでいます。」

もっと早くこちらに質問させていただくべきでした。
あきらめなければいけないかなぁと反省しています。

他の実験も考えつつ、せっかくですのでギリギリまで挑戦してみようと思います。



pi12345

リンク

2011/12/6(Tue) 05:00:41|NO.43532

一応、サンプル用いてここまでできました

ama0.jpgとは
アマグモ

ama60.jpgとは
アマグモ←一文字づつ60°に回転した図になっています。



#include "timeexp.as"
time=1000
rep=2
wxy=500
SXY=400
screen 0,wxy,wxy,,0,0
MMtimer 1
repeat rep
picload "ama0.jpg"
MMawait time
cls 0
picload "ama60.jpg"
MMawait time
cls 0
loop
MMtimer 0
end

これで、先ほどあげましたことができたら良いのですが・・・(泣)



check

リンク

2011/12/6(Tue) 07:20:05|NO.43533

綺麗なコードを書こうとせずに、ちゃちゃっと上から下へ行く単純なタイプならすぐにできる。

timeexp.asというモジュールを知らないので、
どんなことをやっているかはそのコードからは読み取れないが、
とりあえず適当なカタカナを表示させることはできているとして、

(1)はinput命令を使えばできる。
(2)は(3)〜(5)をルーチン化しておいて、それを数回呼び出せばいいだろう。
(3)〜(5)はテキストの表示、時間計測はできているみたいなので、
あとはbutton命令でボタンでも用意してそれで正誤判定をする。
(6)は(3)〜(5)を適当な回数ループさせればよし。
(7)はcsv形式で書き出せばいいだろう。

csvとは人間にも読めるテキストデータで、要素をカンマで区切って表現したもの
とでも言えばいいかな。

elem1,elem2,elem3
ああああ,いいいい,うううう,ええええ
りんご,みかん,グレープフルーツ

見たいな感じだ。
たしかExcelでも読めた気がする。



pi12345

リンク

2011/12/8(Thu) 02:19:56|NO.43576

checkさま

ご指導ありがとうございます。

ただ、input命令とルーチン化とcsv形式での書き出し・・・

ヘルプを読んでも・・・
入門くらいやさしい説明でないと、よくわからない感じです。
なにしろ、用語がわかりません。
面倒なことで申し訳ありません。

それと・・・
(1)でメッセージを先に出したいと思います。
この時、入門編でやりましたことで説明表記は出来たのですが
cls 0
wxy=600
screen 0,wxy,wxy,,0,0
pos 150,150
font "MSゴシック",24
mes "4文字のカタカナが表示されます。"
mes "その文字が実像か鏡映像か判断し、"
mes "実像の場合は「実」のボタン"
mes "鏡映像の場合は「鏡」のボタン"
mes "を出来るだけ早く押してください"
mes "まず、練習問題を行います。"
mes "「次へ」をクリックし、半角英数で"
mes "性別と年齢、名前を入力してください"
button "次へ",*hata1
stop
*hata1
end

次のページ!?
次の画面に変えたいのですが…その時はendではダメなんですね
どうしたら、次画面へ行くようにできるのでしょうか?

あと、行間を空けたい時はどうしたらよいのでしょうか?

回答いただけると助かります。



check

リンク

2011/12/8(Thu) 03:47:17|NO.43577

*hata1の後にcls命令を入れれば画面はまっさらになる。
その後にまた適当なスクリプトでも書けばいい。

>行間を空けたい時はどうしたらよいのでしょうか?
文字と文字の行間の話なら、

mes "Test\n" mes "Test2\n\n" mes "Test3"
のように\nを適当な数だけ挟めばその文だけ改行される。



pi12345

リンク

2011/12/8(Thu) 04:08:20|NO.43578

checkさま

回答とわかりやすいご説明ありがとうございます。

行間できました。
cls命令 理解できました。

input命令も入力枠を表示できるものというところまでは理解できました。



pi12345

リンク

2011/12/8(Thu) 05:20:54|NO.43580

ありがとうございます。

ご指導いただいたお陰様で説明画面と(1)はできました。
↓あっているかどうかわかりませんが
一応、欲しい画面となっています。

あとは実験内容とデータ収集方法を試します。

cls 0
wxy=600
screen 0,wxy,wxy,,0,0
pos 150,150
font "MSゴシック",24
mes "4文字のカタカナが表示されます。"
mes "その文字が実像か鏡映像か判断し、"
mes "実像の場合は「実」のボタン"
mes "鏡映像の場合は「鏡」のボタン"
mes "を出来るだけ早く押してください\n"
mes "まず、練習問題を行います。"
mes "「次へ」をクリックし、半角英数で"
mes "性別と年齢、名前を入力してください\n"

objsize 100,50
button "次へ",*hata1
stop
*hata1
cls

pos 150,150
font "MSゴシック",24
mes "ログイン\n"
font "MSゴシック",16
mes "性別・年齢を選択し、名前を入力してください\n\n"

objsize 100
mes "性別"
combox a, , "男性\n女性\n"
hCombox = objinfo (stat, 2)
mes "\n"

mes "年齢"
value1 = ""
font "", 16
objmode 2
input value1, 50, 26
mes "\n"

mes "名前"
value2 = ""
font "", 16
objmode 2
input value2, 180, 26
mes "\n\n"

objsize 100,50
button "OK",*hata2
stop
*hata2
cls



GENKI

リンク

2011/12/8(Thu) 22:29:17|NO.43590

> なにしろ、用語がわかりません。

Google先生に聞いても分からないなら、ここに書き込んでみてください。
ただし間違っていてもいいので自分で理解した意味を添えて。

私を含む誰かが回答くれると思います。
ただし回答内容は解説そのものか、資料のある場所を提示するかといった形になると思います。



メイン部分をざっくり書いてみた。細かいとこは先ずは調べてみてください。
ゲーム系サンプルなんかも参考にしてみてください。

#include "d3m.hsp" ;何で使ってるかは調べてね。 ;----------------------- ;ループ突入前の準備 tm_start = d3timer() tm_keisoku = 0.0 ;出題開始からの経過時刻[ms] ;----------------------- ;メインループ *main redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0 ; キー取得 getkey key_f, 'F' ;code 70 getkey key_j, 'J' ;code 74 ; 経過時間取得 tm = d3timer() - tm_start mes "時刻:" + tm + " [ms]\n" ; 出題 if tm>1000 { ; タイマー if flg_mondai = 0 : tm_keisoku_start = d3timer() ;問題開始時間を計測開始 tm_keisoku = d3timer() - tm_keisoku_start ;問題開始からの時間を計測 mes "問題表示。\nHit F or J" mes "TIME:" + tm_keisoku + " [ms]" ; 入力 if key_f { result = 1 goto *kekka } if key_j { result = 2 goto *kekka } flg_mondai = 1 ;問題出題中フラグ } goto *main ;----------------------- ;結果 *kekka color 255, 255, 255 boxf color pos 0,0 redraw 1 if result = 1 : mes "Fが押されました!" if result = 2 : mes "Jが押されました!" mes "経過時間は " + tm_keisoku + "msecナリよ"



Taddi

リンク

2011/12/9(Fri) 00:33:35|NO.43591

卒業研究か何かでしょうか?一昔前のこと…懐かしいです。
「誰か作って」なら、静観しようと思っていましたが
遅くまで頑張っているようなので、少しお手伝いさせていただきます。

使用している画像はURLにアップしておきます。
何をしているか?最低限のコメントは入れました。
調べて理解することはpi12345さんの役目です。頑張ってください!


#include "hspcv.as" ;文字データ word="アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ" word+="マミムメモヤ ユ ヨラリルレロワ ヲ ンガギグゲゴザジズゼゾ" word+="ダヂヅデドバビブベボパピプペポァィゥェォャ ュ ョヴー   " ;回転角度 seed=0,60,120,180,240,300 ;文字画像読み込み cvload "moji.png",0 ;文字画像回転用バッファの初期化 repeat 4 cvbuffer 1+cnt,96,96 buffer 1+cnt,96,96 loop ;テスト用文字列 test="ギャオー" ;反転用フラグ 0=通常 1=鏡像 rflg=1 ;滑らかな回転処理 dim val,4 : dim wx,4 : dim wy,4 repeat 4 val(cnt)=instr(word,0,strmid(test,cnt*2,2))/2 wx(cnt)=val(cnt)\10 wy(cnt)=val(cnt)/10 cvarea wx(cnt)*64+rflg*640,wy(cnt)*64,64,64 cvcopy r_flg,16,16,1+cnt cvrotate seed(rnd(6)),1.0,0.0,0.0,,1+cnt gsel 1+cnt : cvgetimg 1+cnt,0 loop ;ここからが描画 gsel 0 color : boxf repeat 4 pos 96*cnt,0 : gcopy 1+cnt,0,0,96,96 loop stop



pi12345

リンク

2011/12/9(Fri) 05:40:53|NO.43592

GENKI様、taddi様

あたたかい応援ありがとうございます。
頑張ります。

なにしろ、やってみます!!



Taddi

リンク

2011/12/9(Fri) 07:44:54|NO.43593

昨日、あわてて作ったので一か所間違ってました。
回転処理内の
cvcopy r_flg,16,16,1+cnt
ですが、正しくは
cvcopy 0,16,16,1+cnt
だと思います。



pi12345

リンク

2011/12/9(Fri) 22:24:52|NO.43614

すみません

エクセルで図形として保存した文字をペイントで画像にしてドキュメントに
保存したのですが

画像が横長方形です。

picload "ama6.jpg"で呼び出すと
それまでの説明画面が
wxy600と四角のウィンドウででていたものが

画像の時だけ横長方形になってしまいます。

説明画面と同じ大きさのバックに張り付けたいときはどうしたらいいんでしょうか?



GENKI

リンク

2011/12/9(Fri) 23:09:30|NO.43615

> picload "ama6.jpg"で呼び出すと
> それまでの説明画面が
> wxy600と四角のウィンドウででていたものが
>
> 画像の時だけ横長方形になってしまいます。

picloadのヘルプを開いて、2つ目のパラメータ「画像ロードモード」について調べてみてください。



pi12345

リンク

2011/12/9(Fri) 23:51:28|NO.43618

GENKIさま

サンプルまでいただいて・・・申し訳ありません

わかりません

    wxy=600
pos 200,200
picload "ama12.jpg",p1
wait 200
cls

こういうことでしょうか?

もわっと白四角が出た後、何もかわりません。

「これじゃないよ」というのはわかるのですが・・・
わかりません

難しいですね(泣)

下↓に絶対違うよとしりながらのものがあります。

何度もpicloadで呼び込んではいけないのはわかるのですが
・・・やり方がよく理解できませんでした
画像の前に必ず

pos 250,200
font "MSゴシック",110
mes "×"
wait 200
cls
pos 140,200
font "MSゴシック",110
color 255,0,0
mes "アマガサ"
wait 200
をつけたかったのですが、単純に繰り返し画像前につけても読んでくれませんでした。
下さったサンプルのように「J」または「F」を押して画像のあとに反応時間を取りたかった
のですが
一応"問題表示"のところを画像にすると画像がビリビリしてしまいました。

コンボボタンやinputで得たデータを書き出すのに結果と
同じところにしたいと思いましたが、検索の仕方さえわかりません。
(メモパットへ書き出しは見つけましたが・・・なんだかやりたい事ではありませんでした
また、結果も同じところというわけにいくかどうかがわかりません。

     pos 250,200
font "MSゴシック",110
mes "×"
wait 200
cls
pos 140,200
font "MSゴシック",110
color 255,0,0
mes "アマガサ"
wait 200
cls
;これが↓四角のなかに出てくれれば・・・
picload "ama6.jpg"
wait 200
cls
picload "ama12.jpg"
wait 200
cls

picload "ama18.jpg"
wait 200
cls

picload "ama24.jpg"
wait 200
cls

picload "ama30.jpg"
wait 200
cls

picload "ama00.jpg"
wait 200
cls

picload "ama06.jpg"
wait 200
cls

picload "ama012.jpg"
wait 200
cls

picload "ama018.jpg"
wait 200
cls

picload "ama024.jpg"
wait 200
cls

picload "ama030.jpg"
wait 200
cls
#include "hsp3util.as"
text 500
font "MSゴシック",72
emes "お疲れ様でした♪"
end



pi12345

リンク

2011/12/10(Sat) 00:34:11|NO.43619

やることはわかりました。

#include "○○○"

buffer1〜12(カタカナが12通り用意あるので)に
(1:アマガサ 2:エイユウ 3:ケイサツ・・・の1につき11パターンを保存)

bufferは文字列のみなのかなぁ画像は別かな?・・・と思いつつ

説明画面表示

個人情報取得画面表示

個人データ取得→どこかに(csv形式)書き出し

練習(12個の内2通り使用)
実験(↑他、10通り:1通り内の表示は重複しないようにランダムに表示)

"×"→実像(見本)"カタカナ"表示→問題"カタカナ"表示(←buffer1〜12より)

キーボード入力の処理←反応時間取得

正誤判定→1問ごとに反応時間と共に個人データと同じところへ書き出し但し、
間違いはデータは回数のみ。
正しく作業されたもののみ練習なら2試行、実験なら10試行分取得

練習だった場合は練習結果を表示し実験へ戻る

実験だった場合は終了

こんなことではこれは無理のようですね

1年くらいかかりそうですね(大泣)。



GENKI

リンク

2011/12/10(Sat) 22:21:23|NO.43643

> picload "ama12.jpg",p1
> こういうことでしょうか?

はい。違います。

HSPの命令や関数で使用するパラメータは、「数値を入力する場合」と「数値を受け取る場合」があります。
マニュアルの書き方ではこのあたり明確なルールが決められていないので、説明文を読んで判断する必要があります。
picloadの第2パラメータp1の場合、ユーザーが数値を入力することになっています。

HSPではもう一つルールがあります。
何も値を代入していない変数は、最初は「0」が入っているというルールです。
ですので、pi12345さんが
	picload "ama12.jpg",p1
としたとき、p1=0となっているので、
	picload "ama12.jpg", 0
またマニュアルには省略時と0の場合と同じ動作をするとありますので、
	picload "ama12.jpg"
とした場合と同じ動作になったはずです。

と、いことで、ここまで理解したらマニュアルをもう一度よんでみてください。

> p1のロードモードを省略もしくは0にすることで、画像のサイズで初期化したウィンドウにロードされます。

ウィンドウが横長方形になった理由はこれでわかると思います。



> もわっと白四角が出た後、何もかわりません。

あれ?
ウィンドウサイズがama12.jpgの画像サイズに調整されて、そこに画像が読み込まれるはずなんですが…白四角?
wait 200してるから表示から2秒後にまっ白になるなら分かるんですが、何が起きてるんだろう。


> をつけたかったのですが、単純に繰り返し画像前につけても読んでくれませんでした。

これもpicload関連ですね。
ウィンドウを初期化するというのは、ウィンドウ内に書かれていたものを消して、フォントの設定なども変更される前にもどされるということです。


> 一応"問題表示"のところを画像にすると画像がビリビリしてしまいました。

書き込む場所はそこであってます。
ビリビリは多分そこでclsやらpicloadでウィンドウ初期化してるからだと思います。

上で書いたサンプルは1ループあたり16ミリ秒。つまり1秒間に60回程度繰り返しウィンドウ内を書き換えています。
こういった手法の場合、ループないではclsやpicloadは使用しません。
通常は、あらかじめ別のウィンドウを用意してそこでpicloadで画像を読み込み。ループ内ではそのウィンドウから画像をコピーして表示に使います。NO.43528でやったようなやり方です。


> 1年くらいかかりそうですね(大泣)。

私の感覚だと1ヶ月ぐらい腰をすえてやればできると思いますが…。根拠無いですけど。
解説や入門サイトはたくさんありますから、それらを見ながら簡単なのをいっぱい作って練習すれば習得早くなると思います。少なくとも今のやり方よりは。





追伸:
そろそろ「どうやったらスクリプトだけを青く表示できるんですか?」と聞いてほしいところですが、聞いてくれないので教えちゃいます。
HSP3掲示板 - 使い方
http://hsp.tv/play/pforum.php?mode=about
投稿時の注意の11を読んでみて下さい。



ONION software Copyright 1997-2023(c) All rights reserved.