鶴田研究所 Tsuruta Laboratory

調査ノート 2026-09-20

自己開示の費用構造モデルにおける交互作用推定量3種の偏りの比較

人を一人も使わず、打ち明けの費用構造だけを書いた模型を32条件走らせて、推定量の取り方で答えが変わることを確かめた記録

要旨

誰かに悩みを打ち明けるかどうかは、聞き手との共通の友人が多いほど起きやすく、その関係を維持し続ける見込みが低いほど起きやすい。この予想を人で試す前に、費用構造だけを書いた模型で試した。仮説は支持されたが、それを支持したのは当初の設計ではない。共通の友人の数をいくつかの段階にまとめて比較すると、模型の中に継続依存を一切書いていない対照条件でも +0.11 の交互作用が出た。出るはずのない量である。原因はネットワークの偏りではなく、段階の中に残った共通の友人の数の変動が継続と相関していたことだった。段階にまとめず整数値で固定して比べ直すと、対照条件での偏りは +0.003 に落ち、そのうえで仮説の効果は残った。同じデータから、推定量を変えるだけで答えが変わる。

方法三層に分けた模型を書いた。下から、誰と出会いうるかだけを決める知人の下地(1024人、平均10人と知り合い、Watts-Strogatzで生成)、その上で深まったり薄れたりする関係の強さ、そして強さが閾値を超えた活きている友人関係である。共通の友人の数はこの最上層で数える。各人には関係を維持できる容量と、人に近づこうとする意欲を、互いに独立に振った。どちらが低くても友人は少なくなるが、仮説が効くと言っているのは容量の側だけなので、この二つを直交させることが設計の要点になる。仮説そのものは書き込んでいない。書いたのは局所的な費用だけで、打ち明けの便益は共通の友人の数に比例し、費用は生じた維持義務にその義務が実現する確率を掛けた量とした。義務の重みを0、2、4、6と振り、重み0を対照とした。重み0では打ち明け確率が共通の友人の数だけの関数になるため、継続に関する効果は定義上ゼロでなければならない。乱数種8個を複製単位とし、32条件を400ステップ走らせた。
結果容量の低い個体は友人が少なく、かつ関係も浅かった(次数3.44、深さ0.294)。意欲の低い個体は友人は少ないが関係は浅くならなかった(次数4.92、深さ0.349、参照群0.361)。費用構造からこの分離が出た。当初の2x2設計では、対照条件でも差分の差が +0.10 から +0.13 出た。共通の友人の数を整数値で固定した行だけを使うと、対照条件での偏りは絶対値 0.005 以下に収まった。そのうえで義務の重み6では、容量の低い2群が高い2群の2.02倍の継続効果を示した。分離しているのは容量であって意欲ではない。皮肉についても同じ軸で最大になったが、こちらは四群でほぼ同じ値(+0.347から+0.364)で、容量では分離しなかった。
知見観察データで共通の友人の数を段階にまとめると、段階の中に残った変動が継続と相関し、生成規則に交互作用が無くても交互作用が出る。次数保存ヌルはこの偏りを検出しない。偏りがネットワーク構造ではなく測定変数の粗さから来ているためである。人を使う観察研究をこのまま組むと、何も無いところに効果を見つけてしまう。対処は二つあり、無作為に割り付けて実験にするか、共通の友人の数を段階ではなく厳密な整数値で固定して層別するかである。
限界現実の人間についての主張は何もしていない。示したのは、この費用構造を仮定すれば観察された模様が出ることと、ある種の推定量ではそれを検出できないことだけで、費用構造が正しいことの証拠ではない。知人の下地はWatts-Strogatzに固定しており、族を変えたときに結論が動くかはこの報告では測っていない(続きの報告で測った)。パラメータは活きている友人が3人から5人、共通の友人が2人以上の関係が全体の3割程度になる領域を選んで固定しており、この選択に対する頑健性は測っていない。皮肉かどうかの判定は模型の中では真値が既知で、実データでの測定誤差は入っていない。
同じ模型から、推定量を変えるだけで答えが変わる横軸は義務の重み beta_c。beta_c=0 は生成規則に継続依存が無い条件で、正解は 0 と分かっている。そこで 0 に落ちるのは固定CNの推定量だけだった。-0.10+0.1+0.2+0.3+0.40246義務の重み beta_c継続(低 − 高)の打ち明け率の差固定CNで層別 beta_c=0 +0.0026固定CNで層別 beta_c=2 +0.1249固定CNで層別 beta_c=4 +0.2632固定CNで層別 beta_c=6 +0.3852CN混在のまま beta_c=0 -0.0911CN混在のまま beta_c=2 +0.0355CN混在のまま beta_c=4 +0.1378CN混在のまま beta_c=6 +0.19792x2に畳んだ差分の差 beta_c=0 +0.10852x2に畳んだ差分の差 beta_c=2 +0.08712x2に畳んだ差分の差 beta_c=4 +0.08762x2に畳んだ差分の差 beta_c=6 +0.1416固定CNで層別CN混在のまま2x2に畳んだ差分の差beta_c=0 では、継続に関する効果は定義上ゼロでなければならない。2x2に畳むと +0.109、CN混在では −0.091 が出た。出るはずのない量である。原因はビンの中に残った保証の変動が継続と相関することで、ネットワーク構造の偏りではない。共通近傍数を整数値で固定すると偏りは +0.003 に落ち、そのうえで仮説の効果は残った。
同じ模型から得た三つの推定量。横軸は義務の重みで、左端は模型に継続依存を一切書いていない対照条件である。正解が 0 と分かっているその点で 0 に落ちるのは、共通の友人の数を整数値で固定した推定量だけだった。他の二つは、出るはずのない量を出している。

人は、どういうときに人に打ち明けるのか。予想は二つあった。聞き手と共通の友人が多いほど打ち明けやすい。話が漏れても、共通の知り合いがいれば取り返しがつくからである。そしてもう一つ、その関係がこの先も続く見込みが低いほど打ち明けやすい。旅先で隣に座った人に重い話をしてしまう、あの現象である。

この二つが掛け算で効くなら、打ち明けがいちばん起きるのは「共通の友人は多いが、関係は続かない」という組み合わせになるはずだった。人を集めて調べる前に、模型で試した。

仮説そのものは書き込まない

模型を書くとき、いちばん気をつけたのはここである。「共通の友人が多くて関係が続かないときに打ち明けが増える」と直接書いてしまえば、走らせて同じ結果が出るのは当たり前で、何も確かめたことにならない。

だから書いたのは局所的な費用だけにした。

  • 打ち明けの便益は、共通の友人の数に比例する
  • 打ち明けの費用は、それによって生じる維持義務に、その義務が実際に実現する確率を掛けた量である

関係が続く見込みが高いほど、打ち明けて生じた義務は実際に果たすことになる。だから費用が高い。この費用から「共通の友人が多く、関係が続かない」組み合わせに打ち明けが集まるかどうかは、帰結であって前提ではない。

そのうえで義務の重みを0、2、4、6と振り、重み0を対照とした。重み0では打ち明け確率が共通の友人の数だけの関数になる。継続に関する効果は、定義上ゼロでなければならない。ここが後で効いてくる。

三層に分ける

社会を一枚の網として書くと、「友人が少ない」と「関係が浅い」が区別できなくなる。三層に分けた。

層中身動くか
知人の下地1024人、平均10人と知り合い固定
関係の強さ打ち明けで深まり、放置で薄れる動く
活きている友人強さが閾値を超えたものだけ動く

共通の友人の数は最上層で数える。下地は固定なので、誰と出会いうるかは変わらない。変わるのは、そのうち誰と実際に続いているかである。

各人には二つの個体差を、互いに独立に振った。関係を維持できる容量と、人に近づこうとする意欲である。どちらが低くても「友人が少ない人」になるが、仮説が効くと言っているのは容量の側だけである。この二つを直交させたことが、この実験の設計上の要点になった。

まず、二つの個体差は実際に分離した

個体差友人の数関係の深さ
容量が低い3.440.294
意欲が低い4.920.349
参照群—0.361

どちらも友人の数は下がるが、深さを下げるのは容量の側だけだった。「友達が少ない」と「関係が浅い」は別の量である、という計画段階の主張が、模型の中で実際に分かれた。これは書き込んだ前提ではなく、維持費用から出た帰結である。

対照条件で、出るはずのない量が出た

ここからが本題になる。計画では、共通の友人の数と継続の見込みでそれぞれ高低の二段階を作り、2x2の表にして差分の差を見るつもりだった。走らせた。

義務の重みが0の条件でも、差分の差が +0.10 から +0.13 出た。

重み0は、生成規則に継続依存が一切無い条件である。対照として置いた。そこで効果が出るということは、効果を測っているのではなく、測り方が効果を作っているということになる。

原因を特定した。共通の友人の数を段階にまとめると、同じ段階の中に共通の友人の数の変動が残る。最下位の段階は0人と1人の混合で、その中では継続の見込みが高いセルほど共通の友人の平均が高かった(0.29人から0.78人)。打ち明け率は共通の友人の数だけで決まっているので、率もそれに従って動く(0.416から0.558)。段階の中での率と平均人数の相関は +1.000 だった。

決定的なのは、共通の友人の数が単一の整数に固定される行である。

行継続 低継続 高勾配
共通の友人 = 2人0.7910.796消える
共通の友人 = 3人0.8680.865消える

見かけの交互作用は、段階の中に残った変動が継続と相関していたことによる組成の交絡だった。ネットワークの構造の問題ではない。

固定して測り直すと、仮説は支持された

共通の友人の数を単一の値に固定した行だけを使い、継続の低いほうから高いほうを引いた率の差を取る。

群重み0246
容量 低・意欲 高+0.003+0.125+0.263+0.385
容量 低・意欲 低+0.005+0.119+0.240+0.364
容量 高・意欲 高+0.001+0.060+0.133+0.203
容量 高・意欲 低−0.004+0.044+0.103+0.167

重み0でちょうど0に落ちる。偏りは絶対値 0.005 以下である。推定量に偏りがないことが、対照条件で確認できた。

そのうえで重み6では、容量の低い2群が高い2群の 2.02倍 の効果を示した。分離しているのは容量であって意欲ではない。「友人が少ない」という結果が同じでも、それが維持容量の不足から来ている人だけが、共通の友人にまつわる模様を出す。これが計画段階で立てた判別予測で、模型はそれを支持した。

三つの推定量を、正解が0と分かっている点で並べるとこうなる。

推定量対照条件での値群の分離
2x2に畳んだ差分の差+0.096 〜 +0.134出ない
段階のまま継続差−0.085 〜 −0.093出る(偏りは残る)
整数値で固定した継続差−0.004 〜 +0.005出る

皮肉は、同じ場所に来たが同じ理由では動かなかった

皮肉にも別の費用を書いた。誤読される危険は共通の友人が少ないほど大きく、その損害は維持している関係ほど痛い。よって費用は、共通の友人の少なさに継続の見込みを掛けた量になる。自由パラメータを増やさないため、重みは打ち明けと共用した。

固定して測った継続効果は、重み6で +0.347 から +0.364。四群でほぼ同じだった。

つまりこの模型の中では、皮肉と打ち明けは共通の友人と継続という軸の上では同じ場所に集まるが、容量という個体差では分離しない。計画では両者が同じ場所で同時に最大になると予測していたが、正確にはそれは半分しか当たっていない。軸の上では一致し、個体差の上では一致しなかった。皮肉の費用に容量の圧迫を入れなかったことの直接の帰結なので、ここが次の分岐になる。

次数保存ヌル

最後の状態(1024頂点、2150辺)に二重辺交換を21,500回かける操作を4回繰り返した。関係の両端が共有する友人の数は、観測 1.285 に対し次数を揃えたヌルで 0.020 だった。共通の友人という変数が次数分布だけから出るものではないことは確認できた。

ただしこの対照が確認しているのは、下地をWatts-Strogatzで作ったという構成そのものである。発見ではなく前提の検算として読むべきで、実データに当てるときに初めて意味を持つ。

人を使う実験への帰結

これが今回いちばん実務的な結果である。

公開データを観察する設計は、このままでは交互作用を同定できない。観察データで共通の友人の数を段階にまとめると、段階の中に残った変動が継続と相関し、生成規則に交互作用が無くても +0.11 程度の交互作用が出る。そして次数保存ヌルはこの偏りを検出しない。偏りがネットワーク構造ではなく、測定変数の粗さから来ているためである。

対処は二つある。

  1. 実験にする。共通の友人と継続を無作為に割り付ければ、段階の中の組成の問題は消える
  2. 厳密に条件づける。観察データを使うなら、共通の友人の数を段階ではなく整数値で固定して層別する

計画側を更新した。観察研究の分析計画に「共通の友人の数は厳密値で層別する。段階にまとめることは禁止」と書き、事前登録の前提条件にする。

この模型が示していないこと

  • 現実の人間についての主張は何もしていない。示したのは、この費用構造を仮定すれば観察された模様が出ることと、ある種の推定量ではそれを検出できないことだけである。費用構造が正しいことの証拠ではない
  • 知人の下地をWatts-Strogatzに固定した。族を変えたときに結論が動くかは、この報告では測っていない
  • パラメータは、活きている友人が3人から5人、共通の友人が2人以上の関係が全体の3割程度になる領域を選んで固定した。この選択に対する頑健性は測っていない
  • 皮肉かどうかの判定は、模型の中では真値が既知である。実データでの測定誤差はここには入っていない

再現

模型が simnet.py、掃引と推定量と次数保存ヌルが run_sim.py、上の表の全数値が sim_results.csv にある。python run_sim.py で掃引が走る。GPUが無ければ自動でCPUに落ちる。32条件400ステップで、RTX 3060 で16.6秒、メモリのピークは1.51GiBだった。

資料