所以我想複製一個stata函數,我在中看到的計量經濟學原理,Hill,Griffiths和Lim。我想要複製的函數在stata中看起來像這樣;R:在線性組合中添加常量,glht()
lincom _cons + b_1 * [arbitrary value] - c
這是零假設H0:B0 + B1 * X = C
我能夠檢驗假設沒有恆定的,但我想測試線性組合時添加的恆定的參數。我瀏覽了glht()
的包裝文件,但它只是一個例子,他們拿出了常數。我重複了這個例子,保持不變,但我不確定如何測試一個線性組合,當你有一個矩陣K和一個常量時。作爲參考,這裏是他們的例子;
### multiple linear model, swiss data
lmod <- lm(Fertility ~ ., data = swiss)
### test of H_0: all regression coefficients are zero
### (ignore intercept)
### define coefficients of linear function directly
K <- diag(length(coef(lmod)))[-1,]
rownames(K) <- names(coef(lmod))[-1]
K
### set up general linear hypothesis
glht(lmod, linfct = K)
我不擅長創建假冒數據集,但這裏是我的嘗試。
library(multcomp)
test.data = data.frame(test.y = seq(200,20000,1000),
test.x = seq(10,1000,10))
test.data$test.y = sort(test.data$test.y + rnorm(100, mean = 10000, sd = 100)) -
rnorm(100, mean = 5733, sd = 77)
test.lm = lm(test.y ~ test.x, data = test.data)
# to view the name of the coefficients
coef(test.lm)
# this produces an error. How can I add this intercept?
glht(test.lm,
linfct = c("(Intercept) + test.x = 20"))
根據文檔,似乎有兩種方法可以解決這個問題。我可以使用函數diag()來構造一個矩陣,然後我可以在linfct =
參數中使用該矩陣,或者我可以使用字符串。用這種方法的事情是,我不知道如何使用diag()方法,同時也包括常量(方程的右邊);在字符串方法的情況下,我不知道如何添加截取。
任何和所有的幫助將不勝感激。
這是我正在使用的數據。這最初是在一個.dta文件中,所以我爲可怕的格式道歉。根據我上面提到的這本書,這是food.dta文件。
structure(list(food_exp = structure(c(115.22, 135.98, 119.34,
114.96, 187.05, 243.92, 267.43, 238.71, 295.94, 317.78, 216,
240.35, 386.57, 261.53, 249.34, 309.87, 345.89, 165.54, 196.98,
395.26, 406.34, 171.92, 303.23, 377.04, 194.35, 213.48, 293.87,
259.61, 323.71, 275.02, 109.71, 359.19, 201.51, 460.36, 447.76,
482.55, 438.29, 587.66, 257.95, 375.73), label = "household food expenditure per week", format.stata = "%10.0g"),
income = structure(c(3.69, 4.39, 4.75, 6.03, 12.47, 12.98,
14.2, 14.76, 15.32, 16.39, 17.35, 17.77, 17.93, 18.43, 18.55,
18.8, 18.81, 19.04, 19.22, 19.93, 20.13, 20.33, 20.37, 20.43,
21.45, 22.52, 22.55, 22.86, 24.2, 24.39, 24.42, 25.2, 25.5,
26.61, 26.7, 27.14, 27.16, 28.62, 29.4, 33.4), label = "weekly household income", format.stata = "%10.0g")), .Names = c("food_exp","income"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -40L))
半句正是我需要(在117-118頁上的例子) !非常感謝。所以我認爲,運行一個假設,但是如果我包含一個截取beta的參數,那麼R中的參數的線性組合可能會非常棘手。但是你的手工功能看起來非常直觀!我分享你的觀點,即R可以完成Stata所做的大部分工作,這也促使我首先提出這個問題。非常感謝。問題回答了。 – im2wddrf
@ im2wddrf樂於助人 –