统计建模与R软件课后习题答案25章Word文件下载.docx
《统计建模与R软件课后习题答案25章Word文件下载.docx》由会员分享,可在线阅读,更多相关《统计建模与R软件课后习题答案25章Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

-c(rep(1,times=5),rep(2,times=3),rep(3,times=4),rep(4,times=2));
x#或者省略times=,如下面的形式
-c(rep(1,5),rep(2,3),rep(3,4),rep(4,2));
x
rep()的使用方法。
rep(a,b)即将a重复b次
Ex2.4
n<
-5;
H<
-array(0,dim=c(n,n))
for(iin1:
n){for(jin1:
n){H[i,j]<
-1/(i+j-1)}};
G<
-solve(H);
G#求H的逆矩阵
ev<
-eigen(H);
ev#求H的特征值和特征向量
数组初始化;
for循环的使用
待解决:
如何将很长的命令(如for循环)用几行打出来再执行?
每次想换行的时候一按回车就执行了还没打完的命令...
Ex2.5
StudentData<
-data.frame(name=c("
zhangsan"
"
lisi"
wangwu"
zhaoliu"
dingyi"
),sex=c("
F"
M"
),age=c("
14"
15"
16"
),height=c("
156"
165"
157"
162"
159"
),weight=c("
42"
49"
41.5"
52"
45.5"
));
StudentData
数据框的使用
SSH登陆linux服务器中文显示乱码。
此处用英文代替。
Ex2.6
write.table(StudentData,file="
studentdata.txt"
)
#把数据框StudentData在工作目录里输出,输出的文件名为studentdata.txt.
StudentData_a<
-read.table("
);
StudentData_a
#以数据框的形式读取文档studentdata.txt,存入数据框StudentData_a中。
write.csv(StudentData_a,"
studentdata.csv"
#把数据框StudentData_a在工作目录里输出,输出的文件名为studentdata.csv,可用Excel打开.
读写文件。
read.table("
file"
write.table(Rdata,"
read.csv("
write.csv(Rdata,"
外部文件,不论是待读入或是要写出的,命令中都得加双引号。
Ex2.7
Fun<
-function(n){
if(n<
=0)
list(fail="
pleaseinputaintegerabove0!
"
else{
repeat{
if(n==1)break
elseif(n%%2==0){n<
-n/2}
elsen<
-3*n+1
}
list("
sucess!
在linux下新建一个R文件,输入上述代码,保存为"
2.7.R"
然后在当前目录下进入R环境,输入source("
),即打开了这个程序脚本。
然后就可以执行函数了。
输入Fun(67),显示
输入Fun(-1),显示
$fail
[1]"
source("
*.R"
)是可以理解为载入这个R文件吧?
如何在R环境下关闭R文件呢?
Ex3.1
新建txt文件如下:
3.1.txt
74.379.575.073.575.874.073.567.275.873.578.875.673.575.075.8
72.079.576.573.579.568.875.078.872.068.876.573.572.775.070.4
78.078.874.364.376.574.374.770.472.776.570.472.075.875.870.4
76.565.077.273.572.780.572.065.080.371.277.676.568.873.577.2
80.572.074.369.781.267.381.667.372.784.369.774.371.274.375.0
72.075.467.381.675.071.271.269.773.570.475.072.767.370.376.5
73.572.068.073.568.074.372.772.774.370.4
编写一个函数(程序名为data_outline.R)描述样本的各种描述性统计量。
data_outline<
-function(x){
n<
-length(x)
m<
-mean(x)
v<
-var(x)
s<
-sd(x)
me<
-median(x)
cv<
-100*s/m
css<
-sum((x-m)^2)
uss<
-sum(x^2)
R<
-max(x)-min(x)
R1<
-quantile(x,3/4)-quantile(x,1/4)
sm<
-s/sqrt(n)
g1<
-n/((n-1)*(n-2))*sum((x-m)^3)/s^3
g2<
-((n*(n+1))/((n-1)*(n-2)*(n-3))*sum((x-m)^4)/s^4-(3*(n-1)^2)/((n-2)*(n-3)))
data.frame(N=n,Mean=m,Var=v,std_dev=s,Median=me,std_mean=sm,CV=cv,CSS=css,USS=uss,R=R,R1=R1,Skewness=g1,Kurtosis=g2,row.names=1)
进入R,
data_outline.R"
)#将程序调入内存
serumdata<
-scan("
3.1.txt"
serumdata#将数据读入向量serumdata。
data_outline(serumdata)
结果如下:
NMeanVarstd_devMedianstd_meanCVCSSUSSR
110073.69615.416753.92641773.50.39264175.3278571526.258544636.320
R1SkewnessKurtosis
14.60.038542490.07051809
read.table()用于读表格形式的文件。
上述形式的数据由于第七行缺几个数据,故用read.table()不能读入。
scan()可以直接读纯文本文件。
scan()和matrix()连用还可以将数据存放成矩阵形式。
X<
-matrix(scan("
0),ncol=10,byrow=TRUE)#将上述数据放置成10*10的矩阵。
scan()还可以从屏幕上直接输入数据。
Y<
-scan()
然后按提示输入即可。
结束输入时按回车即可。
Ex3.2
>
hist(serumdata,freq=FALSE,col="
purple"
border="
red"
density=3,angle=60,main=paste("
thehistogramofserumdata"
),xlab="
age"
ylab="
frequency"
)#直方图。
col是填充颜色。
默认空白。
border是边框的颜色,默认前景色。
density是在图上画条纹阴影,默认不画。
angle是条纹阴影的倾斜角度(逆时针方向),默认45度。
main,xlab,ylab是标题,x和y坐标轴名称。
lines(density(serumdata),col="
blue"
)#密度估计曲线。
-64:
85
lines(x,dnorm(x,mean(serumdata),sd(serumdata)),col="
green"
)#正态分布的概率密度曲线
plot(ecdf(serumdata),verticals=TRUE,do.p=FALSE)#绘制经验分布图
lines(x,pnorm(x,mean(serumdata),sd(serumdata)),col="
)#正态经验分布
qqnorm(serumdata,col="
)#绘制QQ图
qqline(serumdata,col="
)#绘制QQ直线
Ex3.3
stem(serumdata,scale=1)#作茎叶图。
原始数据小数点后数值四舍五入。
Thedecimalpointisatthe|
64|300
66|23333
68|00888777
70|34444442222
72|0000000777777755555555555
74|033333333700000004688888
76|5555555226
78|0888555
80|355266
82|
84|3
boxplot(serumdata,col="
lightblue"
notch=T)#作箱线图。
notch表示带有缺口。
fivenum(serumdata)#五数总结
[1]64.371.273.575.884.3
Ex3.4
shapiro.test(serumdata)#正态性Shapori-Wilk检验方法
Shapiro-Wilknormalitytest
data:
serumdata
W=0.9897,p-value=0.6437
结论:
p值>
0.05,可认为来自正态分布的总体。
ks.test(serumdata,"
pnorm"
mean(serumdata),sd(serumdata))#Kolmogrov-Smirnov检验,正态性
One-sampleKolmogorov-Smirnovtest
D=0.0701,p-value=0.7097
alternativehypothesis:
two-sided
Warningmessage:
Inks.test(serumdata,"
mean(serumdata),sd(serumdata)):
cannotcomputecorrectp-valueswithties
注意,这里的警告信息,是因为数据中有重复的数值,ks检验要求待检数据时连续的,不允许重复值。
Ex3.5
y<
-c(2,4,3,2,4,7,7,2,2,5,4,5,6,8,5,10,7,12,12,6,6,7,11,6,6,7,9,5,5,10,6,3,10)#输入数据
f<
-factor(c(rep(1,11),rep(2,10),rep(3,12)))#因子分类
plot(f,y,col="
lightgreen"
)#plot()生成箱线图
x<
-c(2,4,3,2,4,7,7,2,2,5,4)
-c(5,6,8,5,10,7,12,12,6,6)
z<
-c(7,11,6,6,7,9,5,5,10,6,3,10)
boxplot(x,y,z,names=c("
1"
2"
3"
),col=c(5,6,7))#boxplot()生成箱线图
第2和第3组没有显著差异。
第1组合其他两组有显著差异。
Ex3.6
数据太多,懒得录入。
离散图应该用plot即可。
Ex3.7
studata<
3.7.txt"
)#读入数据
data.frame(studata)#转化为数据框
V1V2V3V4V5V6
11alicef1356.584.0
22beckaf1365.398.0
33gailf1464.390.0
44karenf1256.377.0
55kathyf1259.884.5
66maryf1566.5112.0
77sandyf1151.350.5
88sharonf1562.5112.5
99tammyf1462.8102.5
1010alfredm1469.0112.5
1111dukem1463.5102.5
1212guidom1567.0133.0
1313jamesm1257.383.0
1414jefferym1362.584.0
1515johnm1259.099.5
1616philipm1672.0150.0
1717robertm1264.8128.0
1818thomasm1157.585.0
1919williamm1566.5112.0
names(studata)<
-c("
stuno"
name"
sex"
height"
weight"
),studata#给各列命名
stunonamesexageheightweight
...
attach(studata)#将数据框调入内存
plot(weight~height,col="
)#体重对于身高的散点图
coplot(weight~height|sex,col="
)#不同性别,体重与身高的散点图
coplot(weight~height|age,col="
)#不同年龄,体重与身高的散点图
coplot(weight~height|age+sex,col="
)#不同年龄和性别,体重与身高的散点图
Ex3.8
-seq(-2,3,0.05)
-seq(-1,7,0.05)
-function(x,y)x^4-2*x^2*y+x^2-2*x*y+2*y^2+4.5*x-4*y+4
-outer(x,y,f)#必须做外积运算才能绘出三维图形
contour(x,y,z,levels=c(0,1,2,3,4,5,10,15,20,30,40,50,60,80,100),col="
)#二维等值线
persp(x,y,z,theta=120,phi=0,expand=0.7,col="
)#三位网格曲面
Ex3.9
attach(studata)
cor.test(height,weight)#Pearson相关性检验
Pearson'
sproduct-momentcorrelation
heightandweight
t=7.5549,df=17,p-value=7.887e-07
truecorrelationisnotequalto0
95percentconfidenceinterval:
0.70443140.9523101
sampleestimates:
cor
0.8777852
由此可见身高和体重是相关的。
Ex4.2
指数分布,λ的极大似然估计是n/sum(Xi)
-c(rep(5,365),rep(15,245),rep(25,150),rep(35,100),rep(45,70),rep(55,45),rep(65,25))
lamda<
-length(x)/sum(x);
lamda
[1]0.05
Ex4.3
Poisson分布P(x=k)=λ^k/k!
*e^(-λ)
其均数和方差相等,均为λ,其含义为平均每升水中大肠杆菌个数。
取均值即可。
-c(rep(0,17),rep(1,20),rep(2,10),rep(3,2),rep(4,1))
mean(x)
[1]1
平均为1个。
Ex4.4
obj<
-function(x){f<
-c(-13+x[1]+((5-x[2])*x[2]-2)*x[2],-29+x[1]+((x[2]+1)*x[2]-14)*x[2]);
sum(f^2)}#其实我也不知道这是在干什么。
所谓的无约束优化问题。
x0<
-c(0.5,-2)
nlm(obj,x0)
$minimum
[1]48.98425
$estimate
[1]11.4127791-0.8968052
$gradient
[1]1.411401e-08-1.493206e-07
$code
$iterations
[1]16
Ex4.5
-c(54,67,68,78,70,66,67,70,65,69)
t.test(x)#t.test()做单样本正态分布区间估计
OneSamplet-test
x
t=35.947,df=9,p-value=4.938e-11
truemeanisnotequalto0
63.158571.6415
meanofx
67.4
平均脉搏点估计为67.4,95%区间估计为63.158571.6415。
t.test(x,alternative="
less"
mu=72)#t.test()做单样本正态分布单侧区间估计
t=-2.4534,df=9,p-value=0.01828
truemeanislessthan72
-Inf70.83705
p值小于0.05,拒绝原假设,平均脉搏低于常人。
t.test()函数的用法。
本例为单样本;
可做双边和单侧检验。
Ex4.6
-c(140,137,136,140,145,148,140,135,144,141);
[1]140137136140145148140135144141
-c(135,118,115,140,128,131,130,115,131,125);
y
[1]135118115140128131130115131125
t.test(x,y,var.equal=TRUE)
TwoSamplet-test
xandy
t=4.6287,df=18,p-value=0.0002087
truedifferenceinmeansisnotequalto0
7.5362620.06374
meanofxmeanofy
140.6126.8
期望差的95%置信区间为7.5362620.06374。
t.test()可做两正态样本均值差估计。
此例认为两样本方差相等。
ps:
我怎么觉得这题应该用配对t检验?
Ex4.7
-c(0.143,0.142,0.143,0.137)
-c(0.140,0.142,0.136,0.138,0.140)
t=1.198,df=7,p-value=0.2699
-0.0019963510.006096351
0.141250.13920
期望差的95%的区间估计为-0.0019963510.006096351
Ex4.8
接Ex4.6
var.test(x,y)
Ftesttocomparetwovariances
F=0.2353,numdf=9,denomdf=9,p-value=0.04229
trueratioofvariancesisnotequalto1
0.058452760.94743902
ratioofvariances
0.2353305
var.test可做两样本方差比的估计。
基于此结果可认为方差不等。
因此,在Ex4.6中,计算期望差时应该采取方差不等的参数。
t.test(x