> library(ggplot2) > library(ggpubr) > > # 创建一个示例数据集 > predicted <- c(17.65138, 25.20848, 35.84161, 43.60831, 49.49514, 53.97651, 57.38967, 66.16531) > actual <- c(14.6313, 20.18572, 28.97064, 35.23582, 40.41306, 44.54261, 47.12309, 69.51883) > data <- data.frame(predicted, actual) > > # 计算相关系数 R2 > r2 <- cor(predicted, actual)^2 > > # 绘制拟合图并添加相关系数 R2 > ggplot(data, aes(x=predicted, y=actual)) + + geom_point() + + geom_smooth(method="lm", se=FALSE) + + stat_cor(label = paste0("R2 = ", round(r2, 2)), + label.x = 3, label.y = 4.5) + + labs(title="Predicted vs Actual", x="Predicted", y="Actual") Error in stat_cor(label = paste0("R2 = ", round(r2, 2)), label.x = 3, : 参数1有多个与之相对应的正式参数
时间: 2023-12-15 15:03:13 浏览: 201
这个错误是因为 `ggpubr` 包中的 `stat_cor()` 函数与 `ggplot2` 包中的 `stat_cor()` 函数参数有所不同,所以在调用时出现了问题。解决这个问题的方法是在调用 `ggpubr` 中的 `stat_cor()` 函数时,明确指定使用 `ggpubr` 包中的函数,而不是使用 `ggplot2` 包中的函数。你可以将代码修改为:
```
ggplot(data, aes(x=predicted, y=actual)) +
geom_point() +
geom_smooth(method="lm", se=FALSE) +
ggpubr::stat_cor(label = paste0("R2 = ", round(r2, 2)),
label.x = 3, label.y = 4.5) +
labs(title="Predicted vs Actual", x="Predicted", y="Actual")
```
这样就可以避免参数不匹配的问题了。
相关问题
基于以下R代码:library(glmnet) library(ggplot2) # 生成5030的随机数据和30个变量 set.seed(1111) n <- 50 p <- 30 X <- matrix(runif(n * p), n, p) y <- rnorm(n) # 生成三组不同系数的线性模型 beta1 <- c(rep(1, 3), rep(0, p - 3)) beta2 <- c(rep(0, 10), rep(1, 3), rep(0, p - 13)) beta3 <- c(rep(0, 20), rep(1, 3), rep(0, p - 23)) y1 <- X %% beta1 + rnorm(n) y2 <- X %% beta2 + rnorm(n) y3 <- X %*% beta3 + rnorm(n),每个线性模型组,均进行交叉验证,并以par(3,2)的规格分别画出每组在进行交叉验证时,基于不同的$\lambda$的线性回归的CV error图和岭回归下的Prediction error图(图中仅需要有一根线平滑地连接每一个点即可,不需要最优$\lambda$取值线为的多余线段,所有画图过程用plot实现)
以下是代码实现:
```R
# 引入包
library(glmnet)
library(ggplot2)
# 生成数据
set.seed(1111)
n <- 50
p <- 30
X <- matrix(runif(n * p), n, p)
y <- rnorm(n)
# 生成三组不同系数的线性模型
beta1 <- c(rep(1, 3), rep(0, p - 3))
beta2 <- c(rep(0, 10), rep(1, 3), rep(0, p - 13))
beta3 <- c(rep(0, 20), rep(1, 3), rep(0, p - 23))
y1 <- X %*% beta1 + rnorm(n)
y2 <- X %*% beta2 + rnorm(n)
y3 <- X %*% beta3 + rnorm(n)
# 交叉验证和岭回归下的CV error和Prediction error图
par(mfrow = c(3, 2))
# 第一组
cv1 <- cv.glmnet(X, y1)
plot(cv1$lambda, cv1$cvm, type = "l", xlab = "lambda", ylab = "CV error")
pred1 <- predict(cv1, newx = X, s = "lambda.min")
plot(y1, pred1, pch = 20, xlab = "y", ylab = "Predicted y", main = "Prediction error")
# 第二组
cv2 <- cv.glmnet(X, y2)
plot(cv2$lambda, cv2$cvm, type = "l", xlab = "lambda", ylab = "CV error")
pred2 <- predict(cv2, newx = X, s = "lambda.min")
plot(y2, pred2, pch = 20, xlab = "y", ylab = "Predicted y", main = "Prediction error")
# 第三组
cv3 <- cv.glmnet(X, y3)
plot(cv3$lambda, cv3$cvm, type = "l", xlab = "lambda", ylab = "CV error")
pred3 <- predict(cv3, newx = X, s = "lambda.min")
plot(y3, pred3, pch = 20, xlab = "y", ylab = "Predicted y", main = "Prediction error")
```
注意:以上示例程序仅供参考,实际应用中还需要考虑细节问题,如图形美观、字体大小等。
library(ggeffects) grid <- expand.grid(X1 = unique(model$X1), X2 = unique(model$X2), X3 = unique(model$X3), X4 = unique(model$X4), X5 = unique(model$X5)) pred <- ggpredict(model, newdata = grid) # 图像处理 # 绘制GAM图,可以使用ggplot2包: gg.gam <- ggplot(pred, aes(x = x, y = predicted, color = predicted)) + geom_point(size = 3) + labs(x = "Predictor", y = "Output") + ggtitle("Output vs Predictor") + xlab("Predictor") + ylab("Output") + scale_color_gradient(low = "blue", high = "red", name = "Output") print(gg.gam)如何解决将数据pred转换为数据框格式
可以使用ggeffects包中的函数ggpredict()将模型预测值转换为数据框格式。然后,使用as.data.frame()函数将其转换为数据框格式。以下是示例代码:
```
library(ggeffects)
grid <- expand.grid(X1 = unique(model$X1),
X2 = unique(model$X2),
X3 = unique(model$X3),
X4 = unique(model$X4),
X5 = unique(model$X5))
pred <- ggpredict(model, newdata = grid)
pred_df <- as.data.frame(pred)
```
这将把预测值存储在名为pred_df的数据框中。
阅读全文