I have got a dataframe df. Is there a way to find the predicted values across groups. For example for below dataframe, I have found the regression equation
df <- structure(list(colA = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), colB = c(48, 34, 56, 34, 56, 78), colC = c(45,
67, 87, 45, 34, 56)), class = "data.frame", row.names = c(NA,
-6L))
fit <- lmList(colB ~ colC | colA, data = df) # to find regression equation
Now is there a way to find the predicted values by inserting new column (Predicted colB) like below
df
colA colB colC Predicted colB
1 A 48 45
2 A 34 67
3 A 56 87
4 B 34 45
5 B 56 34
6 B 78 56
Predicted colB should have the predicted value in colB based on colC. For example in first row, when colC is 45 what is colB?
drob
November 5, 2019, 3:49am
2
You could use predict()
to get a vector of the predicted values. For example:
df$predicted_colB <- predict(fit)
# or with dplyr
df %>%
mutate(predicted_colB = predict(fit))
Note that if the data frame were a new one (not the same data you predicted on), you'd have had to use predict(fit, newdata = df)
.
1 Like
thanks it is working. But I have a datasets with 290 rows. When I use your formula, I get below error. Not sure? Can you guide me?
df$predicted_low <- predict(fit)
Error in names(val) <- rep(namVal, ngrps) :
'names' attribute [290] must be the same length as the vector [289]
drob
November 5, 2019, 5:11am
4
My guess is that there's one missing value in either colB
or colC
(or both). It looks like predict()
on lme4 list objects can't handle that.
Try filtering the data before fitting it:
library(dplyr)
df_filtered <- df %>%
filter(!is.na(colB), !is.na(colC))
fit <- lmList(colB ~ colC | colA, data = df_filtered)
df_filtered$predicted_colB <- predict(fit)
Hi,
what does a vertical line | mean in here:
system
Closed
November 12, 2019, 8:44am
6
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.