免责声明
我是这个网站的新手,对 R 相对较新(两周的学习),只有非常基础的统计学知识,如果我在那里犯了一个愚蠢的错误或问了不好的问题或其他什么,我很抱歉。
我也不知道如何很好地将我的数据集嵌入到帖子中(我搜索了元数据但没有找到任何相关信息)所以我分享了来自 Google Drive 的链接(如果你知道更好的方法,请告诉我,我可以更改它或如果您有权编辑,请自行执行)。
解释
在我参加的物理实验室课程中,我做了一个实验,使用不同厚度的滤光片确定光学介质的衰减系数(使用此光谱仪http://www.vernier.com/products/sensors/spectrometers/visible-range/ v-规范/)。
它生成的数据可以在这里下载以重现我的结果:https ://docs.google.com/uc?authuser=0&id=0B5x0REqWCRBuaHlXc2JWZ19sWE0&export=download
我的目标是确定,其中是衰减系数和波长,使用 Beer-Lambert 定律,其中规定(是厚度):
对于不同厚度的滤光片(从 1 到 5 mm),我有 5 条“曲线”,并且我拟合了每个波长的指数模型,这给了我该。
我试过这个:
线性化模型
通过对上述方程取对数和一些代数运算,我们得到:
由 R 命令表示lm( I(log(x0/temp.theta)) ~ l + 0 )
非线性模型
我采用 Beer-Lambert 定律(第一个方程)并将其建模为nls(temp.theta ~ I(x0 * exp(-k*l)) + 0 , start= list(k = k.l)),其中 是从线性化模型中获得的k.l = coef(lm(...))。
复制代码
我设置了x0 = 100因为是用百分比来衡量的。
x0 = 100 #x=0 intercept of the exp function
data = read.delim2("export2.csv")
l = data$l
l = l[-which(is.na(l))]
data$l = NULL
data$kappa.l = NA
data$sd.l = NA
data$kappa.nl = NA
data$sd.nl = NA
for(i in 1:nrow(data)){
temp.theta = as.numeric(data[i,-which(names(data) %in% c("lambda","kappa.l","kappa.nl","sd.l","sd.nl"))])
temp.lm = lm( I(log(x0/temp.theta)) ~ l + 0 )
k.l = coef(temp.lm)
data[i , "kappa.l"] = k.l
data[i , "sd.l"] = coef(summary(temp.lm))[ ,"Std. Error"]
temp.nls = nls(temp.theta ~ I(x0 * exp(-k*l)) + 0, start = list(k = k.l))
data[i , "kappa.nl"] = coef(temp.nls)
data[i , "sd.nl"] = coef(summary(temp.nls))[ ,"Std. Error"]
}
问题
当我可视化结果时,我得到下面的图表。出现了这些问题:
- 为什么在 400 nm 波长附近的拟合差异如此之大?
- 哪一个更适合数据?
- 或者数据是否远离指数行为,所以我必须在它们相遇的地方削减它们?
- 这些模型中哪一个在统计上(更)正确?
- 我可以通过根据测量不确定性(我认为 Vernier 网上所述的 5%)添加权重来使拟合更好吗?
具有较高值的拟合是非线性的

