Is there a way to set up a regression in R that forces two coefficients to be equal but opposite in sign?
I'm trying to setup a model where a subject appears in a pair of environments where a measurement X is made. There are a total of 5 environments, one of which is a baseline. But each observation is for a subject in only two of them, and not all subjects will appear in each environment. Each of the environments has an effect on the variable X. I want to measure the relative effects of each environment E on X with a model. Xj = Xi * Ei / Ej Ei of the baseline model is set equal to 1. With a log transform, a linear-looking regression can be written as: log(Xj) = log(Xi) + log(Ei) - log(Ej) My data looks like: # E1 X1 E2 X2 1 A .20 B .25 What I've tried in R: env <- c("A","B","C","D","E") # Note: data is made up just for this example df <- data.frame( X1 = c(.20,.10,.40,.05,.10,.24,.30,.70,.48,.22,.87,.29,.24,.19,.92), X2 = c(.25,.12,.45,.01,.19,.50,.30,.40,.50,.40,.68,.30,.16,.02,.70), E1 = c("A","A","A","B","B","B","C","C","C","D","D","D","E","E","E"), E2 = c("B","C","D","A","D","E","A","B","E","B","C","E","A","B","C") ) model <- lm(log(X2) ~ log(X1) + E1 + E2, data = df) summary(model) Call: lm(formula = log(X2) ~ log(X1) + E1 + E2, data = df) Residuals: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0.3240 0.2621 -0.5861 -1.0283 0.5861 0.4422 0.3831 -0.2608 -0.1222 0.9002 -0.5802 -0.3200 0.6452 -0.9634 0.3182 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.54563 1.71558 0.318 0.763 log(X1) 1.29745 0.57295 2.265 0.073 . E1B -0.23571 0.95738 -0.246 0.815 E1C -0.57057 1.20490 -0.474 0.656 E1D -0.22988 0.98274 -0.234 0.824 E1E -1.17181 1.02918 -1.139 0.306 E2B -0.16775 0.87803 -0.191 0.856 E2C 0.05952 1.12779 0.053 0.960 E2D 0.43077 1.19485 0.361 0.733 E2E 0.40633 0.98289 0.413 0.696 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.004 on 5 degrees of freedom Multiple R-squared: 0.7622, Adjusted R-squared: 0.3343 F-statistic: 1.781 on 9 and 5 DF, p-value: 0.2721 ---- What I need to do is force the corresponding environment coefficients to be equal in absolute value, but opposite in sign. That is: E1B = -E2B E1C = -E3C E1D = -E3D E1E = -E1E In essence, E1 and E2 are the "same" variable, but can play two different roles in the model depending on whether it's the first part of the observation or the second part. I searched the archive, and the closest thing I found to my situation was: http://tolstoy.newcastle.edu.au/R/e4/help/08/03/6773.html But the response to that thread didn't seem to be applicable to my situation. Any pointers would be appreciated. Thanks, Keith [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.