2017-09-07 5 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 

그래서 STATA 온도이다 (이 경우에 0-10) 빈들 중 하나가 떨어진다.

이제 I 수동 빈들을 만들고 다시 회귀를 실행 :

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 

출력은 :

 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 

참고 빈들이 전체 데이터 세트의 소모적이며 STATA 상수를 포함한다 회귀 분석에서 어떤 쓰레기통도 떨어지지 않고 있습니다. 이것은 틀린 것이 아닌가? 상수가 회귀에 포함되었다는 것을 감안할 때, 하나의 쓰레기통을 떨어 뜨려서 "기본 경우"로 만들면 안됩니까? 나는 여기서 명백한 것을 놓치고있는 것처럼 느낀다.

편집 : 다음은 데이터의 드롭 보관함 링크이며 파일입니다. 여기에는 고려중인 두 변수 만 포함됩니다. 파일은 129MB입니다. 나는 또한 링크에서 내 출력의 사진을 가지고.

+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는 forvalue 루프 대신 수동 가변 생성 사용 (I는 난수를 생성). 그러나 귀하의 코드에는 오류가 없습니다.

+0

감사합니다. 그때 내 데이터에서 이상한 일이 일어나고있는 것처럼 느껴진다. 물론 나는 무엇을 확신 할 수 없다. 나는 심지어 값을 예측하려고 시도한 다음 관측치가 기준 평균 (또는 회귀 상수)을 이끌어 내고 예측 된 값이 317.5에 최대 값을 가지는데 이는 327 (내 회귀의 상수 값)보다 적음을 알았습니다. Stata가 내 데이터의 기본 케이스로 사용하고있는 것이 확실하지 않습니다. – user52932

+0

데이터 및 코드와 함께 메인 포스트에 대한 링크를 추가했습니다. 너가 그것을 검사 할 수 있으면 그것은 좋을 것이다. 감사. – user52932

+0

이것은 실제로 이상합니다. 귀하의 게시물에 대한 의견을 게시했습니다. – chan1142

1

이것도 대답이 아니지만 확장 된 설명입니다. 나는 600 자 제한과 5 분 후에 편집 작업을하는 데 지겨워지기 때문에 지쳤습니다. user52932 @ 원래 게시물에 코멘트 스레드에서

이를 확인해 주셔서 감사합니다 썼다. 이 정확히 정밀도 문제는 무엇입니까? 이것은 다중 공선 성 문제에서만 문제가 발생합니까?factor 변수를 사용할 때이 정밀도 문제로 인해 추정치가 잘못 될 수 있습니까?

인자 변수를 사용하는 회귀 결과가 잘 지정된 회귀 분석의 결과만큼 정확하다는 것이 분명한 것입니다. 가변 수를 이용하여 회귀

는 모델 multicollinear 변수 집합을 포함하는 misspecified 하였다. Stata는 다중 공선 성을 검출하지 못하여 오류를 일으킨다.

은 그러나 다중 공선에 대한 마법 검사가 없습니다. 이것은 교차 제품 매트릭스의 특성으로 추측됩니다. 이 경우 교차 생성 행렬은 830 만 회의 관측을 나타내며 Stata의 전체 배정도 사용에도 불구하고 계산 된 행렬은 Stata의 검정을 통과했으며 다중 선 집합 변수를 포함하지 않는 것으로 탐지되지 않았습니다. 이것은 제가 언급 한 정밀 문제의 궤적입니다. 관측치를 재정렬함으로써 누적 된 교차 산물 행렬이 충분히 달랐으므로 Stata의 테스트가 실패하여 미스 스펙이 발견되었습니다.

지금이 misspecified 회귀 분석에서 얻은 원래의 게시물의 결과를 봐주세요. 각 더미 변수의 계수에 54.13245를 더하고 상수에서 같은 양을 빼면 결과 계수와 상수는 요소 변수를 사용하는 회귀 분석의 경우와 동일합니다. 이것은 다중 공선 성 문제의 교과서 정의입니다. 계수 추정치가 잘못되었지만 계수 추정치가 고유하게 정의되지 않았습니다. 위의 댓글에서

는 @의 user52932는 STATA 내 데이터베이스 케이스로 사용하는 것을

내가 확실하지 오전

을 썼다.

대답은 STATA 더 베이스 케이스를 사용하지 않는다는 것이다; 결과는 다중 선 변수의 집합이 독립 변수들 사이에 포함될 때 기대되는 것입니다.

이 질문은 Stata와 같은 통계 패키지가 오류가 없음 다중 공선 성을 감지 할 수 없음을 상기시켜줍니다. 그것이 밝혀 졌을 때, 그것은 factor 변수 표기법의 천재성의 일부입니다. 지금 저는 깨달았습니다. 요인 변수 표시로, 당신은 정의에 의해 multicollinear 될 것이라고 더미 변수 집합을 만들 수 STATA에게, 그리고이 더미 변수 사이의 관계를 이해하기 때문에, 그것은 십자가 - 제품 매트릭스를 구성하기 전에 다중 공선 전 분담금을 제거 할 수 있습니다 이 문제를 추론하려고 시도하기보다는 예는 상호 제품 매트릭스의 특성을 이용하여,을 게시 할 수 있습니다.

우리는 STATA 때때로 다중 공선을 감지하지 놀라게하지만, 그것뿐만 아니라 그것이 그렇게에서와 마찬가지로 않습니다 오히려 기쁘해서는 안됩니다. 결국 두 번째 모델은 실수로 OLS 회귀 가정에 대한 명백한 위반 사항을 사용자가 지정하지 못하게합니다.