2017-09-07 1 views
3

私はちょうど基本的な直感を発展させるために温度に対するレース時間の単純な回帰を実行している。私のデータセットは非常に大きく、各観測は特定のレースのユニットのレース完了時間です。Stataは多次元線形性のために変数を落とさず(回帰で)、私はそうだと思う。

私は、温度ビンに非常に単純なレースタイムを回しています。一時変数の

概要:

  |    
Variable | Obs  Mean  Std. Dev Min Max 
------------+-------------------------------------------- 
avg_temp_scc| 8309434 54.3  9.4   0  89 

時間変数の概要:

Variable | Obs  Mean  Std. Dev Min Max 
------------+-------------------------------------------- 
chiptime | 8309434 267.5  59.6  122  1262 

私は、温度10度のビンを作成し、それらに対して時間を退行することを決めました。

コードは次のとおり

egen temp_trial = cut(avg_temp_scc), at(0,10,20,30,40,50,60,70,80,90) 
    reg chiptime i.temp_trial 

出力

Source |  SS  df  MS    Number of obs = 8309434 
---------+------------------------------   F( 8,8309425) =69509.83 
    Model | 1.8525e+09  8 231557659   Prob > F  = 0.0000 
Residual | 2.7681e+108309425 3331.29368   R-squared  = 0.0627 
    -----+--------------------------------   Adj R-squared = 0.0627 
    Total | 2.9534e+108309433 3554.22521   Root MSE  = 57.717 



    chiptime |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
    ----------+---------------------------------------------------------------- 
    temp_trial | 
      10 | -26.63549 2.673903 -9.96 0.000 -31.87625 -21.39474 
      20 | 10.23883 1.796236  5.70 0.000  6.71827 13.75939 
      30 | -16.1049 1.678432 -9.60 0.000 -19.39457 -12.81523 
      40 | -13.97918 1.675669 -8.34 0.000 -17.26343 -10.69493 
      50 | -10.18371 1.675546 -6.08 0.000 -13.46772 -6.899695 
      60 | -.6865365 1.675901 -0.41 0.682 -3.971243  2.59817 
      70 | 44.42869 1.676883 26.49 0.000  41.14206 47.71532 
      80 | 23.63064 1.766566 13.38 0.000  20.16824 27.09305 
     _cons | 273.1366 1.675256 163.04 0.000  269.8531  276.42 

正しく温度(この場合は0-10で)ビンのいずれかをドロップだからSTATAです。

今、私は手動でビンを作成して、再度回帰を実行しました:

gen temp0 = 1 if temp_trial==0 
    replace temp0 = 0 if temp_trial!=0 

    gen temp1 = 1 if temp_trial == 10 
    replace temp1 = 0 if temp_trial != 10 

    gen temp2 = 1 if temp_trial==20 
    replace temp2 = 0 if temp_trial!=20 

    gen temp3 = 1 if temp_trial==30 
    replace temp3 = 0 if temp_trial!=30 

    gen temp4=1 if temp_trial==40 
    replace temp4=0 if temp_trial!=40 

    gen temp5=1 if temp_trial==50 
    replace temp5=0 if temp_trial!=50 

    gen temp6=1 if temp_trial==60 
    replace temp6=0 if temp_trial!=60 

    gen temp7=1 if temp_trial==70 
    replace temp7=0 if temp_trial!=70 

    gen temp8=1 if temp_trial==80 
    replace temp8=0 if temp_trial!=80 

    reg chiptime temp0 temp1 temp2 temp3 temp4 temp5 temp6 temp7 temp8 

を出力した:ビンを一定に含めているデータセット全体とSTATAを網羅している

 Source |  SS  df  MS    Number of obs = 8309434 
    ---------+------------------------------   F( 9,8309424) =61786.51 
     Model | 1.8525e+09  9 205829030   Prob > F  = 0.0000 
    Residual | 2.7681e+108309424 3331.29408   R-squared  = 0.0627 
    --------+------------------------------   Adj R-squared = 0.0627 
     Total | 2.9534e+108309433 3554.22521   Root MSE  = 57.717 


-------------------------------------------------------------------------- 
chiptime |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
---------+---------------------------------------------------------------- 
    temp0 | -54.13245 6050.204 -0.01 0.993 -11912.32 11804.05 
    temp1 | -80.76794 6050.204 -0.01 0.989 -11938.95 11777.42 
    temp2 | -43.89362 6050.203 -0.01 0.994 -11902.08 11814.29 
    temp3 | -70.23735 6050.203 -0.01 0.991 -11928.42 11787.94 
    temp4 | -68.11162 6050.203 -0.01 0.991 -11926.29 11790.07 
    temp5 | -64.31615 6050.203 -0.01 0.992  -11922.5 11793.87 
    temp6 | -54.81898 6050.203 -0.01 0.993  -11913 11803.36 
    temp7 | -9.703755 6050.203 -0.00 0.999 -11867.89 11848.48 
    temp8 | -30.5018 6050.203 -0.01 0.996 -11888.68 11827.68 
    _cons | 327.269 6050.203  0.05 0.957 -11530.91 12185.45 

注意回帰ではなく、容器のどれも落とされていない。これは間違っていませんか?定数が回帰に含まれていることを考えれば、ビンのいずれかを落として「基底ケース」にしてはいけませんか?私はここではっきりと何かを見逃しているように感じます。

編集: ここにデータとドールファイルのドロップボックスリンクがあります: これは考慮中の2つの変数だけを含んでいます。ファイルは129 MBです。私はまたリンクの私の出力の写真を持っています。

+2

この問題のステートメントは、[MVCE](https://stackoverflow.com/help/mcve) –

+1

のメリットがあります。確認するには、確認するために 'assert(temp0 + temp1 + ... + temp8)== 1 '確かにあなたの箱は網羅的です。 –

+0

@WilliamLisowski私はアサートを行い、エラーは発生しませんでした。 MVCEでは、エラーを再現し、これらを投稿に添付するデータセットとファイルを作成する必要がありますか? – user52932

答えて

1

これは「回答」ではないかもしれませんが、コメントには長すぎますので、ここに書きます。

私の結果は異なっています。最終的な回帰に、一つの変数がドロップされる:あなたと

. clear all 

. set obs 8309434 
number of observations (_N) was 0, now 8,309,434 

. set seed 1 

. gen avg_temp_scc = floor(90*uniform()) 

. egen temp_trial = cut(avg_temp_scc), at(0,10,20,30,40,50,60,70,80,90) 

. gen chiptime = rnormal() 

. reg chiptime i.temp_trial 

     Source |  SS   df  MS  Number of obs = 8,309,434 
-------------+---------------------------------- F(8, 8309425) =  0.88 
     Model | 7.07729775   8 .884662219 Prob > F  = 0.5282 
    Residual | 8308356.5 8,309,425 .999871411 R-squared  = 0.0000 
-------------+---------------------------------- Adj R-squared = -0.0000 
     Total | 8308363.58 8,309,433 .9998713 Root MSE  = .99994 

------------------------------------------------------------------------------ 
    chiptime |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
    temp_trial | 
     10 | .0010732 .0014715  0.73 0.466 -.0018109 .0039573 
     20 | .0003255 .0014713  0.22 0.825 -.0025581 .0032092 
     30 | .0017061 .0014713  1.16 0.246 -.0011776 .0045897 
     40 | .0003128 .0014717  0.21 0.832 -.0025718 .0031973 
     50 | .0007142 .0014715  0.49 0.627 -.0021699 .0035983 
     60 | .0021693 .0014716  1.47 0.140 -.0007149 .0050535 
     70 | -.0008265 .0014715 -0.56 0.574 -.0037107 .0020577 
     80 | -.0005001 .0014714 -0.34 0.734 -.0033839 .0023837 
      | 
     _cons | -.0006364 .0010403 -0.61 0.541 -.0026753 .0014025 
------------------------------------------------------------------------------ 

. * "qui tab temp_trial, gen(temp)" is more convenient than "forv ..." 
. forv k = 0/8 { 
    2. gen temp`k' = temp_trial==`k'0 
    3. } 

. reg chiptime temp0-temp8 
note: temp6 omitted because of collinearity 

     Source |  SS   df  MS  Number of obs = 8,309,434 
-------------+---------------------------------- F(8, 8309425) =  0.88 
     Model | 7.07729775   8 .884662219 Prob > F  = 0.5282 
    Residual | 8308356.5 8,309,425 .999871411 R-squared  = 0.0000 
-------------+---------------------------------- Adj R-squared = -0.0000 
     Total | 8308363.58 8,309,433 .9998713 Root MSE  = .99994 

------------------------------------------------------------------------------ 
    chiptime |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
     temp0 | -.0021693 .0014716 -1.47 0.140 -.0050535 .0007149 
     temp1 | -.0010961 .0014719 -0.74 0.456  -.003981 .0017888 
     temp2 | -.0018438 .0014717 -1.25 0.210 -.0047282 .0010407 
     temp3 | -.0004633 .0014717 -0.31 0.753 -.0033477 .0024211 
     temp4 | -.0018566 .0014721 -1.26 0.207 -.0047419 .0010287 
     temp5 | -.0014551 .0014719 -0.99 0.323  -.00434 .0014298 
     temp6 |   0 (omitted) 
     temp7 | -.0029958 .0014719 -2.04 0.042 -.0058808 -.0001108 
     temp8 | -.0026694 .0014718 -1.81 0.070  -.005554 .0002152 
     _cons | .0015329 .0010408  1.47 0.141 -.0005071 .0035729 
------------------------------------------------------------------------------ 

違いがある:(I)の異なるデータ(I乱数を生成)、(II)I代わりに手動可変作成forvalueループを使用します。しかし、私はあなたのコードに誤りは見られません。

+0

ありがとうございます。私は、私のデータで何か変わったことが起こっているように感じますが、私は何がわかりません。私はさらに値を予測しようとし、観測値がベースライン平均(または回帰定数)を駆動しており、予測値が317.5に最大値を持つことを知りました。これは327(私の回帰の定数の値)未満です。 Stataが私のデータのベースケースとして使用しているものがわかりません。 – user52932

+0

データとコードを含むメインポストへのリンクを追加しました。もしあなたがそれをチェックすることができれば素晴らしいだろう。ありがとう。 – user52932

+0

これは本当に奇妙です。あなたの投稿にコメントを投稿しました。 – chan1142

1

これは答えではありませんが、拡張されたコメントです。私は600文字の制限と5分間の編集でフリーズすることに疲れています。元記事にコメントスレッドで

は、@ user52932が

を書いた本をご確認いただきありがとうございます。これは正確に何かを精緻化できますか 精度問題は?この問題は、この複素直線性の問題の原因になりますか? 因子 を使用しているときに、この精度の問題によって推定値が間違っている可能性がありますか?

因子変数を使用した回帰の結果は、明確に指定された回帰の結果と同じであることが明確であることが必要です。

ダミー変数を使用する回帰では、モデルには、複数の線形変数のセットが含まれていると誤って指定されていました。 Stataは、多重共線性の検出に失敗したためにフォルトされます。

しかし、マルチ共線性の魔法のテストはありません。これは、クロス積行列の特性から推測されます。この場合、クロス積行列は830万の観測値を表し、Stataの全二重精度の使用にもかかわらず、計算された行列はStataの検定に合格し、複数線形の変数を含むものとして検出されませんでした。これが私が参照した精密問題の軌跡です。観測結果を並べ替えることで、蓄積されたクロス積行列が十分に異なり、Stataの検定に失敗し、誤特定が検出されたことに注意してください。

この誤った回帰から得られた元の投稿の結果を見てください。各ダミー変数の係数に54.13245を加え、同じ量を定数から減算すると、結果の係数と定数は、係数変数を使用する回帰の係数と定数と同じになります。これは、マルチ共線性の問題のテキストブック定義です。係数の見積もりが間違っているわけではなく、係数の見積もりが一意に定義されているわけではありません。上記のコメントで

は、@ user52932は、私はStataのが私のデータのベースケースとして使用しているものか不明だ

を書きました。

答えは、スタータはベースケースを使用していません。結果は、多変数の集合が独立変数の中に含まれているときに期待されるものである。

この質問は、Stataのような統計パッケージではは絶対にがマルチ共線性を検出できないことを私に思い出させるものです。それが判明したように、それは因子可変表記法の天才の一部です、私は今実現しています。因子表記法を使用すると、Stataに定義された多項線形のダミー変数の集合を作成するように指示し、ダミー変数間の関係を理解するので、クロスプロダクト行列を構築する前にマルチ共線性exクロスプロダクトマトリックスの特性を使用して、ポストの問題を推測しようとするのではなく、

Stataが多共線性を検出できないことがありますが、そうしたときと同じようにStataが時々満足しているのは驚きではありません。結局のところ、第2のモデルは実際には誤った仕様であり、これはユーザ側のOLS回帰の前提条件の明白な違反を構成する。

関連する問題