2015-06-22 72 views
1

嗨我想用二項迴應變量運行兩階段最小二乘迴歸。 對於連續響應變量,我使用R包「sem」中的「tsls」選項。帶有生物反應變量的兩階段最小二乘迴歸

這是我的命令,想知道我正在做這件事。

(X:內生變量,Z:工具變量,Y:響應變量(0或1))

xhat<-lm(x~z)$fitted.values 

R<-glm(y~xhat, family=binomial) 

R$residuals<-c(y - R$coef[1]+x*R$coef[2]) 

謝謝

+1

我不明白你爲什麼需要分兩步做。 'R <-glm(y〜z,family = binomial)'給你你需要的東西嗎?爲什麼你想改變模型對象的殘差元素? – Roland

+0

我讀到這是兩階段最小二乘法(工具變量分析)中的通常過程。更改殘差元素用於調整殘差。 –

回答

0

這不完全正確。對於R中的glm()函數,family=binomial選項默認爲邏輯迴歸。因此,您的剩餘計算不會根據需要轉換殘差。

您可以使用residuals.glm()函數自動生成廣義線性模型的殘差。您可以將residuals()函數用於線性模型。同樣,您可以使用predict()函數,而不是lm(x~z)$fitted.values來獲取xhats。然而,因爲在這種情況下,你有xhat和x(不相同的變量),接近您的解決方案上面使用的代碼(但使用plogis()功能分對數變換):

stageOne <- lm(x ~ z) 
xhat <- predict(stageOne) 
stageTwo <- glm(y ~ xhat, family=binomial) 
residuals <- y - plogis(stageTwo$coef[1] + stageTwo$coef[2]*x) 

predict()的一個很好的特徵residuals()residuals.glm()的功能是它們可以擴展到其他數據集。

+0

感謝您的好命令,但它在最後一步給我一個錯誤。 (match.arg(type):'arg'必須爲NULL或字符向量) 這裏,x是連續變量(不能是字符) –

+0

你說得對。我修好了。現在它應該工作! –