- 写出三个R自带的产生随机数的函数,并给出例子和相应结果;求三大抽样分布的分位数,举出例子。
# 正态分布的随机数
x <- rnorm(10,0,1)
x
## [1] -0.2905442 -0.7020866 0.2760601 0.4571065 -0.7351058 0.3022792
## [7] 0.2078248 -0.1495116 0.6026967 0.1370270
#均匀分布的随机数
y <- runif(10,0,1)
y
## [1] 0.73112095 0.99835025 0.35838114 0.18490417 0.66877899 0.80195096
## [7] 0.35721600 0.06661432 0.79267724 0.96808566
#指数分布的随机数
x <- rexp(10,1)
x
## [1] 0.5198047 0.4995053 0.3286484 2.9852405 2.4874725 5.3152674 0.4844644
## [8] 2.5548583 0.2612188 0.1042081
# t 分布分位数
qt(0.95, 3)
## [1] 2.353363
qt(0.5, 4)
## [1] 0
#f分布分位数
qf(0.95,3,4)
## [1] 6.591382
qf(0.5,3,4)
## [1] 0.9405341
#卡方分布分位数
qchisq(0.95,4)
## [1] 9.487729
qchisq(0.5,4)
## [1] 3.356694
- 请举例画出散点图,曲线图,经验分布函数图,箱式图,直方图和估计的密度函数图像,并做出解释说明。
#散点图,曲线图
data = iris
library(ggplot2)
ggplot(data = data,aes(x = Petal.Length,y=Sepal.Length)) +
geom_point(size = 1,shape = 19) +
geom_smooth(method = loess,level = 0.99,fill = 'grey')
## `geom_smooth()` using formula = 'y ~ x'

#直方图和估计的密度函数图
ggplot(data = data,aes(x= Sepal.Length)) +
geom_histogram(data = data,aes(x=Sepal.Length,y = after_stat(density)),fill = "blue", alpha = 0.2) +
geom_density()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#箱式图
#由上四分位数和下四分位数之间的距离,virginica数据的离散程度小。
#箱体的位置表示数据的中位数,描述数据的集中趋势
#上须和下须的长度表示数据的范围,setosa整体数据较大。
ggplot(data = data, aes(x = Species,y = Sepal.Width)) +
geom_boxplot()

- 写出解一元二次方程\(ax^2+bx+c=0\)代码,并给出具体例子的结果;写出解二元一次方程组
\[
\left\{\begin{array}{l}
a_1 x+b_1 y+c_1=0 \\
a_2 x+b_2 y+c_2=0
\end{array}\right.
\] 代码,并给出具体例子的结果;
#解一元二次方程
equation1 <- function(a,b,c) {
deta <- b^2 - 4 * a *c
if(a == 0) {
x = -c / b
return(x)
}else if(deta >= 0) {
re <- sqrt(b^2 - 4 * a *c)
x1 <- (-b + re) / (2 * a )
x2 <- (-b - re) / (2 * a )
result <- c('x1' = x1,'x2' = x2)
result
}else {
result <- c('无实根')
result
}
}
equation1(0,2,-3)
## [1] 1.5
equation1(1,2,-3)
## x1 x2
## 1 -3
equation1(1,2,1)
## x1 x2
## -1 -1
equation1(1,1,3)
## [1] "无实根"
#解二元一次方程组
A <- matrix(c(2,1,3,-2),2,2)
A
## [,1] [,2]
## [1,] 2 3
## [2,] 1 -2
b = c(8,5)
b
## [1] 8 5
solve(A,b)
## [1] 4.4285714 -0.2857143
- 简述单因子方差分析的原理,并给出一个具体的例子,用R语言进行分析。
#单因子方差分析(One-Way ANOVA)是一种统计方法,用于比较三个或更多组之间的平均值是否存在显著差异。它通过分析组内变异和组间变异之间的比例来确定是否存在显著差异。
#单因子方差分析的原理基于以下假设:总体是正态分布的;各组的方差相等;各组之间相互独立。
# 假设我们有三个不同教学方法的班级(A、B、C),分析考试成绩上是否存在显著差异。我们随机选取学生的成绩。具体的例子如下:假设我们的数据
class_A <- c(80, 85, 90, 82, 88)
class_B <- c(75, 78, 80, 72, 77)
class_C <- c(85, 88, 92, 86, 90)
# 构建单因子方差分析模型
anova_result <- aov(c(class_A, class_B, class_C) ~ c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))))
# 查看方差分析结果
summary(anova_result)
## Df
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) 2
## Residuals 12
## Sum Sq
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) 372.4
## Residuals 138.0
## Mean Sq
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) 186.2
## Residuals 11.5
## F value
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) 16.19
## Residuals
## Pr(>F)
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) 0.000391
## Residuals
##
## c(rep("A", length(class_A)), rep("B", length(class_B)), rep("C", length(class_C))) ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#结论:F值为16.19,p值小于0.05,且各因子水平的均值之间存在十分显著差异。不同教学方法对学生成绩的结果影响十分显著。
- 简述线性回归的原理,并给出一个具体的例子,用R语言进行分析。
#线性回归是一种统计方法,用于建立一个自变量(或称为特征、解释变量)和一个因变量(或称为响应变量)之间的线性关系模型。它的原理是通过最小化实际观测值与回归模型预测值之间的误差平方和,来估计回归系数。
#线性回归的模型可以表示为:Y = β0 + β1*X+ε
#探究20岁男子标准身高(自变量)与体重(因变量)之间的线性关系
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data <- tibble(height = c(152,156,160,164,168,172,176,180,184,188),weight = c(51,53,54,55,57,60,62,65,69,72))
# 拟合简单线性回归模型
lm <- lm(weight~height,data = data)
# 利用模型求出给定x,y的拟合值,以及拟合值的置信区间
new_height <-seq(min(data$height),max(data$height),0.01)
pred_weight <- data.frame(predict(lm,newdata = data.frame(height = new_height),interval = "confidence"),new_height = new_height)
#利用geom_line绘制回归线,利用geom_ribbon绘制置信区间阴影
library(ggplot2)
ggplot() +
geom_point(data = data,aes(height,weight)) +
theme_bw() +
geom_line(pred_weight,mapping = aes(x= new_height,y = fit),color = 'red',linewidth = 1,alpha = 0.5) +
geom_ribbon(pred_weight,mapping = aes(new_height,ymin = lwr,ymax = upr ),fill = 'grey',alpha = 0.5)
