嗨我想用二項迴應變量運行兩階段最小二乘迴歸。 對於連續響應變量,我使用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])
謝謝
嗨我想用二項迴應變量運行兩階段最小二乘迴歸。 對於連續響應變量,我使用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])
謝謝
這不完全正確。對於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()
的功能是它們可以擴展到其他數據集。
感謝您的好命令,但它在最後一步給我一個錯誤。 (match.arg(type):'arg'必須爲NULL或字符向量) 這裏,x是連續變量(不能是字符) –
你說得對。我修好了。現在它應該工作! –
我不明白你爲什麼需要分兩步做。 'R <-glm(y〜z,family = binomial)'給你你需要的東西嗎?爲什麼你想改變模型對象的殘差元素? – Roland
我讀到這是兩階段最小二乘法(工具變量分析)中的通常過程。更改殘差元素用於調整殘差。 –