Categories
[통계] Testing eqaulity of coefficients from two different regressions - 2
개요
저번 글 에서 조건에 따라 서로 다른 효과를 보이는 regression 식을 어떻게 식별할 수 있을지에 대한 해결법을 제시하였고, 결과적으로 다음의 식을 이용하기로 했었었다.
\[z=\frac{\beta_{conditionA} - \beta_{conditionB}}{\sqrt{\sigma^2_{conditionA} + \sigma^2_{conditionB}}}\]위 식을 파이썬으로 구현한 코드를 아래 기록해 놓으려고 한다.
코드
함수로 작성했고, input값은 두 개의 데이터프레임이다. 각 데이터프레임에는 다음과 같은 컬럼이 있다고 가정한다.
column “age” : 나이와 관련된 컬럼 (서브 독립변수)
column “sex” : 성별과 관련된 컬럼 (서브 독립변수)
column “cov1” : 다른 공변량 1 (키나 몸무게와 같은) (서브 독립변수)
column “variable” : 선형회귀에서 beta coefficient를 직접적으로 비교하고자 하는 메인 독립변수
column “predict” : 선형회귀에서의 종속변수, input값으로 넣어줄 여러 컬럼 중 하나로, 이 값 또한 넣어줌으로써 exp 값을 예측하려고 함
def comparison_beta(df1, df2):
# 주어진 값을 숫자형으로 변형
df1 = df1.apply(pd.to_numeric)
# 종속변수 및 독립변수, 글 쓸 때 indentation 설정이 제대로 안된다..
X = sm.add_constant(df1[['age', 'sex', 'cov1', 'variable']])
Y = df1['predict']
# df1 에서의 linear regression model
model = sm.OLS(Y, X).fit()
# coefficient 및 표준편차 계산
df1_coef_genotype = model.params['variable']
df1_stde_genotype = model.bse['variable']
# df2도 위의 df1과 같이 수행
df2 = df2.apply(pd.to_numeric)
X = sm.add_constant(df2[['age', 'sex', 'cov1', 'variable']])
Y = df2['predict']
model = sm.OLS(Y, X).fit()
# coefficient 및 표준편차 계산
df2_coef_genotype = model.params['variable']
df2_stde_genotype = model.bse['variable']
# 이전 글에서 정의 내린 식 활용한 z값 및 pvalue 계산
z = (df1_coef_genotype - df2_coef_genotype) / np.sqrt((df1_stde_genotype ** 2) + (df2_stde_genotype ** 2))
p_value = 2 * norm.sf(abs(z))
return p_value