[英]Why do I not get a p-value and F value from ANOVA in R?
我被要求使用適當的測試來確定異亮氨酸的內部濃度在適當的實驗之間是否存在統計學差異。 所以我在 R 中構建了一個數據框,如下所示:
dat <- data.frame(experiment = c('no glu', 'glu', 'gluFCCP', 'gluV', 'gluN', 'gluNV'),internal_concentration = c(2.38, 8.57, 3.42, 6.17, 4.58,3.51))
print(dat)
experiment internal_concentration
1 no glu 2.38
2 glu 8.57
3 gluFCCP 3.42
4 gluV 6.17
5 gluN 4.58
6 gluNV 3.51
我選擇執行方差分析測試:
model<-lm(dat$internal_concentration~dat$experiment)
anova(model)
Analysis of Variance Table
Response: dat$internal_concentration Df Sum Sq Mean Sq F value Pr(>F) dat$experiment 5 25.558 5.1117
Residuals 0 0.000
我需要 F 和 p 值來確定是否存在顯着差異,但此結果不起作用。 我應該如何解釋此錯誤以及有關如何更改代碼/使用的測試的任何建議? 對於每個實驗,我只有一個濃度值。
# Dataset (reproduced)
df <- data.frame(
x = c('no glu', 'glu', 'gluFCCP', 'gluV', 'gluN', 'gluNV'), # 6 groups
y = c(2.38, 8.57, 3.42, 6.17, 4.58, 3.51) # 6 values
)
您似乎只想使用六個觀測值來測試六個實驗組之一之間的差異——每組一個。 您沒有報告具體的錯誤消息,但很明顯您沒有足夠的剩余自由度來估計模型。 在此設置中,您無法估計方差或$p$值。 這是使用lm()
函數估計的模型的summary()
:
Call:
lm(formula = y ~ x, data = df)
Residuals:
ALL 6 residuals are 0: no residual degrees of freedom!
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.57 NA NA NA
xgluFCCP -5.15 NA NA NA
xgluN -3.99 NA NA NA
xgluNV -5.06 NA NA NA
xgluV -2.40 NA NA NA
xno glu -6.19 NA NA NA
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: NaN
F-statistic: NaN on 5 and 0 DF, p-value: NA
前面的摘要輸出更明確一些。 組的數量等於觀察的數量,這是您無法承受的更多變量。 使用aov()
或lm()
運行模型不會改變任何東西。
一般來說,觀察的數量應該超過參數(即組)的數量。
您的模型具有與測量值一樣多的參數。 這將始終使殘差為零。
因此, anova
函數將不會計算$p$值(不僅如此,它也無法計算$F$值)。
可能您對 6 個條件中的每一個都有多個測量值。 如果您分別包含所有這些測量值,那么分析將是有意義的。
方差分析使用這些額外的測量來估計組內的方差,即使條件相同也會發生誤差/方差。 您需要對該方差進行估計,否則,您無法知道建模值如何與沒有影響時存在的隨機變化相關(即使沒有影響,您的測量值也會顯示組之間的差異,因為測量的變化)。
如何更改代碼/使用的測試? 對於每個實驗,我只有一個濃度值。
您說每個實驗條件只進行一次,因此正如其他人所說,您無法估計每個條件周圍的變化,也無法得出任何 p 值。
但是,您仍然可以對每個實驗條件周圍有多少變化有一個合理的猜測。 也許在該領域中被接受的是,葡萄糖濃度的測量非常可靠,並且您的實驗裝置具有相當的可重復性。 此外,您可能對條件之間的差異有期望和解釋。 如果是這樣,我會提供數據,因為它增加了可接受的不確定性度量。
假設您多次重復每個實驗,您會期望大多數結果(比如 95%)與您所擁有的結果相差 1 個單位以內,那么您的結果將如下所示:
dat <- data.frame(experiment = c('no glu', 'glu', 'gluFCCP', 'gluV', 'gluN', 'gluNV'),
internal_concentration = c(2.38, 8.57, 3.42, 6.17, 4.58,3.51))
dat <- dat[order(dat$internal_concentration),] dat$up <- dat$internal_concentration + 1 dat$down <- dat$internal_concentration - 1
b <- barplot(dat$internal_concentration, names.arg= dat$experiment, ylim= c(0, max(dat$up)), ylab= 'Internal concentration') segments(x0= b, y0= dat$down, y1= dat$up)
這表明您不能說太多關於“無 glu”與 gluFCCP 和 gluNV 之間的區別。 而“no glu”和glu 之間的差異足夠大,值得討論。
這並不理想,您必須非常清楚地表明這些誤差條是有根據的猜測,但也許是使用您擁有的數據的一種公平方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.