使用R语言包prospectr进行预处理。。。。。
#R语言学习-光谱分析与处理
#光谱分析预处理包-prospectr包
#####加载
install.packages("prospectr")
library(prospectr)
##帮助-查看包信息---prospectr能够实现SG平滑,SNV,MSC,k均值抽样,连续删除,校准采样的K-S算法等.
??prospectr
##以自己的光谱数据为例子-123数据集
##设置读取数据位置
getwd()
setwd("C:/Users")
##读取数据
data <- read.csv("T.csv",check.names=F)
##去除表头,只剩下光谱数据-400-2450波段
data_ref <- data[ ,-(1:1)] ##根据自己的数据进行适当调整即可
#####movav(X, w)_平滑处理
#X代表矩阵
#w代表几个数据进行平滑,即多少数据进行均值计算
movav_data_ref <- movav(data_ref, 1)
##Savitzky-Golay filtering——Savitzky-Golay平滑
#w窗口必须为基数
#p阶数——阶数越高,误差越小,但是过拟合越来越严重
#m=0光滑
sg_data_ref <- savitzkyGolay(data_ref, p = 3, w = 11, m = 0)
##使用kennard-Stone算法从大量多元数据中选择校正样本-X : 一个数字矩阵。
#k : 要选择的校准样本数。
#metric : 要使用的距离度量:“euclid”(欧几里德距离)或“mahal”(默认马氏距离)。
#pc : 可选。如果未指定,则在欧几里德空间中计算距离。或者,在主成分得分空间中计算距离,pc是主成分的数量保留。如果pc<1,保留的主成分数对应于至少解释(pc*100)总方差的成分数。
#group : 一个可选的因子(或向量,可以强制为因子)as.系数)长度等于nrow(X),提供相关观察的标识(例如,同一批测量的样品、同一来源的样品或同一土壤剖面的样品)。当通过程序选择一个观测点时,同一组的所有观测点一起移除并分配到校准集。这允许选择独立于其余点的校准点。
#.center : 逻辑值,指示是否应在主成分分析之前输入输入矩阵。默认设置为TRUE。
#.scale : 逻辑值,指示输入矩阵是否应在主成分分析之前进行定标。默认设置为FALSE
KS_value<-kenStone(data_ref, k = 133, pc = .99)
traindata<-as.matrix(KS_value$test) #表示第几行是训练集
predictdata<-as.matrix(KS_value$model) #第几行是校准集
##读取ASD FieldSpecPro(ASDi,Boulder,CO)光谱辐射计获取的单个或多个二进制和ASCII文件
readASD(fnames, in_format, out_format)
#fnames : 要读取的文件的名称(具有绝对路径)的字符向量。
#in_format : 输入文件的格式:“binary”或“txt”。
#out_format : 输出的格式:“矩阵”(默认)或“列表