library(wooldridge)
data("vote1")

#(i)
model <- lm(voteA ~ prtystrA + expendA + expendB + I(expendA * expendB), data = vote1)
summary(model)
## 
## Call:
## lm(formula = voteA ~ prtystrA + expendA + expendB + I(expendA * 
##     expendB), data = vote1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -28.9999  -8.7632  -0.1726   8.2310  29.7325 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           3.212e+01  4.591e+00   6.995 5.99e-11 ***
## prtystrA              3.419e-01  8.799e-02   3.886 0.000146 ***
## expendA               3.828e-02  4.960e-03   7.718 1.00e-12 ***
## expendB              -3.172e-02  4.588e-03  -6.915 9.32e-11 ***
## I(expendA * expendB) -6.629e-06  7.186e-06  -0.923 0.357584    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.13 on 168 degrees of freedom
## Multiple R-squared:  0.5708, Adjusted R-squared:  0.5606 
## F-statistic: 55.86 on 4 and 168 DF,  p-value: < 2.2e-16
beta_2 <- coef(model)["expendA"]
beta_3 <- coef(model)["expendB"]
beta_4 <- coef(model)["I(expendA * expendB)"]

expendA_val <- 300  # Example value for expendA
expendB_val <- 100  # Example value for expendB

partial_effect_expendB <- beta_3 + beta_4 * expendA_val
cat("Partial effect of expendB on voteA:", partial_effect_expendB, "\n")
## Partial effect of expendB on voteA: -0.03371269
partial_effect_expendA <- beta_2 + beta_4 * expendB_val
cat("Partial effect of expendA on voteA:", partial_effect_expendA, "\n")
## Partial effect of expendA on voteA: 0.03761799
# (ii)
model <- lm(voteA ~ prtystrA + expendA + expendB + I(expendA * expendB), data = vote1)
summary(model)
## 
## Call:
## lm(formula = voteA ~ prtystrA + expendA + expendB + I(expendA * 
##     expendB), data = vote1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -28.9999  -8.7632  -0.1726   8.2310  29.7325 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           3.212e+01  4.591e+00   6.995 5.99e-11 ***
## prtystrA              3.419e-01  8.799e-02   3.886 0.000146 ***
## expendA               3.828e-02  4.960e-03   7.718 1.00e-12 ***
## expendB              -3.172e-02  4.588e-03  -6.915 9.32e-11 ***
## I(expendA * expendB) -6.629e-06  7.186e-06  -0.923 0.357584    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.13 on 168 degrees of freedom
## Multiple R-squared:  0.5708, Adjusted R-squared:  0.5606 
## F-statistic: 55.86 on 4 and 168 DF,  p-value: < 2.2e-16
# (iii)
beta_3 <- coef(model)["expendB"]
beta_4 <- coef(model)["I(expendA * expendB)"]

expendA_val <- 300

effect_expendB <- beta_3 + beta_4 * expendA_val
effect_expendB
##     expendB 
## -0.03371269
# (iv)
expendB_val <- 100

effect_expendA_increase <- (coef(model)["expendA"] + beta_4 * expendB_val) * 100
effect_expendA_increase
##  expendA 
## 3.761799
# (v)
vote1$shareA <- vote1$expendA / (vote1$expendA + vote1$expendB)

model_share <- lm(voteA ~ prtystrA + shareA, data = vote1)
summary(model_share)
## 
## Call:
## lm(formula = voteA ~ prtystrA + shareA, data = vote1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.7258  -3.7460  -0.0886   3.0517  30.7756 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 19.85013    2.41558   8.218 5.08e-14 ***
## prtystrA     0.15320    0.04962   3.087  0.00236 ** 
## shareA      45.08931    1.47955  30.475  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.231 on 170 degrees of freedom
## Multiple R-squared:  0.8638, Adjusted R-squared:  0.8622 
## F-statistic:   539 on 2 and 170 DF,  p-value: < 2.2e-16
# (vi)
expendA_val <- 300
expendB_val <- 0
shareA_val <- expendA_val / (expendA_val + expendB_val)

predicted_voteA <- predict(model_share, newdata = data.frame(prtystrA = mean(vote1$prtystrA), shareA = shareA_val))
predicted_voteA
##        1 
## 72.56214