我正在解决我的R在线课程的任务。任务是创建一个与以下内容完全相同的图:
将使用给定的随机数函数和set.seed(1423)对80个观测值进行测试。代码如下:
Reg<-function(Anzahl){
set.seed(1423)
if(Anzahl<0|!(is.numeric(Anzahl)&&floor(Anzahl)==Anzahl))stop("Schreiben Sie eine positive ganze Zahl")
X<-runif(Anzahl,min=0,max=20)
Y<-3-0.2*X+rnorm(Anzahl,0,1)
plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue")
axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
axis(side=2,at=c(-2,0,2,4),col=NA,las=1,cex.axis=1.2)
mtext(side=1,"Unabhängige Variable",line=2,cex=1.1)
mtext(side=2,"Abhängige Variable",line=2,cex=1.1)
abline(lm(Y~X),col="red",lwd=2)
grid()
}
Reg(80)
并生成以下情节:
我有两个问题:
1)如何更改图的标题,以在第一张图中显示系数的方式显示系数?
2)可以强制轴只显示偶数(这也是任务的一部分,在代码中,我已将y轴定义为包含-2、0、2、4,但是我可以概括一下,我只希望y轴为偶数吗?
欢迎提出任何其他建议以使情节尽可能相同!
答案 0 :(得分:1)
回答您的问题:
Reg <- function(Anzahl) {
set.seed(1423)
if (Anzahl < 0 | !(is.numeric(Anzahl) && floor(Anzahl) == Anzahl)) {
stop("Schreiben Sie eine positive ganze Zahl")
}
X <- runif(Anzahl, min = 0, max = 20)
Y <- 3 - 0.2 * X + rnorm(Anzahl, 0, 1)
plot(X, Y, axes = F, xlab = NA, ylab = NA, cex = 0.8, pch = 24, bg = "darkblue")
axis(side = 1, at = unique(round(X)[round(X) %% 5 == 0]), col = NA, cex.axis = 1.2)
axis(side = 2, at = unique(round(Y)[round(Y) %% 2 == 0]), col = NA, las = 1, cex.axis = 1.2)
mtext(side = 3, font = 2, cex = 1.1,
text = "Regressionanalyse \n Gleichung: y(x)= 2.89 -0.21 x")
mtext(side = 1, "Unabhängige Variable", line = 2, cex = 1.1)
mtext(side = 2, "Abhängige Variable", line = 2, cex = 1.1)
abline(lm(Y ~ X), col = "red", lwd = 2)
grid()
}
Reg(80)
答案 1 :(得分:1)
如果您正在寻找自动化程度较低的版本,则可以尝试以下逻辑:
逻辑
1)要捕获回归方程:我有一个方程模型,然后使用coef函数捕获系数并将其粘贴到标题上。
2)为了自动使用y轴上的序列,我使用了地板和天花板功能w.r.t Y轴。
注意:由于本地设置不同,我无法在输出中正确呈现(ä)字符。为了解决我使用的stri_trans_general
软件包中的stringi
,如果您的语言环境设置允许您呈现这些字符,则可以完全避免此步骤。
Reg<-function(Anzahl){
set.seed(1423)
if(Anzahl<0|!(is.numeric(Anzahl)&&floor(Anzahl)==Anzahl))stop("Schreiben Sie eine positive ganze Zahl")
X<-runif(Anzahl,min=0,max=20)
Y<-3-0.2*X+rnorm(Anzahl,0,1)
ymin <- ifelse(min(Y) < 0 , floor(min(Y)), ceiling(min(Y)))
ymax <- ifelse(min(Y) > 0 , ceiling(max(Y)), floor(max(Y)))
model <- lm(Y ~ X, data = data.frame(X = X, Y=Y))
object <- paste0('Y(x) = ', round(coef(model)[[2]],2), '*X', ' + ',
round(coef(model)[[1]],2)) ##This is the object that should be pasted in main
plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue",
main=paste0("Regression Analysis \n",object)) #You can add any text here, note the new line in case you want something in next line.
axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
axis(side=2, at=c(seq(((ymin %% 2) == 0)*min(ymin) + ((ymin %% 2) != 0)*(ymin-1),
((ymax %% 2) == 0)*max(ymax) + ((ymax %% 2) != 0)*(ymax+1), 2)),
col=NA, las=1, cex.axis=1.2) # does not work
mtext(side=1,stringi::stri_trans_general("Unabhängige Variable","zh"),line=2,cex=1.1)
mtext(side=2,stringi::stri_trans_general("Abhängige Variable","zh"),line=2,cex=1.1)
abline(lm(Y~X),col="red",lwd=2)
grid()
}
输出: