Ich versuche also, eine Statafunktion zu replizieren, die ich in Principles of Econometrics sah, von Hill, Griffiths und Lim. Die Funktion, die ich replizieren möchte, sieht in Stata so aus; DieseR: Konstante in Linearkombination addieren, glht()
lincom _cons + b_1 * [arbitrary value] - c
ist auf die Nullhypothese H0: B0 + B1 * X = C
Ich bin in der Lage, eine Hypothese ohne die Konstante zu testen, aber ich möchte die Konstante hinzufügen, wenn die lineare Kombination testen von Parametern. Ich habe die Paketdokumentation für glht()
durchgesehen, aber es hatte nur ein Beispiel, wodurch sie die Konstante herausnahmen. Ich habe das Beispiel repliziert, wobei ich die Konstante beibehalten habe, aber ich bin unsicher, wie man eine lineare Kombination testen kann, wenn man eine Matrix K und eine Konstante hat. Als Referenz, hier ist ihr Beispiel;
### 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)
Ich bin nicht wirklich gut in der Erstellung vorgetäuscht Datensätze, aber hier ist mein Versuch.
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"))
Es scheint, dass es zwei Möglichkeiten gibt, um dies zu, die Dokumentation nach. Ich kann entweder die Funktion diag() verwenden, um eine Matrix zu erstellen, die ich dann im Argument linfct =
verwenden kann, oder ich kann eine Zeichenfolge verwenden. Die Sache mit dieser Methode ist, dass ich nicht ganz weiß, wie man die Methode diag() benutzt, während man auch die Konstante (die rechte Seite der Gleichung) einbezieht; Im Fall der Zeichenkettenmethode bin ich nicht sicher, wie man den Achsenabschnitt hinzufügt.
Jede und alle Hilfe würde sehr geschätzt werden.
Hier sind die Daten, mit denen ich arbeite. Das war ursprünglich in einer .dta-Datei, also entschuldige ich mich für die schreckliche Formatierung. Laut dem oben erwähnten Buch ist dies die Datei 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))
das letzte Teil war genau das, was ich brauchte (Beispiel auf Seite 117-118) ! Ich danke dir sehr. Ich nehme also an, dass es in R schwierig sein könnte, eine Hypothese von einer linearen Kombination von Parametern zu erstellen, wenn ich einen Abschnitt mit den Beta-Werten aufnehmen würde. Aber Ihre handgemachte Funktion sieht wirklich intuitiv aus! Ich teile Ihre Meinung, dass R das meiste tun kann, was Stata macht und mehr, was mich etwas motiviert, diese Frage überhaupt zu stellen.Ich danke dir sehr. Frage beantwortet. – im2wddrf
@ im2wddrf Glücklich zu helfen –